案例分享:管易云·奇门数据集成到金蝶云星空
在企业的日常运营中,实现不同系统之间的数据互通是提升效率和确保数据一致性的关键。本文将详细介绍如何通过轻易云数据集成平台完成将管易云·奇门中的销售出库(物流编号)信息实时、可靠地反写至金蝶云星空,实现两个系统间的无缝对接。
管易销售出库(物流编号)反写金蝶方案概述
为了实现这一目标,我们需要解决以下几个技术难点:
-
定时可靠的抓取管易云·奇门接口数据: 管易云提供了名为
gy.erp.trade.deliverys.get
的API接口,用于获取销售信息及其对应的物流编号。为了确保高效且不遗漏地获取这些数据,必须设置精确的定时任务,同时处理分页与限流问题以应对大量请求。 -
批量集成数据到金蝶云星空: 将从管易云获取的大量销售信息批量写入金蝶,需要使用金蝶提供的
batchSave
API进行操作。这不仅能够保证较高的数据传输效率,还能够减少频繁调用API带来的性能压力。 -
处理跨系统间的数据格式差异: 管易和金蝶之间存在显著的数据格式差异。在实际操作中,需要根据业务需求,对各字段进行相应转换,并通过脚本或配置文件实现灵活映射,这一点尤为重要。
-
异常处理与错误重试机制: 数据对接过程中可能会遇到网络波动、接口异常等各种问题。因此,构建健壮的异常处理机制以及合理设置重试策略,对于提高整个流程的稳定性具有重要作用。
-
实时监控与日志记录: 在执行上述步骤时,通过轻易平台内置功能,可以对每一步骤进行实时监控并记录日志,从而确保所有操作都清晰可见,并能够及时发现和解决潜在的问题,提高反馈响应速度。
具体实施步骤
第一步,我们将在轻易平台上配置定时任务,以周期性调用 gy.erp.trade.deliverys.get
接口抓取订单交付信息。同时,为了避免单次请求返回过多数据,需严格控制分页参数。此外,通过预设限流策略,可以防止短时间内大量访问导致接口超载。
第二步,在成功获得所需数据信息后,将其规范化并准备好待写入对象。针对每个字段,根据已有规则或自定义映射关系转化为符合金蝶要求的数据结构,然后利用 batchSave
API 批量上传至金蝶系统数据库中去
调用管易云·奇门接口gy.erp.trade.deliverys.get获取并加工数据
在数据集成的生命周期中,第一步是调用源系统接口获取数据。本文将详细探讨如何通过轻易云数据集成平台调用管易云·奇门接口gy.erp.trade.deliverys.get
来获取销售出库单的物流编号,并进行初步的数据清洗和加工。
接口配置与请求参数
在轻易云数据集成平台上,配置gy.erp.trade.deliverys.get
接口时,需要设置以下请求参数:
- start_create: 创建时间开始段
- end_create: 创建时间结束段
- start_delivery_date: 发货时间开始段,默认值为上次同步时间
{{LAST_SYNC_TIME|datetime}}
- end_delivery_date: 发货时间结束段,默认值为当前时间
{{CURRENT_TIME|datetime}}
- start_modify_date: 修改时间开始段
- end_modify_date: 修改时间结束段
- del: 返回是否作废的单据
- delivery: 发货状态,默认值为
1
- code: 单据编号
此外,还需要设置分页参数:
- page_size: 分页大小,默认值为
50
- page_no: 页号
请求示例
以下是一个典型的请求示例:
{
"api": "gy.erp.trade.deliverys.get",
"method": "POST",
"request": {
"start_create": "2023-01-01 00:00:00",
"end_create": "2023-01-31 23:59:59",
"start_delivery_date": "{{LAST_SYNC_TIME|datetime}}",
"end_delivery_date": "{{CURRENT_TIME|datetime}}",
"start_modify_date": "",
"end_modify_date": "",
"del": "",
"delivery": "1",
"code": ""
},
"otherRequest": {
"page_size": "50",
"page_no": ""
}
}
数据清洗与转换
在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理。以下是一些常见的数据清洗步骤:
- 过滤无效数据:根据业务需求过滤掉作废的单据。
- 字段映射与转换:将原始数据字段映射到目标系统所需的字段格式。例如,将发货状态从数字
1
转换为对应的文本描述。 - 日期格式化:将日期字段格式化为标准的日期时间格式,以便统一处理。
自动填充与补救机制
轻易云平台提供了自动填充响应和补救机制,以确保数据完整性和一致性:
-
自动填充响应(autoFillResponse):在配置中启用此选项,可以自动将响应中的某些字段填充到请求参数中,以简化后续处理。
-
补救机制(omissionRemedy):通过定时任务(crontab)和接管请求字段,可以定期检查并补救遗漏的数据。例如,每12小时执行一次检查,并使用
{{HOURE_AGO_s12|datetime}}
作为接管字段的默认值。
条件过滤
在实际应用中,可能需要根据特定条件过滤数据。例如,只获取备注包含“金蝶”或“XSCKD”的单据。可以通过以下条件配置实现:
{
"condition_bk": [
[
{"field":"seller_memo","logic":"like","value":"金蝶"}
]
],
"condition": [
[
{"field":"seller_memo","logic":"like","value":"XSCKD"}
]
]
}
实践案例
假设我们需要获取2023年1月内所有发货状态为已发货(delivery=1)的销售出库单,并且备注包含“XSCKD”。可以通过以下配置实现:
{
"api": "gy.erp.trade.deliverys.get",
"method": "POST",
"request": {
"start_create": "2023-01-01 00:00:00",
"end_create": "2023-01-31 23:59:59",
...
...
},
"condition":[[{"field":"seller_memo","logic":"like","value":"XSCKD"}]]
}
通过以上配置,我们可以高效地从管易云·奇门接口获取所需的数据,并进行初步清洗和加工,为后续的数据转换与写入奠定基础。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台能够接收的格式。本文将重点探讨如何通过轻易云数据集成平台,将管易销售出库(物流编号)反写到金蝶云星空API接口。
API接口配置
为了实现数据从源平台到目标平台的无缝对接,我们需要配置金蝶云星空的API接口。以下是元数据配置的详细说明:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "FID",
"label": "单据ID",
"type": "string",
"value": "_mongoQuery 77db61fd-60fd-36b0-bd8a-fe7bf1a5163f findField=content.FID where={\"content.FBillNo\":{\"$eq\":\"{seller_memo}\"},\"content.F_recipient\":{\"$eq\":\"{receiver_name}\"}}"
},
{
"field": "F_WFHW_Combo_qtr",
"label": "出货类型",
"type": "string",
"value": "_mongoQuery 77db61fd-60fd-36b0-bd8a-fe7bf1a5163f findField=content.F_WFHW_Combo_qtr where={\"content.FBillNo\":{\"$eq\":\"{seller_memo}\"},\"content.F_recipient\":{\"$eq\":\"{receiver_name}\"}}"
},
{
"field": "FEntity",
"label": "FEntity",
"type": "array",
"value": "details",
"children": [
{
"field": "FENTRYID",
"label": "FENTRYID",
"type": "string",
"value": "_mongoQuery 77db61fd-60fd-36b0-bd8a-fe7bf1a5163f findField=content.FEntity_FENTRYID where={\"content.FBillNo\":{\"$eq\":\"{seller_memo}\"},\"content.F_recipient\":{\"$eq\":\"{receiver_name}\"},\"content.FMaterialID_FNumber\":{\"$eq\":\"{{details.item_code}}\"}}"
},
{
"field": "F_Express_tracking_number2",
"label": "快递单号",
"type": "string",
"value": "{express_no}"
}
]
}
],
...
}
数据请求与清洗
在数据请求阶段,我们使用_mongoQuery
来获取所需的数据。例如,FID
字段的值通过查询MongoDB数据库中的content.FID
字段获取,查询条件包括单据编号和收件人姓名。
{
"_mongoQuery 77db61fd-60fd-36b0-bd8a-fe7bf1a5163f findField=content.FID where={\"content.FBillNo\":{\"$eq\":\"{seller_memo}\"},\"content.F_recipient\":{\"$eq\":\"{receiver_name}\"}}"
}
这种方式确保了我们能够精确地获取所需的数据,避免了冗余信息的干扰。
数据转换与写入
在数据转换阶段,我们需要将源平台的数据格式转换为金蝶云星空API能够接受的格式。以下是关键字段及其对应关系:
- 单据ID (FID): 从MongoDB查询得到。
- 出货类型 (F_WFHW_Combo_qtr): 从MongoDB查询得到。
- 实体数组 (FEntity): 包含多个子字段,如
FENTRYID
和快递单号 (F_Express_tracking_number2)
。
例如,对于实体数组中的每一项,我们需要根据物料编码、单据编号和收件人姓名进行查询,以获取对应的FENTRYID
。
{
"_mongoQuery 77db61fd-60fd-36b0-bd8a-fe7bf1a5163f findField=content.FEntity_FENTRYID where={\"content.FBillNo\":{\"$eq\":\"{seller_memo}\"},\"content.F_recipient\":{\"$eq\":\"{receiver_name}\"},\"content.FMaterialID_FNumber\":{\"$eq\":\"{{details.item_code}}\"}}"
}
配置其他请求参数
除了主要字段外,还需要配置一些其他请求参数,以确保API调用成功:
{
...
{
field: 'FormId',
label: 'FormId',
type: 'string',
describe: '必须填写金蝶的表单ID如:PUR_PurchaseOrder',
value: 'SAL_OUTSTOCK'
},
{
field: 'Operation',
label: 'Operation',
type: 'string',
value: 'BatchSave'
},
...
}
这些参数包括表单ID (FormId
) 和操作类型 (Operation
) 等,确保API调用符合金蝶云星空的要求。
批量保存操作
最后,我们使用批量保存操作将转换后的数据写入目标平台。通过配置元数据中的 operation
字段,实现批量保存功能:
{
operation: {
rowsKey: 'array',
rows: 1,
method: 'batchArraySave'
}
}
这种方法不仅提高了效率,还减少了网络请求次数,从而提升整体性能。
通过上述步骤,我们成功实现了从管易销售出库到金蝶云星空的数据ETL转换和写入。这种方法不仅保证了数据的一致性和准确性,还大大简化了复杂的数据集成过程。