利用轻易云平台快速进行ETL转换并写入金蝶云星空

  • 轻易云集成顾问-卢剑航
### 系统对接集成案例分享:金蝶云星空数据集成到金蝶云星空 在此次项目中,我们探讨了如何通过轻易云数据集成平台实现将金蝶云星空系统中的“其他出库单”(虚拟客户样品出库)数据无缝转化为“销售出库单”(虚拟客户金额为1)并写入至目标金蝶云星空系统。本文将详细介绍这一过程的技术实现,包括接口调用、数据转换以及高效监控等关键环节。 #### 接口调用与数据获取 为了从源系统获取所需的数据,我们利用了`executeBillQuery` API接口。该接口支持定时抓取功能,确保我们能够可靠且及时地获取“其他出库单”。具体实现过程中,我们设置了分批次请求机制,以处理大规模分页和限流问题,保证所有相关记录都被准确拉取而不遗漏。以下是具体步骤: 1. **构建API请求**:依据业务需求,自定义查询条件,通过`executeBillQuery`接口进行请求。 2. **处理分页响应**:API 的返回结果可能会非常庞大,因此需逐页读取响应内容,并使用循环结构确保完整性。 3. **异常重试机制**:针对偶发的网络或服务异常情况,实现自动重试逻辑,提升任务稳定性。 #### 数据转换与写入 完成源头数据提取后,需要对其进行必要的格式转换,以匹配目标系统“销售出库单”的字段要求。这一步骤由自定义的数据转换逻辑来执行,它不仅包括基本字段映射,还涉及到一些复杂业务规则的判断和调整: 1. **字段映射规则设定**:根据两套表结构设计相应的映射关系,如ID、数量、价格等核心字段的一一对应。 2. **复杂规则应用**: - 针对虚拟客户金额设定固定值为1; - 对不同类型货物应用差异化处理策略。 最终,将清洗后的高质量数据通过`batchSave` API 批量上传至目标金蝶云星空系统。在此过程中,为预防潜在问题,我们引入了一系列监控措施及日志记录模块,对每一个背书操作进行实时追踪。当任何异常发生时,能即时警示并快速定位解决。 以上这些流程,在轻易云高度可视化的数据流工具中均有直观呈现,使得整个配置更加简便和透明,并极大拓展了企业内部系统间互联互通能力。下一步细节将深入剖析各技术模块实际代码及配置范例。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/D6.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据,以便正确调用金蝶云星空的API。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FEntity_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FEntity_FEntryID","label":"FEntryID","type":"string","value":"FEntity_FEntryID"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"库存组织","type":"string","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"日期","type":"string","value":"FDate"}, {"field":"FBillTypeID","label":"单据类型","type":"string","value":"FBillTypeID"}, {"field":"FNOTE","label":"备注","type":"string","value":"FNOTE"}, {"field":"FMATERIALID_FNumber","label":"物料编码","type":"string","value":"FMATERIALID.FNumber"}, {"field":"FSTOCKID","label":"收货仓库","type":"string","value":"FSTOCKID"}, {"field":"FQty","label":"实收数量","type":"string","value":"FQty"}, {"field": "FPrice", "label": "成本价", "type": "string", "value": "FPrice"}, {"field": "FAmount", "label": "总成本", "type": "string", "value": "FAmount"} ], "otherRequest":[ { "field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}" }, { "field": 'FilterString', 'label': '过滤条件', 'type': 'string', 'describe': '示例写法 FSupplierId.FNumber = \'VEN00010\' and FApproveDate>=', 'value': 'FDate >=\'{{LAST_SYNC_TIME|date}}\' and FBillTypeID.FNumber=\'QTCKD19_SYS\' and FStockOrgId.FNumber= \'100\'' }, { 'field': 'FieldKeys', 'label': '需查询的字段key集合', 'type': 'array', 'describe': '金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber', 'parser': {'name':'ArrayToString','params':','} }, { 'field':'FormId', 'label':'业务对象表单Id', 'type':'string', 'describe':'必须填写金蝶的表单ID如:PUR_PurchaseOrder', 'value':'STK_MisDelivery' } ] } ``` #### 数据请求与清洗 在配置好元数据后,我们可以开始进行数据请求和清洗。首先,通过POST方法调用`executeBillQuery`接口,传递必要的请求参数。这些参数包括单据编号、日期、物料编码等。 ```python import requests url = "<金蝶云星空API地址>" headers = { 'Content-Type': 'application/json' } payload = { # 根据元数据配置填充请求体 } response = requests.post(url, headers=headers, json=payload) data = response.json() ``` 在获取到原始数据后,需要对其进行清洗和转换。例如,确保所有日期字段格式一致,去除不必要的空格或特殊字符,并根据业务需求进行字段映射。 ```python def clean_data(data): cleaned_data = [] for record in data: cleaned_record = { # 清洗和转换字段 '单据编号': record.get('FBillNo').strip(), # 更多字段处理... } cleaned_data.append(cleaned_record) return cleaned_data cleaned_data = clean_data(data) ``` #### 数据转换与写入 清洗后的数据需要进一步转换,以符合目标系统的数据格式和要求。此步骤可能包括字段重命名、单位转换等操作。 ```python def transform_data(cleaned_data): transformed_data = [] for record in cleaned_data: transformed_record = { # 转换字段 } transformed_data.append(transformed_record) return transformed_data transformed_data = transform_data(cleaned_data) ``` 最后,将转换后的数据写入目标系统。这一步通常涉及调用目标系统的API或数据库操作。 ```python def write_to_target_system(transformed_data): for record in transformed_data: # 写入操作,例如数据库插入或API调用 pass write_to_target_system(transformed_data) ``` 通过上述步骤,我们实现了从金蝶云星空获取并加工数据的全过程。这不仅提升了业务透明度和效率,也为后续的数据分析和决策提供了坚实的数据基础。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/S2.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是关键的一步。本文将深入探讨如何利用轻易云数据集成平台,将源平台的数据进行ETL转换,并通过金蝶云星空API接口写入目标平台。 #### 数据请求与清洗 首先,我们从源平台获取数据,并进行必要的清洗和预处理。假设我们已经完成了这一步,接下来重点关注数据转换与写入。 #### 数据转换与写入 为了将数据成功写入金蝶云星空,我们需要遵循其API接口的要求。以下是一个典型的元数据配置,用于将其他出库单(虚拟客户样品出库)转换为销售出库单(虚拟客户金额为1),并通过金蝶云星空API接口进行保存。 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FBillTypeID_FNumber,FDate,FDEPTID_FName,FCustId_FName,FNOTE,FDJZDYyongtu_FNumber", "bodyName": "details", "bodySum": ["FQty"], "header": ["FBillTypeID_FNumber", "FBillNo", "FDate", "FDEPTID_FName", "FCustId_FName", "FNOTE", "FDJZDYyongtu_FNumber", "FStockOrgId_FNumber"], "body": ["FMATERIALID_FNumber", "FQty", "FSTOCKID", "FEntryNote", "FStockOrgId_FNumber"] }, ... } ``` #### 配置解析 1. **基本信息**: - `api`: 指定调用的API接口,这里使用`batchSave`。 - `method`: HTTP请求方法,使用`POST`。 - `idCheck`: 是否检查ID有效性,设置为`true`。 2. **操作定义**: - `operation.method`: 操作方法,这里使用`merge`表示合并操作。 - `operation.field`: 定义需要合并的字段,包括单据编号、单据类型、日期等。 - `operation.bodyName`: 明细部分名称,这里为`details`。 - `operation.bodySum`: 明细部分需要汇总的字段,这里为数量(`FQty`)。 - `operation.header`: 定义表头字段,包括单据类型编号、单据编号、日期等。 - `operation.body`: 定义明细字段,包括物料编码、数量、仓库等。 3. **请求参数**: - 每个字段都有详细的定义,包括字段名(`field`)、标签(`label`)、类型(`type`)和描述(`describe`)。 - 对于需要转换的数据,使用解析器(`parser`)进行处理。例如,单据类型(`FBillTypeID`)使用了`ConvertObjectParser`解析器,将其值转为系统识别的格式。 4. **其他请求参数**: - 包括业务对象表单ID(`FormId`)、执行操作(`Operation`)等关键参数。 - 提交并审核选项(`IsAutoSubmitAndAudit`)设置为`false`,表示不自动提交和审核。 - 验证基础资料选项(`IsVerifyBaseDataField`)设置为`false`,表示不验证所有基础资料有效性。 #### 实际应用案例 假设我们有一条源数据,需要将其转换并写入金蝶云星空。以下是具体步骤: 1. **获取源数据**: ```json { "FBillNo": "SO20231001", ... // 其他相关字段 ... "details": [ { "FMATERIALID_FNumber": "MAT001", ... // 其他明细字段 ... } ] } ``` 2. **配置转换规则**: 根据上述元数据配置,将源数据中的各个字段映射到目标平台所需格式。例如,将物料编码(`FMATERIALID_FNumber`)映射到金蝶云星空的物料编码字段。 3. **发送请求**: 使用HTTP POST方法,将转换后的数据发送到金蝶云星空API接口。 ```http POST /k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.batchSave HTTP/1.1 Host: api.kingdee.com Content-Type: application/json Authorization: Bearer <token> { // 转换后的JSON数据 } ``` 通过上述步骤,我们可以高效地将源平台的数据经过ETL转换后,成功写入到金蝶云星空。这不仅简化了数据集成过程,还确保了数据的一致性和准确性。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)