使用轻易云平台将金蝶销售订单写入小满OKKICRM的技术实现

  • 轻易云集成顾问-张妍琪
### 案例分享:金蝶云星空数据集成到小满OKKICRM的实践 在一个典型的数据集成项目中,我们需要将金蝶云星空系统中的已审核销售订单数据无缝对接至小满OKKICRM,以实现业务流程的自动化和高效管理。本文将以实际运行方案“金蝶销售订单(已审核)对接小满销售订单-P-JGC”为载体,探讨相关技术细节及挑战。 #### 数据获取与接口调用 首先,利用金蝶云星空提供的数据获取API `executeBillQuery`,定时可靠地抓取最新的已审核销售订单信息。为了确保数据不漏单,我们采用了分页机制,并处理了API限流问题。在每次请求中,通过实时监控确认成功获取所有必要的数据。 ```json { "formId": "SAL_SaleOrder", "fieldKeys": "FSID,FSaleOrderNo,FDate,...", // Additional parameters as needed for specific query requirements. } ``` 导入后的数据需进行预处理,包括格式转换、字段映射等步骤,以便于后续顺利写入到小满OKKICRM系统。此外,为应对两者之间可能存在的数据格式差异,我们定义了一套灵活且可扩展的映射规则。 #### 数据推送与异常处理 经预处理后的数据,将通过小满OKKICRM提供的API `/v1/invoices/order/push` 批量写入目标系统。在这一过程中考虑到了大批量数据快速写入以及异常捕获机制。一旦出现错误,如网络断开或接口响应异常,会触发重试逻辑并记录详细日志,以供事后分析和调优参考。 ```json { "invoices":[ { "orderId":"001", "customerName":"ABC Corp", ... }, ... ] } ``` 我们设计了一套精确而高效的小满OKKICRM定制化数据映射模型,使得新老系统能够平稳衔接。同时,小满OKKICRM对接过程中所涉及的具体事项,如必填项校验、多态性支持等,也均一一解决,确保整个过程流畅无误。 简要概述如上部分内容,下文将继续深入探讨更多技术细节以及优化策略。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/D20.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据的技术实现 在数据集成生命周期的第一步中,调用源系统的API接口是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`来获取并加工销售订单数据。 #### 接口调用配置 首先,我们需要配置调用金蝶云星空接口的元数据。以下是一个典型的元数据配置示例: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FSaleOrderEntry_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FSaleOrderEntry_FEntryID","label":"FSaleOrderEntry_FEntryID","type":"string","value":"FSaleOrderEntry_FEntryID"}, {"field":"FID","label":"FID","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FSaleOrgId_FNumber","label":"销售组织","type":"string","value":"FSaleOrgId.FNumber"}, {"field":"FDate","label":"日期","type":"string","value":"FDate"}, {"field":"FCustId_FNumber","label":"客户编码","type":"string","value":"FCustId.FNumber"}, {"field":"FCustId_FName","label":"客户名称","type":"string","value":"FCustId.FName"}, // ...其他字段省略 ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FBillTypeID.Fnumber='XSDD01_SYS' and FApproveDate>='{{HOURE_AGO_1|datetime}}' and (FSaleOrgId.FNumber in ('100','103'))" }, {"field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser":{ "name": "ArrayToString", "params": "," } }, { field: FormId, label: business object form ID, type: string, describe: must fill in the form ID of Kingdee, such as: PUR_PurchaseOrder, value: SAL_SaleOrder } ], omissionRemedy:{ crontab: 0 3 * * *, takeOverRequest:[ field: FilterString, value: FBillTypeID.Fnumber='XSDD01_SYS' and FApproveDate>='{{DAYS_AGO_1|datetime}}' and (FSaleOrgId.FNumber='100' or FSaleOrgId.FNumber='103') and FCustId.FNumber <> 'GN.HN.GD.326', type: string, label: takeover field, formModel:{ enable:false }, tableModel:{ enable:false }, physicalModel:{ enable:false } } ] }, condition_bk:[ [ { field: FSaleDeptId_FName, logic: like, value: channel }, { field: FCustId_FName, logic: notlike, value: sample (International Sales Department) }, { logic:notlike,value:sample (Domestic Sales Department),field:FCustId_FName} ] ], condition:[ [ { field:FSaleDeptId_FName,logic:like,value:channel} ] ] } ``` #### 请求与清洗 在请求阶段,我们通过POST方法向`executeBillQuery`接口发送请求。请求体包含了所需字段和分页参数。以下是一个示例请求体: ```json { "_FormId_":"", "_FieldKeys_":"", "_FilterString_":"", "_Limit_":"", "_StartRow_":"", } ``` 在这个请求体中,`FormId`指定了业务对象表单ID,例如销售订单为`SAL_SaleOrder`;`FieldKeys`指定了需要查询的字段集合;`FilterString`用于定义过滤条件;`Limit`和`StartRow`用于分页控制。 #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。在清洗过程中,可以根据业务需求对字段进行筛选、重命名或格式转换。例如,将日期格式从“YYYY-MM-DD”转换为“DD/MM/YYYY”。 以下是一个简单的数据转换示例: ```python def transform_data(data): transformed_data = [] for record in data: transformed_record = { '订单编号': record['FBillNo'], '客户名称': record['FCustId_FName'], '销售组织': record['FSaleOrgId_FNumber'], '日期': convert_date_format(record['FDate']), # ...其他字段转换 } transformed_data.append(transformed_record) return transformed_data def convert_date_format(date_str): from datetime import datetime date_obj = datetime.strptime(date_str, '%Y-%m-%d') return date_obj.strftime('%d/%m/%Y') ``` #### 实时监控与错误处理 在整个数据集成过程中,实时监控和错误处理同样重要。可以通过轻易云平台提供的监控工具,实时查看数据流动和处理状态。一旦发现错误,可以及时采取措施进行修复。 例如,可以设置定时任务(Crontab)来定期检查并重新执行失败的任务: ```json { "_crontab_":"", } ``` 通过上述配置和代码示例,我们可以高效地调用金蝶云星空接口获取销售订单数据,并进行必要的数据清洗和转换,为后续的数据写入做好准备。这不仅提高了数据处理效率,也确保了数据的一致性和准确性。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S20.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将金蝶销售订单转换并写入小满OKKICRMAPI接口 在数据集成生命周期的第二阶段,我们需要将已从源平台(金蝶)获取的数据进行ETL(抽取、转换、加载)处理,并将其转换为目标平台(小满OKKICRM)的API接口所能接收的格式。本文将详细探讨如何通过轻易云数据集成平台实现这一过程,重点关注API接口的技术细节和元数据配置。 #### 数据请求与清洗 首先,我们从金蝶系统中提取已审核的销售订单数据。该数据包含订单号、客户ID、订单金额等关键信息。在轻易云平台上,我们可以使用自定义的SQL查询或API调用来获取这些原始数据。 #### 数据转换与写入 接下来,我们需要根据小满OKKICRMAPI接口的要求,对提取的数据进行转换。以下是元数据配置示例,展示了如何将金蝶销售订单字段映射到小满OKKICRM的API字段。 ```json { "api": "/v1/invoices/order/push", "method": "POST", "idCheck": true, "groupCalculate": { "headerGroup": ["FID", "FBillNo", "FSettleCurrId", "F_hesh_Discount", "FExchangeRate", "FSalerId_FName", "FSaleDeptId_FName", "FCustId_FName", "FDate", "FBillAllAmount", "F_hesh_Text2", "FNote"], "bodyGroup": ["FMaterialId_Fnumber", "物流费", "Q1返利", "Q2返利", "Q3返利", "Q4返利", "售后费", "年度返利", "前返", "出样补贴", "运费差价链接", "返利", "促销折扣", "FAllAmount", "FQty", "FDiscount", "产品补差"], ... }, ... } ``` 在这个配置中,我们定义了API路径为`/v1/invoices/order/push`,请求方法为`POST`。同时,通过`idCheck`参数确保唯一性检查。 #### 字段映射与计算 我们需要将金蝶系统中的字段映射到小满OKKICRM的对应字段。例如: - `FBillNo`映射到`order_no` - `FCustId_FName`通过MongoDB查询获取对应的客户ID - `FBillAllAmount`直接映射到`amount` 具体配置如下: ```json { ... { "field": "order_no", "label": "订单号", "type": "string", "value": "{FBillNo}" }, { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... } } } } } } } } } } } } } } } }, ... } ``` #### 特殊处理逻辑 有些字段需要特殊处理,例如货币类型和汇率: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... } } } } } } } } } } } } } }, ... } ``` 通过上述配置,我们实现了从金蝶系统到小满OKKICRM的数据转换和写入。在轻易云平台上,这些配置可以通过可视化界面进行操作,大大简化了复杂的数据集成过程。 以上内容展示了如何利用轻易云数据集成平台,将源平台的数据进行ETL转换,并成功写入目标平台的小满OKKICRMAPI接口。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)