轻松实现金蝶云与泛微OA数据对接:技术详解

  • 轻易云集成顾问-曹润
### 金蝶云星空数据集成到泛微OA-Http:案例分享 在本文中,我们将聚焦于一个实际运行的系统对接集成案例,即金蝶云星空的数据如何成功集成到泛微OA-Http应用中。此次方案命名为“物料金蝶=>泛微物料应用--测试通过”,其中涉及多个关键技术环节和API接口,确保数据的无缝传输与高效处理。 为了准确获取金蝶云星空中的数据,我们使用了其提供的executeBillQuery API,通过此接口定时、可靠地抓取所需的数据。这要求我们精确处理分页和限流问题,以确保所有必需的信息都能够被正确获取并避免漏单。同时,为了满足特定业务需求,采用了自定义的数据转换逻辑,使得原始数据格式能够符合目标系统的结构化要求。 一旦完成初步的数据提取和转换,这些信息将快速批量写入到泛微OA-Http系统中。这里,我们利用/api/cube/new/card/doSubmit API进行大规模数据写入操作,并针对可能出现的对接异常情况,设计了错误重试机制。在整个过程中,还部署了集中监控和告警系统,实时跟踪任务状态与性能,以及时发现并解决潜在的问题,提高整体流程的可靠性。 通过可视化的数据流设计工具,对整个集成过程进行了直观管理,让参与项目团队成员可以轻松理解每个步骤,并有效协作。此外,该工具也显著降低了复杂操作实施的难度,从而提升开发效率。本篇文章开头部分主要介绍关键技术环节及API使用情况,下文将详细阐述具体操作流程及技术实现细节。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D36.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取物料信息,并对其进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置调用金蝶云星空接口的元数据。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FNumber", "id": "FNumber", "name": "FNumber", "request": [ {"field":"FMasterId","label":"id","type":"string","describe":"id","value":"FMasterId"}, {"field":"FNumber","label":"编码","type":"string","describe":"编码","value":"FNumber"}, {"field":"FName","label":"名称","type":"string","describe":"名称","value":"FName"}, {"field":"FSpecification","label":"规格型号","type":"string","describe":"规格型号","value":"FSpecification"}, {"field":"FOldNumber","label":"旧物料编码","type":"string","describe":"旧物料编码","value":"FOldNumber"}, {"field":"FDescription","label":"描述","type":"string","describe":"描述","value":"FDescription"}, {"field":"FMaterialGroup_FNumber","label":"物料分组","type":"string","describe":"物料分组","value":"FMaterialGroup.FNumber"}, {"field":"FErpClsID","label":"物料属性","type":"string","describe":"物料属性","value":"FErpClsID"}, {"field":"FForbidStatus","label":"禁用状态","type":"string","describe":"禁用状态","value":"FForbidStatus"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FForbidStatus='A' and FUseOrgId.FNumber='000'"} ], "otherRequest":[ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "2000"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "TopRowCount", "label": "返回总行数", "type": int, describe: 金蝶的查询分页参数}, {"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:BD_MATERIAL} ], autoFillResponse: true } ``` #### 请求示例 在实际操作中,我们需要构建一个POST请求,发送到金蝶云星空API。以下是一个请求示例: ```json { FormId: 'BD_MATERIAL', FilterString: 'FApproveDate>=\'2023-01-01\' and FForbidStatus=\'A\' and FUseOrgId.FNumber=\'000\'', FieldKeys: 'FMasterId,FNumber,FName,FSpecification,FOldNumber,FDescription,FMaterialGroup.FNumber,FErpClsID,FForbidStatus', Limit: '2000', StartRow: '0' } ``` 该请求将返回符合条件的物料信息,包括物料编码、名称、规格型号等字段。 #### 数据处理与清洗 获取到原始数据后,我们需要对其进行清洗和初步加工。以下是一些常见的数据处理步骤: 1. **字段映射**:将API返回的数据字段映射到目标系统所需的字段。例如,将`FMaterialGroup.FNumber`映射为目标系统中的`materialGroupCode`。 2. **数据转换**:根据业务需求,对某些字段进行转换。例如,将日期格式从`YYYY-MM-DD`转换为目标系统所需的格式。 3. **过滤无效数据**:去除不符合业务规则的数据,例如禁用状态为'A'的数据。 #### 示例代码 以下是一个简单的数据处理示例代码: ```python import requests import json # 定义请求参数 payload = { 'FormId': 'BD_MATERIAL', 'FilterString': 'FApproveDate>=\'2023-01-01\' and FForbidStatus=\'A\' and FUseOrgId.FNumber=\'000\'', 'FieldKeys': 'FMasterId,FNumber,FName,FSpecification,FOldNumber,FDescription,FMaterialGroup.FNumber,FErpClsID,FForbidStatus', 'Limit': '2000', 'StartRow': '0' } # 发起POST请求 response = requests.post('https://api.kingdee.com/executeBillQuery', data=json.dumps(payload)) data = response.json() # 数据处理与清洗 processed_data = [] for item in data: processed_item = { 'materialCode': item['FNumber'], 'materialName': item['FName'], 'specification': item['FSpecification'], # 更多字段映射... 'materialGroupCode': item['FMaterialGroup.FNumber'] } # 添加到处理后的数据列表中 processed_data.append(processed_item) # 输出处理后的数据 print(json.dumps(processed_data, indent=4)) ``` 通过上述步骤,我们可以高效地从金蝶云星空获取并加工所需的数据,为后续的数据集成和应用提供支持。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入泛微OA-HttpAPI接口 在数据集成生命周期的第二步,我们将已经从源平台(金蝶)获取的数据进行ETL转换,并将其转为目标平台(泛微OA-HttpAPI接口)所能接收的格式,最终写入目标平台。以下是详细的技术实现步骤和相关元数据配置。 #### 1. API接口配置 首先,我们需要配置泛微OA-HttpAPI接口的元数据。这些元数据定义了API的路径、请求方法、参数及其类型等信息。以下是具体的元数据配置: ```json { "api": "/api/cube/new/card/doSubmit", "method": "POST", "idCheck": true, "request": [ { "field": "billid", "label": "参数ID", "type": "string", "describe": "打开泛微表单后可以在URL中获取该参数", "value": "{F_WMMX_OAId}" }, { "field": "type", "label": "类型", "type": "string", "value": "_function case '{F_WMMX_OAId}' when '' then 1 else 2 end" }, { "field": "modeId", "label": "modeId", "type": "string", "describe": "//0 正常,1重要,2紧急", "value": 37 }, { "field": "formId", "label": "formId", "type": "string", "value": -186 }, { "field": "JSONStr", "label": "JSONStr", "type": "object", ... ``` #### 2. 数据转换逻辑 在ETL过程中,我们需要对源平台的数据进行清洗和转换,以符合目标平台的要求。以下是关键字段的转换逻辑: - **billid**: 从URL中获取泛微表单的参数ID。 - **type**: 根据`{F_WMMX_OAId}`是否为空来决定类型值,若为空则为1,否则为2。 - **JSONStr**: 包含多个子字段,这些字段将源平台的数据映射到目标平台所需的格式。 以下是`JSONStr`对象内字段的具体映射: ```json { ... { // 物料编码 field: 'field11645', label: '物料编码', type: 'string', value: '{FNumber}' }, { // 物料名称 field: 'field11646', label: '物料名称', type: 'string', value: '{FName}' }, { // 换算方向 field: 'field11653', label: '换算方向', type: 'string', value: "_function case '{FUnitConvertDir}' when '1' then '库存单位-->辅助单位i' when '2' then '辅助单位-->库存单位' else '' end" }, ... } ``` #### 3. 数据写入 完成数据转换后,我们使用HTTP POST方法将数据提交到泛微OA接口。以下是一个完整的请求示例: ```json { billid: '12345', type: 1, modeId: 37, formId: -186, JSONStr: { field11645: 'MAT001', field11646: '材料A', field11653: '库存单位-->辅助单位i', ... }, guid: 'card', layoutid: 239, iscreate: 1, token: '<your_token>', user_id: 22 } ``` #### 4. 实施效果 通过上述配置和转换逻辑,我们可以确保从金蝶系统获取的数据经过ETL处理后,能够无缝地写入到泛微OA系统中。这不仅提升了系统间的数据一致性,还简化了业务流程,提高了工作效率。 以上就是使用轻易云数据集成平台进行ETL转换并写入泛微OA-HttpAPI接口的详细技术实现过程。通过合理配置元数据和精确的数据映射,我们能够高效地完成跨系统的数据集成任务。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)