实现金蝶盘亏单到聚水潭出库单的自动化数据转换

  • 轻易云集成顾问-张妍琪

金蝶云星空与聚水潭数据集成案例:盘亏单到其他出库单的转换实现

在企业精细化管理中,不同业务系统的数据连通和高效处理至关重要。本篇文章将深入解析如何通过轻易云数据集成平台,实现金蝶云星空系统的盘亏单到聚水潭系统中的其他出库单的平滑对接。

第一步:采用executeBillQuery API获取金蝶云星空数据

为了确保从金蝶云星空获得准确而完整的盘亏单信息,我们使用其提供的executeBillQuery接口。该接口具备良好的灵活性和时效性,通过高吞吐量的数据写入能力,能够迅速处理并抓取大量业务数据。

GET /executeBillQuery
Host: api.kingdee.com
Content-Type: application/json
{
    "billType": "IC_InventoryLoss",
    "pageIndex": 1,
    "pageSize": 50,
    ...
}

在调用此API时,特别需要注意以下几点:

  • 分页处理与限流问题:由于返回的数据量可能较大,需要配置分页请求,并合理设置每页大小;同时为避免触发频率限制,可设置适当间隔时间。
  • 定时可靠抓取机制:通过轻易云平台设定每日定时任务,以保证盘亏单数据不漏抓。

第二步:自定义数据转换逻辑以匹配业务需求

将从金蝶云星空获取到的数据映射到聚水潭所需格式,是实现两者无缝对接的重要环节。利用轻易云提供的数据转换工具,可以根据特定业务需求进行字段映射、类型转换等操作。例如,将“盘亏原因”字段对应转化为“出库备注”。

[
   {
       "inventoryLossNumber": "PL202309001",
       "inventoryLossDate": "2023-09-15",
       ...
       -> 
       {
           "outOrderNo": "PL202309001",
           "outDate": "2023-09-15",
           ...
        }
   }
]

这种自定义逻辑不仅提升了映射效率,还能有效应对各种复杂场景下的数据结构差异问题。

第三步:通过聚水潭API实现批量提交

完成了以上准备工作后,我们便可以使用聚水潭开放的/open/jushuitan/otherinout/upload接口,对经过转换后的盘亏单进行批量传递:

POST /open/jushuitan/otherinout/upload
Host: api.jushuitan.com
Content-Type: application/json
Authorization: Bearer {token}
{
    “data”: [

![系统集成平台API接口配置](https://pic.qeasy.cloud/D16.png~tplv-syqr462i7n-qeasy.image)
### 调用金蝶云星空接口executeBillQuery获取并加工数据

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取盘亏单数据,并进行初步加工。

#### 接口配置与调用

首先,我们需要了解如何配置和调用金蝶云星空的`executeBillQuery`接口。根据提供的元数据配置,我们可以清晰地看到接口的各项参数及其作用。

```json
{
  "api": "executeBillQuery",
  "effect": "QUERY",
  "method": "POST",
  "number": "FBillNo",
  "id": "FBillEntry_FEntryID",
  "name": "FBillNo",
  "idCheck": true,
  ...
}

该接口使用POST方法进行查询操作,主要通过单据编号(FBillNo)和分录主键ID(FBillEntry_FEntryID)来标识和获取具体的数据条目。

请求参数详解

请求参数是接口调用的关键部分,以下是主要请求字段及其描述:

  • FBillEntry_FEntryID: 分录主键ID,用于唯一标识每条记录。
  • FID: 实体主键,标识具体业务对象。
  • FBillNo: 单据编号,用于查询特定单据。
  • FDocumentStatus: 单据状态,过滤条件之一。
  • FStockOrgId_FNumber: 库存组织编号。
  • FDate: 日期字段,用于时间范围过滤。
  • FMaterialId_FNumber: 物料编码。
  • FLossQty: 盘亏数量,是我们关注的核心数据之一。
{
  "field": "FilterString",
  "label": "过滤条件",
  "type": "datetime",
  "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=",
  "value": "FDocumentStatus='C' and FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'"
}

上述过滤条件示例中,通过单据状态和审核日期来筛选符合条件的数据,这样可以确保我们获取的是最新且已审核的数据。

数据请求与清洗

在实际操作中,我们需要编写脚本或配置轻易云平台来发送上述请求,并对返回的数据进行清洗和初步加工。以下是一个简化的示例代码片段:

import requests
import json

url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
    'FormId': 'STK_StockCountLoss',
    'FieldKeys': 'FBillEntry_FEntryID, FBillNo, FLossQty, FMaterialId.FNumber',
    'FilterString': 'FDocumentStatus=\'C\' and FApproveDate>=\'2023-01-01\'',
    'Limit': '100',
    'StartRow': '0'
}

response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()

# 数据清洗与初步加工
cleaned_data = []
for entry in data:
    cleaned_entry = {
        'entry_id': entry['FBillEntry_FEntryID'],
        'bill_no': entry['FBillNo'],
        'loss_qty': entry['FLossQty'],
        'material_code': entry['FMaterialId.FNumber']
    }
    cleaned_data.append(cleaned_entry)

print(cleaned_data)

在这个示例中,我们发送了一个POST请求,指定了表单ID、需要查询的字段以及过滤条件。返回的数据经过初步清洗后,只保留了我们关心的字段:分录主键ID、单据编号、盘亏数量和物料编码。

数据转换与写入

在完成数据请求与清洗后,下一步是将这些数据转换为目标系统所需的格式,并写入目标系统。这一步通常涉及到字段映射、格式转换等操作。例如,将盘亏单数据转换为聚水潭系统中的其他出库单格式。

transformed_data = []
for entry in cleaned_data:
    transformed_entry = {
        'outbound_order_no': entry['bill_no'],
        'product_code': entry['material_code'],
        'quantity': entry['loss_qty']
    }
    transformed_data.append(transformed_entry)

# 将转换后的数据写入目标系统
# 示例代码略

以上步骤展示了如何通过轻易云平台调用金蝶云星空接口获取盘亏单数据,并进行初步加工和转换。这些操作确保了不同系统间的数据无缝对接,提高了业务流程的自动化程度和效率。 打通用友BIP数据接口

利用轻易云数据集成平台进行ETL转换:金蝶盘亏单据到聚水潭其他出库单

在数据集成过程中,ETL(Extract, Transform, Load)是关键的一步。本文将详细探讨如何利用轻易云数据集成平台将金蝶的盘亏单据数据转换为聚水潭API接口所能接收的格式,并最终写入目标平台。

API接口配置

首先,我们需要了解目标平台聚水潭的API接口配置。以下是元数据配置:

{
  "api": "/open/jushuitan/otherinout/upload",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field":"is_confirm","label":"是否确认单据","type":"string","value":"_function IF({F_POKM_JSTSTOCKNUMBER} = 10816570 , 1 , 0 )"},
    {"field":"excute_confirming","label":"是否审核单据","type":"string","value":"true"},
    {"field":"wms_co_id","label":"仓库编号","type":"int","value":"{F_POKM_JSTSTOCKNUMBER}"},
    {"field":"type","label":"出入库类型","type":"string","value":"out"},
    {"field":"external_id","label":"外部单号","type":"string","value":"{FBillNo}{F_POKM_JSTSTOCKNUMBER}{F_POKM_JSTSTOCKNUMBER2}"},
    {"field":"remark","label":"备注","type":"string","value":"金蝶盘亏单据推送,单号:{FBillNo}"},
    {"field":"items","label":"items","type":"array","value":"list", "children":[
      {"field":"sku_id","label":"商品编码","type":"string","value":"{{list.FMaterialId_FNumber}}"},
      {"field":"qty","label":"入库数量","type":"string","value":"{{list.FLossQty}}"}
    ]},
    {"field": "lc_id", "label": "物流公司编码", "type": "string"},
    {"field": "l_id", "label": "物流单号", "type": "string"},
    {"field": "logistics_company", "label": "物流公司名称", "type": "string"},
    {"field": "drp_co_name", "label": "出库类型", "type": "string", "value": "盘亏出库"},
    {"field": "warehouse", "label": "分仓", "type": "string", "value": "{F_POKM_JSTSTOCKNUMBER2}"}
  ],
  ...
}

数据转换与映射

在ETL过程中,数据的转换与映射是核心步骤。我们需要将金蝶系统中的字段映射到聚水潭API所需的字段。

  1. 确认与审核

    • is_confirm: 使用函数判断{F_POKM_JSTSTOCKNUMBER}是否等于特定值,返回1或0。
    • excute_confirming: 固定值true表示审核单据。
  2. 仓库与出入库类型

    • wms_co_id: 映射金蝶中的{F_POKM_JSTSTOCKNUMBER}
    • type: 固定值out表示出库类型。
    • drp_co_name: 固定值盘亏出库
  3. 外部单号与备注

    • external_id: 拼接多个字段生成唯一外部单号。
    • remark: 包含固定文本和动态字段的备注信息。
  4. 商品明细

    • items: 数组结构,其中每个元素包含商品编码和数量。
      • sku_id: 对应金蝶中的{list.FMaterialId_FNumber}
      • qty: 对应金蝶中的{list.FLossQty}
  5. 物流信息

    • 包含物流公司编码、物流单号和物流公司名称,这些字段可以根据实际需求进行填充。

数据写入

在完成数据转换后,通过POST方法将数据写入聚水潭API。具体操作如下:

import requests
import json

url = 'https://api.jushuitan.com/open/jushuitan/otherinout/upload'
headers = {'Content-Type': 'application/json'}

data = {
  # 构建请求体,根据上文配置填充相应字段
}

response = requests.post(url, headers=headers, data=json.dumps(data))

if response.status_code == 200:
    print("数据成功写入聚水潭")
else:
    print(f"写入失败,状态码: {response.status_code}, 响应内容: {response.text}")

小结

通过上述步骤,我们实现了从金蝶系统到聚水潭系统的数据ETL过程。利用轻易云数据集成平台,我们能够高效地完成数据的提取、转换和加载,使得不同系统间的数据流动更加顺畅。 金蝶与CRM系统接口开发配置

更多系统对接方案