使用轻易云平台优化吉客云与金蝶云数据集成的步骤解析

  • 轻易云集成顾问-吕修远
### 案例分享:吉客云到金蝶云星空的采购退货单对接205v2 在本次技术案例中,我们将深入探讨如何使用轻易云数据集成平台,将吉客云的数据高效且准确地集成到金蝶云星空系统。具体方案名称为"采购退货单对接205v2",该方案的核心目标是实现吉客云中采购退货单数据的全量和增量同步,确保每一笔交易都能无缝衔接并及时反映在金蝶云星空中,以便业务部门快速响应和处理。 首先,通过配置与调用吉客云API接口`erp.storage.goodsdocout.v2`,我们能够实时抓取最新的采购退货单数据。在抓取过程中,为了应对大量数据传输的问题,采用分页机制,同时设置合理限流策略以防止因频繁访问导致服务器过载。 与此同时,在将这些数据批量写入到金蝶云星空时,我们利用其提供的`batchSave` API接口。为保证高效性,我们设计了大批量数据分块导入的方法,每个块的数据在达到指定阀值后立即进行入库操作。这种方式不仅提升了整体速度,还减少了网络不稳定带来的影响。 其次,针对两个系统之间的数据格式差异问题,通过定制化的数据映射规则,将吉客云中的字段精确转换为符合金蝶云星空要求的格式。同时,实现异常处理与错误重试机制,当出现写入失败时,可以自动重试或记录日志以供事后分析,并采取补救措施,这也提高了系统整体运行过程中的可靠性。 通过上述步骤及一系列优化措施,本方案有效解决了跨系统间的信息孤岛问题,不仅提高了工作效率,也增强了企业信息化管理水平。在实际应用中,实现透明可视、实时监控、可靠交付这一系列严格目标,以确保整个对接过程顺畅无阻。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据 在轻易云数据集成平台的生命周期管理中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过配置元数据,调用吉客云接口`erp.storage.goodsdocout.v2`获取并加工采购退货单数据。 #### 接口调用配置 首先,我们需要配置API接口的基本信息和请求参数。以下是元数据配置的关键部分: ```json { "api": "erp.storage.goodsdocout.v2", "method": "POST", "number": "goodsdocNo", "id": "recId", "pagination": { "pageSize": 50 }, "idCheck": true, "request": [ {"field":"pageIndex","label":"分页页码","type":"string"}, {"field":"pageSize","label":"分页页数","type":"string","value":"100"}, {"field":"goodsDocNo","label":"入库单号","type":"string"}, {"field":"gmtModifiedStart","label":"修改时间的起始时间","type":"string","value":"_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')"}, {"field":"gmtModifiedEnd","label":"修改时间的结束时间","type":"string","value":"_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')"}, {"field":"startDate","label":"创建时间的起始时间","type":"datetime"}, {"field":"endDate","label":"创建时间的结束时间","type":"datetime"}, {"field":"inouttype","label":"入库类型","type":"string", "describe": "...", "value": "205"}, ... ], ... } ``` #### 分页机制 为了高效处理大批量数据,接口支持分页机制。我们设置了每页返回50条记录,并通过`pageIndex`和`pageSize`字段进行控制: ```json { "field": "pageIndex", "label": "分页页码", "type": "string" }, { "field": "pageSize", "label": "分页页数", "type": "string", "value": "100" } ``` #### 时间过滤条件 为了确保数据的时效性,我们使用了两个时间过滤条件:`gmtModifiedStart`和`gmtModifiedEnd`。这些字段通过函数动态计算,确保每次调用都能获取到最新的数据: ```json { "field": "gmtModifiedStart", ... "value": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')" }, { "field": "gmtModifiedEnd", ... "value": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')" } ``` #### 数据过滤条件 为了精准获取采购退货单(出库类型为205)的数据,我们在请求参数中添加了`inouttype`字段,并将其值设为205: ```json { "field": "inouttype", ... "value": "205" } ``` #### 返回字段配置 为了满足业务需求,我们需要从接口返回大量字段。这些字段通过逗号分隔,并在请求参数中进行配置: ```json { ... { “field”: “selelctFields”, “label”: “需要返回的字段”, “type”: “string”, “describe”: “…”, “value”: “recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,...” } } ``` #### 异常处理与补偿机制 在实际操作中,可能会遇到网络波动或其他异常情况。为此,我们设置了异常处理与补偿机制,通过定时任务(crontab)来确保数据完整性: ```json { ... “omissionRemedy”: { “crontab”: “2 */5 * * *”, “takeOverRequest”: [ { “field”: “gmtModifiedStart”, … “value”: “_function from_unixtime(({CURRENT_TIME}-172800),’%Y-%m-%d %H:%i:%s’)” }, { “field”: “gmtModifiedEnd”, … “value”: “_function from_unixtime(({CURRENT_TIME}-86400),’%Y-%m-%d %H:%i:%s’)” } ] } } ``` 通过以上配置,我们能够高效地调用吉客云接口获取采购退货单的数据,并对其进行加工处理,为后续的数据转换与写入阶段打下坚实基础。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 采购退货单对接205v2:ETL转换与写入金蝶云星空API接口 在数据集成的生命周期中,数据转换与写入是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台,将源平台的数据经过ETL(提取、转换、加载)处理后,转化为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 元数据配置解析 在进行ETL转换时,我们需要依据元数据配置来映射和转换字段。以下是关键字段及其配置解析: 1. **单据编号 (FBillNo)** - 类型:字符串 - 描述:单据编号 - 映射值:`{goodsdocNo}` 2. **退料日期 (FDate)** - 类型:字符串 - 描述:日期 - 映射值:`_function DATE_FORMAT('{inOutDate}', '%Y-%m-%d')` 3. **供应商 (FSupplierID)** - 类型:字符串 - 描述:基础资料 - 解析器:`ConvertObjectParser` - 参数:`FNumber` - 映射值:`{vendCustomerCode}` 4. **退料组织、结算组织、付款组织 (FStockOrgId, FSettleOrgId, FPayOrgId)** - 类型:字符串 - 描述:组织 - 解析器:`ConvertObjectParser` - 参数:`FNumber` - 映射值均为:`{companyCode}` 5. **明细信息 (FPURMRBENTRY)** 包含多个子字段,如下: a. **物料编码 (FMATERIALID)** - 类型:字符串 - 描述:基础资料 - 解析器:`ConvertObjectParser` - 参数:`FNumber` - 映射值:`{{goodsDocDetailList.goodsNo}}` b. **实退数量 (FRMREALQTY)** - 类型:字符串 - 描述:数量 - 映射值:`{{goodsDocDetailList.quantity}}` c. **仓库 (FSTOCKID)** - 类型:字符串 - 描述:基础资料 - 解析器:`ConvertObjectParser` - 参数:`FNumber` - 映射值为 `{companyCode}` d. **单价、含税单价、成本价、总成本等价格相关字段** 根据不同的价格类型分别映射到相应的字段,如: ```json {"field":"FPrice","value":"{{goodsDocDetailList.cuPrice}}"} {"field":"FTAXPRICE","value":"{{goodsDocDetailList.cuPrice}}"} {"field":"FCostPrice","value":"{{goodsDocDetailList.estPrice}}"} {"field":"FENTRYCOSTAMOUNT","value":"{{goodsDocDetailList.cuValue}}"} ``` 6. **其他请求参数** 包括业务对象表单Id、执行操作、提交并审核等: ```json {"field":"FormId","value":"PUR_MRB"} {"field":"Operation","value":"batchSave"} {"field":"IsAutoSubmitAndAudit","value":"true"} {"field":"IsVerifyBaseDataField","value":"true"} {"field":"SubSystemId","value":"21"} ``` #### 数据转换与写入流程 1. **提取数据**: 从源平台提取原始数据,包括采购退货单的各项信息。 2. **数据清洗**: 对提取的数据进行必要的清洗和预处理,例如日期格式转换、去除无效字符等。 3. **字段映射**: 利用元数据配置,将源数据字段映射到金蝶云星空API所需的目标字段。例如,将源平台的 `goodsdocNo` 转换为 `FBillNo`,并使用 `DATE_FORMAT()` 函数将日期格式化为 `YYYY-MM-DD`。 4. **调用API接口**: 使用POST方法调用金蝶云星空的 `batchSave` 接口,将处理后的数据发送至目标平台。 5. **错误处理与日志记录**: 实时监控API调用状态,记录成功和失败的日志,并对失败的数据进行重试或人工干预。 #### 示例代码片段 以下是一个简化的示例代码片段,用于展示如何通过轻易云平台实现上述过程: ```python import requests # 配置API接口URL和头部信息 url = "https://api.kingdee.com/batchSave" headers = { "Content-Type": "application/json", } # 构建请求体,根据元数据配置映射字段 payload = { "FormId": "PUR_MRB", "Operation": "batchSave", "IsAutoSubmitAndAudit": True, "IsVerifyBaseDataField": True, "SubSystemId": "21", "Model": { "FBillNo": source_data["goodsdocNo"], "FDate": format_date(source_data["inOutDate"]), # 更多字段映射... "FPURMRBENTRY": [ { "FMATERIALID": detail["goodsNo"], # 更多明细字段映射... } for detail in source_data["goodsDocDetailList"] ] } } # 发起POST请求并处理响应 response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print(f"Failed to write data: {response.text}") ``` 通过以上步骤,我们可以实现从源平台到金蝶云星空的无缝数据集成,确保每个环节的数据都能准确、高效地传输和转换。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)