利用轻易云实现盘亏单出库数据对接金蝶云星空API

  • 轻易云集成顾问-姚缘
### 吉客云数据集成到金蝶云星空案例分享:盘亏单其他出库对接203v2 在系统集成项目中,如何高效、可靠地将吉客云的数据无缝对接到金蝶云星空是一个重点和难点。本技术案例详细展示了“盘亏单其他出库对接203v2”方案的具体实施过程,涵盖从数据抓取到写入及异常处理的全流程。 首先,为确保吉客云数据不漏单,我们使用了定时任务来可靠地抓取erp.storage.goodsdocout.v2接口的数据。该接口提供分页机制,而我们通过循环调用每一页并处理限流问题,以保证所有必要的数据能被准确获取。此外,通过批量请求优化API调用次数以提高效率,并有效避免因多次短时间内访问导致的性能瓶颈。 对于大量数据的快速写入,我们采用了金蝶云星空提供的batchSave API。这不仅支持批量操作,而且有效简化了数据插入过程,大大提升了整体系统性能。同时结合轻易云平台特有的数据映射功能,实现吉客云与金蝶云之间的数据格式差异自动转换,确保内容一致性和完整性。 在实际应用中,不可避免会遇到各种异常情况。为应对此类问题,我们设计了一套健壮的错误重试机制,当出现网络故障或服务端错误时,可自动触发重试逻辑,提高系统稳定性。此外,还通过实时监控与日志记录模块,对整个数据传输过程进行全面跟踪和分析,有助于及时发现并解决潜在的问题。 最后,在业务需求层面上,根据不同场景进行了细致且灵活的数据映射配置,使得写入至金蝶云星空中的数据信息完全符合其既定规则,同时也满足企业个性化管理需求。这种高度定制化方式极大提升了集成效率和业务适配度。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据 在数据集成生命周期的第一步中,调用源系统接口以获取原始数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用吉客云接口`erp.storage.goodsdocout.v2`,并对获取的数据进行初步加工。 #### API接口配置 首先,我们需要了解API接口的基本配置。根据提供的元数据配置,`erp.storage.goodsdocout.v2`接口采用POST方法进行请求,主要参数如下: - **分页参数**:`pageIndex`(分页页码),`pageSize`(分页页数,默认值为50)。 - **时间参数**:`gmtModifiedStart`(修改时间的起始时间),`gmtModifiedEnd`(修改时间的结束时间),`startDate`(创建时间的起始时间),`endDate`(创建时间的结束时间)。 - **业务参数**:如入库单号(`goodsDocNo`)、仓库编号(`warehouseCode`)等。 - **出库类型**:固定值为203,即盘亏出库。 #### 请求参数设置 在实际操作中,我们需要根据业务需求设置请求参数。以下是一个典型的请求参数配置示例: ```json { "pageIndex": "1", "pageSize": "50", "goodsDocNo": "", "gmtModifiedStart": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')", "gmtModifiedEnd": "_function from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')", "startDate": "", "endDate": "", "inouttype": "203", "warehouseCode": "", "vendCode": "", "billNo": "", "userName": "", "outBillNo": "", "selelctFields": "recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,field3,field4,field5,financeBillStatus,vendCustomerId,applyDepartId,applyDepartName,outBillNo,companyCode,vendCustomerCode,goodsDocDetailList.recId,goodsDocDetailList.goodsId,goodsDocDetailList.goodsNo,goodsDocDetailList.goodsName" } ``` #### 数据获取与处理 通过上述配置,我们可以调用API接口获取盘亏出库的数据。接下来,我们需要对返回的数据进行初步处理和清洗,以便后续的数据转换和写入。 1. **数据校验**:确保返回的数据完整性和准确性。例如,检查每条记录是否包含必要字段,如 `recId`, `goodsdocNo`, `billNo`, 等。 2. **数据格式化**:将日期字段格式化为标准格式,以便统一处理。例如,将 `gmtCreate`, `inOutDate` 等字段转换为标准的日期格式。 3. **异常处理**:对于缺失或异常的数据进行标记或剔除,以保证后续处理的顺利进行。 #### 示例代码 以下是一个使用Python语言编写的示例代码,用于调用API并处理返回的数据: ```python import requests import json from datetime import datetime # 定义API URL和请求头 api_url = 'https://api.jikexyun.com/erp.storage.goodsdocout.v2' headers = {'Content-Type': 'application/json'} # 定义请求参数 params = { "pageIndex": "1", "pageSize": "50", "inouttype": "203", # 使用函数生成当前时间和前一天时间 "gmtModifiedStart": datetime.fromtimestamp(time.time() - 86400).strftime('%Y-%m-%d %H:%i:%s'), "gmtModifiedEnd": datetime.now().strftime('%Y-%m-%d %H:%i:%s'), # 更多参数可根据需要添加 } # 发起POST请求 response = requests.post(api_url, headers=headers, data=json.dumps(params)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据校验与处理 for record in data['records']: # 检查必要字段是否存在 if 'recId' in record and 'goodsdocNo' in record: # 格式化日期字段 record['gmtCreate'] = datetime.strptime(record['gmtCreate'], '%Y-%m-%d %H:%M:%S') record['inOutDate'] = datetime.strptime(record['inOutDate'], '%Y-%m-%d %H:%M:%S') # 更多处理逻辑... else: print(f"Error: {response.status_code}, {response.text}") ``` 通过上述步骤,我们可以高效地调用吉客云接口获取盘亏出库数据,并对其进行初步加工,为后续的数据转换与写入奠定基础。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台实现盘亏单其他出库对接金蝶云星空API接口 在数据集成过程中,ETL(Extract, Transform, Load)转换是至关重要的一环。本文将详细探讨如何利用轻易云数据集成平台,将源平台的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 元数据配置解析 元数据配置是ETL转换的基础,它定义了如何将源数据字段映射到目标系统的字段。以下是我们需要关注的关键字段及其配置: 1. **单据编号 (FBillNo)** - 类型:字符串 - 描述:单据编号 - 值:`{goodsdocNo}` 2. **单据类型 (FBillTypeID)** - 类型:字符串 - 描述:单据类型 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:`QTCKD01_SYS` 3. **库存组织 (FStockOrgId)** - 类型:字符串 - 描述:组织 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:`{companyCode}` 4. **日期 (FDate)** - 类型:字符串 - 描述:日期 - 值:`_function DATE_FORMAT('{inOutDate} ', '%Y-%m-%d')` 5. **明细信息 (FEntity)** - 类型:数组 - 子字段: - 物料编码 (FMaterialId) - 类型:字符串 - 描述:基础资料 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:`{{goodsDocDetailList.goodsNo}}` - 实发数量 (FQty) - 类型:字符串 - 描述:数量 - 值:`{{goodsDocDetailList.quantity}}` - 成本价 (FPrice) - 类型:字符串 - 描述:单价 - 值:`{{goodsDocDetailList.cuPrice}}` #### 数据转换与写入过程 在轻易云数据集成平台中,我们通过定义元数据配置来实现从源系统到目标系统的数据转换。以下是具体的步骤: 1. **定义请求结构** 首先,根据元数据配置定义请求结构。我们使用POST方法调用金蝶云星空的batchSave API接口,并确保请求体符合接口要求。 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","value":"{goodsdocNo}"}, {"field":"FBillTypeID","value":"QTCKD01_SYS"}, {"field":"FStockOrgId","value":"{companyCode}"}, {"field":"FPickOrgId","value":"{companyCode}"}, {"field":"FStockDirect","value":"GENERAL"}, {"field":"FDate","value":"_function DATE_FORMAT('{inOutDate} ', '%Y-%m-%d')"}, {"field":"FDeptId","value":"BM000016"}, {"field":"FOwnerTypeIdHead","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","value":"{companyCode}"}, {"field":"FNote"}, {"field":"F_LSJC_Text","value":"{billNo}"}, {"field":"F_LSJC_Text1","value":"{sourceBillNo}"}, {"field":"F_LSJC_Text2","value":"{deliveryNo}"}, {"field":"F_LSJC_Text4","value":"{inouttypeName}"}, {"field":"F_LSJC_Text11","value":"_function LEFT(\"{memo}\",40)"}, { "field": "FEntity", "children": [ {"field": "FMaterialId", "value": "{{goodsDocDetailList.goodsNo}}"}, {"field": "FCMKBarCode", "parent": "FEntity"}, {"field": "FQty", "value": "{{goodsDocDetailList.quantity}}"}, {"field": "FStockId", "value": "{companyCode}"}, {"field": "FPrice", "value": "{{goodsDocDetailList.cuPrice}}"}, {"field": "FAmount", "value": "{{goodsDocDetailList.cuValue}}"}, {"field": "FLot", "parser":{"name":"ConvertObjectParser","params":"FNumber"}, "value": "01"} ], "value": "{goodsDocDetailList}" } ], ... } ``` 2. **执行转换逻辑** 在定义好请求结构后,我们需要执行相应的转换逻辑。这里主要涉及到字段值的解析和格式化。例如,日期字段需要格式化为特定格式: ```json { ... { "field": "DATE_FORMAT('{inOutDate}', '%Y-%m-%d')" } ... } ``` 3. **调用API接口** 最后,通过HTTP POST方法将转换后的数据发送到金蝶云星空API接口: ```http POST /k3cloud/api/batchSave HTTP/1.1 Host: api.kingdee.com Content-Type: application/json { ... // 请求体内容如上所示 ... } ``` #### 处理返回结果 成功调用API接口后,需要处理返回结果,以确保数据成功写入目标系统。如果返回结果中包含错误信息,需要进行相应的错误处理和日志记录。 通过上述步骤,我们可以高效地将源平台的数据转换并写入金蝶云星空,实现不同系统间的数据无缝对接。这不仅提高了业务流程的自动化程度,也极大地提升了数据处理的准确性和效率。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)