实现跨平台数据同步:管易云到金蝶云星空的实战技术

  • 轻易云集成顾问-卢剑航

管易云·奇门数据集成到金蝶云星空:发货单=>销售出库单

在实际业务场景中,将管易云·奇门平台的发货单数据高效、准确地集成到金蝶云星空系统中的销售出库单,是企业实现跨平台无缝对接的一项关键任务。本文将分享一个具体的技术案例,展示如何通过轻易云数据集成平台配置元数据,实现这一目标。

我们的解决方案主要聚焦以下几个方面:

  1. 定时可靠的数据抓取: 利用管易云·奇门提供的API接口gy.erp.trade.deliverys.get,我们设定了定时任务来抓取最新的发货单数据。为了确保不漏单,每次调用后都会记录当前获取的数据时间戳,并在下次调用时以此为起始点进行增量抓取。这种机制不仅保证了新订单可以及时同步,还避免了重复获取同一批次数据。

  2. 分页与限流处理: 在大量订单涌入情况下,我们采用分页处理机制,通过设置合理的页码和每页条数参数,有效应对API接口响应速度及服务器压力。同时,通过限流措施控制请求频率,以遵循管易云·奇门API使用规范,防止因过多请求导致服务被暂时封禁或性能下降。

  3. 批量快速写入: 对于从管易云·奇门获取的大量发货单信息,我们利用金蝶云星空提供的数据写入接口batchSave进行批量操作,这样能够大幅提升写入效率。此外,为保证数据一致性,在执行批量提交前会进行必要的数据验证和清洗工作,以确保所有字段都符合金蝶系统要求。

  4. 格式差异与自定义映射: 发货单与销售出库单之间尽管有很多相似字段,但仍存在一定格式差异。对此,我们通过轻易云平台内建的映射功能,对两者间不同字段进行了规则定义,并灵活使用转换函数,使得源端(管易)和目标端(金蝶)的数据结构完全匹配,从而确保平滑过渡。此外,还支持自定义字段映射,让特殊需求也能得到满足。

  5. 异常处理与重试机制: 数据对接过程中难免会遇到各种网络、服务异常情况,因此我们设计了一套完善的错误捕捉与自动重试逻辑。当出现异常情况(如连接超时、返回错误等)时,会先记录日志并触发告警,同时根据异常类型决定是否立即重试或者延迟若干时间后再尝试重新提交,从而提高整体成功率并最大程度减少 如何开发用友BIP接口

    调用管易云·奇门接口gy.erp.trade.deliverys.get获取并加工数据的技术方案

在数据集成生命周期的第一步,我们需要调用源系统管易云·奇门接口gy.erp.trade.deliverys.get来获取发货单数据,并进行相应的数据加工。以下是详细的技术方案和实现步骤。

1. 接口调用配置

首先,我们需要配置接口调用的元数据。根据提供的metadata,接口调用采用POST方法,分页大小为50。请求参数包括创建时间、发货时间、修改时间等多个字段。以下是具体的请求配置:

{
  "api": "gy.erp.trade.deliverys.get",
  "method": "POST",
  "pagination": {
    "pageSize": 50
  },
  "request": [
    {"field": "start_create", "label": "创建时间开始段", "type": "string"},
    {"field": "end_create", "label": "创建时间结束段", "type": "string"},
    {"field": "start_delivery_date", "label": "发货时间开始段", "type": "string", "value":"{{LAST_SYNC_TIME|datetime}}"},
    {"field": "end_delivery_date", "label": "发货时间结束段", "type": "string", "value":"{{CURRENT_TIME|datetime}}"},
    {"field": "start_modify_date", "label": "修改时间开始段", "type": "string"},
    {"field": "end_modify_date", "label": "修改时间结束段", "type": "string"},
    {"field": "del", "label":"返回是否作废的单据","type":"string"},
    {"field":"delivery","label":"发货状态","type":"string","value":"1"},
    {"field":"code","label":"单据编号","type":"string"}
  ],
  ...
}

2. 数据清洗与转换

在获取到原始数据后,需要对数据进行清洗和转换。metadata中定义了一个响应格式化规则,将delivery_statusInfo.delivery_date字段转换为delivery_date_new,并将其格式化为日期类型。


{
  ...

![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台将发货单转换为金蝶云星空销售出库单的技术案例

在数据集成过程中,ETL(Extract, Transform, Load)转换是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将发货单数据转换为金蝶云星空API接口所能接收的销售出库单格式,并最终写入目标平台。

#### 数据转换与写入配置详解

在这个案例中,我们需要将源平台的发货单数据通过ETL转换,转化为符合金蝶云星空API接口要求的销售出库单格式。以下是元数据配置的详细解析:

1. **API基本信息**
   - `api`: "batchSave" 表示批量保存操作。
   - `method`: "POST" 使用HTTP POST方法。
   - `effect`: "EXECUTE" 表示执行操作。
   - `idCheck`: true 启用ID检查。

2. **操作配置**
   - `operation.rowsKey`: "array" 数据行的键名。
   - `operation.rows`: 10 每次批量操作的数据行数。
   - `operation.method`: "batchArraySave" 批量保存方法。

3. **请求字段映射**
   - **单据类型** (`FBillTypeID`): 固定值 "XSCKD01_SYS",使用`ConvertObjectParser`解析器,参数为`FNumber`。
   - **单据编号** (`FBillNo`): 动态值 `{code}`,由源数据提供。
   - **日期** (`FDate`): 动态值 `{{delivery_statusInfo.delivery_date}}`,从源数据中提取。
   - **销售组织** (`FSaleOrgId`): 固定值 "200",使用`ConvertObjectParser`解析器,参数为`FNumber`。
   - **客户** (`FCustomerID`): 动态值 `{shop_code}`,使用`ConvertObjectParser`解析器,参数为`FNumber`。
   - **发货组织** (`FStockOrgId`) 和 **销售部门** (`FSaleDeptID`) 以及 **发货部门** (`FDeliveryDeptID`):均为固定值 "200",使用相同的解析器和参数。

4. **明细信息映射**
   - **物料编码** (`FMaterialID`): 使用复杂查询 `_mongoQuery d2c59767-6f9c-3b70-9de0-62fc3ecb8dc7 findField=content.FNumber where={"content.FOldNumber":{"$eq":"{{details.item_code}}"}}` 来获取物料编码,并使用 `ConvertObjectParser` 解析器。
   - **实发数量** (`FRealQty`): 动态值 `{{details.qty}}`, 从源数据中提取。
   - **秉坤价税合计** (`FBKJSHJ`): 动态值 `{{details.amount_after}}`, 从源数据中提取。
   - **是否赠品** (`FIsFree`): 通过 `_function CASE WHEN '{{details_list.amount_after}}'=0 THEN 'true' ELSE 'false' END`, 根据金额判断是否为赠品。
   - **仓库** (`FStockId`) 和 **批号** (`FLot`):分别使用动态值 `{warehouse_code}` 和 `_function case _findCollection find FIsBatchManage from d2c59767-6f9c-3b70-9de0-62fc3ecb8dc7 where FOldNumber={{details.item_code}} _endFind when true then '20190102' else '' end`, 并使用相应的解析器。

5. **其他请求参数**
   - `FormId`: 固定值 "SAL_OUTSTOCK",表示表单ID。
   - `Operation`: 固定值 "Save",表示操作类型。
   - `IsVerifyBaseDataField`: true,表示验证所有基础资料有效性。
   - `SubSystemId`: 固定值 "21",表示子系统ID(仓库模块)。
   - `IsAutoSubmitAndAudit`: true,表示自动提交和审核。

#### 实施步骤

1. 配置元数据:根据上述元数据配置,在轻易云平台上进行配置,以确保每个字段都正确映射到金蝶云星空API接口所需格式。

2. 数据清洗与转换:利用轻易云平台的数据清洗功能,将源平台的发货单数据进行清洗,并按照元数据配置进行字段映射和转换。

3. API调用与写入:通过HTTP POST方法调用金蝶云星空的批量保存API,将转换后的销售出库单数据写入目标平台。

#### 技术要点

- 使用轻易云的数据清洗功能,可以高效地处理和转换复杂的数据结构,确保每个字段都准确无误地映射到目标系统所需格式。
- 利用元数据中的解析器(如ConvertObjectParser)和函数(如_function),可以灵活地处理各种动态字段和复杂逻辑,提高了数据集成过程的灵活性和准确性。
- 在实际实施过程中,应特别注意字段类型和格式的一致性,以避免因格式不匹配导致的数据写入失败。

通过以上步骤,我们可以高效地将发货单数据转换并写入金蝶云星空,实现不同系统间的数据无缝对接。
![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)
更多系统对接方案