使用ETL转换工具进行数据集成:轻易云与旺店通API对接实战

  • 轻易云集成顾问-潘裕
### 用友U8数据集成到旺店通·企业奇门的技术实现 在现今复杂多变的业务环境中,系统间的数据对接挑战逐步凸显。如何高效、可靠地完成不同系统之间的数据同步,是每个企业信息化团队必须攻克的重要课题。本案例分享的是将用友U8系统中的销售出库单数据集成到旺店通·企业奇门其他出库单的数据处理流程和具体实施细节。 首先,我们需要确保从用友U8接口(/apilink/u8api)读取销售出库单数据不漏单,并且能够应对分页和限流的问题。在这一过程中,为了保证高效性,我们设计了一套定时可靠抓取机制,每隔固定时间段调用API,从而获取最新的销售出库单记录。为了避免遗漏和重复,利用增量更新策略,通过时间戳等标记实现精准提取。此外,对于大批量数据快速写入到旺店通·企业奇门(wdt.vip.wms.stockinout.order.push),我们采用并行处理方式,提高插入效率。 其次,针对两套系统之间存在的数据格式差异问题,我们进行了详细的字段映射工作。例如,用友U8中的字段名与格式可能与旺店通·企业奇门有所不同,这就要求我们在中间处理中进行必要转换,同时确保每条数据的一致性与完整性。这一步骤非常关键,因为任何一处细微的不匹配都可能导致后续业务操作异常。为此,通过自定义脚本和规则引擎,实现元数据层面的灵活映射及转换,以适应双方系统的需求。 最后,在整个项目实施过程中,还需要特别注意错误处理机制。一旦出现异常情况,比如网络故障或接口返回错误,需要有健全的重试机制来保障数据传输稳定性。同时,用友U8提供了实时监控功能,可以即时记录日志,并通过警报邮件通知相关人员,从而及时响应并处理突发状况。 总体来看,结合以上多个方面的优化措施,此次成功实现了用友U8到旺店通·企业奇门的数据无缝对接,使得两个平台联动更加顺畅,有力支撑了线下销售管理流程的信息化提升。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image) ### 调用用友U8接口获取并加工数据的技术案例 在轻易云数据集成平台中,调用源系统用友U8接口是数据集成生命周期的第一步。本文将深入探讨如何通过配置元数据来实现这一过程,并详细介绍相关的技术细节。 #### 配置元数据 元数据配置是调用API接口的关键步骤。以下是用于调用用友U8接口`/apilink/u8api`的元数据配置示例: ```json { "api": "/apilink/u8api", "effect": "QUERY", "method": "POST", "number": "ccusabbname", "id": "ccode", "name": "poid", "idCheck": true, "request": [ { "field": "data", "label": "消息体参数", "type": "object", "children": [ { "field": "过滤条件_1", "label": "开始时间", "type": "object", "children": [ { "field": "名称", "label": "开始时间", "type": "string", "value":"dnmaketime" }, { "field":"比较符号", "label":"大于等于", "type":"string", "value":"=" }, { "field":"值", "label":"短日期", 'type':'date', 'value':'{{LAST_SYNC_TIME|datetime}}' } ] }, { 'field':'过滤条件_2', 'label':'结束时间', 'type':'object', 'children':[ { 'field':'名称', 'label':'结束时间', 'type':'string', 'value':'dnmaketime' }, { 'field':'比较符号', 'label':'小于等于', 'type':'string', 'value':'<=' }, { 'field':'值', 'label':'短日期', 'type':'date', 'value':'{{CURRENT_TIME|datetime}}' } ] }, { 'field':"apicontext", 'label':"分页参数", 'type':"object", 'children':[ {'field':"pagesize",'label':"分页大小",'type':"int",'value':100}, {'field':"pageindex",'label':"页码",'type':"int",'value':1} ] }, { 'field':'过滤条件_3', 'label':'仓库', 'type':'object', 'children':[ {'field':'名称','label':'仓库编码','type':'string','value':'cwhcode'}, {'field':'比较符号','label':'in','type':'string','value':'in'}, {'field':'值','label':'仓库编码','type':'string','value':'702,802,803'} ] }, { 'field':"过滤条件_4", 'label':"排除制单人1", 'type':"object", 'children':[ {'field':"名称",'label':"制单人字段",'type':"string",'value':"cmaker"}, {'field':"比较符号",'label':"不等于",'type':"string",'value':"!"}, {'field':"值",'label':"接口生成",'type':"string",'value':"ASUSER"} ] }, { field:'过滤条件_5', label:'排除制单人2', type:'object', children:[ { field:'名称', label:'制单人字段', type:'string', value:'cmaker' }, { field:'比较符号', label:'不等于', type:'string', value:'!=' }, { field:'值', label:'接口生成', type:'string', value:'陈勇' } ] } ] } ], otherRequest:[ { field:"apiurl", label:"id列表接口", type:"string", describe:"id列表接口", value:"saleout/list"}, { field:"apidetail", label:"详情接口", type:"string", describe:"详情接口", value:"saleout/get"} ], autoFillResponse:true, condition:[ [{ field:body.iquantity, logic:gt, value:0 },{ field:cbuscode, logic:notlike, value:CK }] ] } ``` #### 数据请求与清洗 在上述元数据配置中,我们定义了多个过滤条件,用以精确获取所需的数据: - **开始时间和结束时间**:通过`dnmaketime`字段设置大于等于和小于等于当前时间的范围,确保只获取特定时间段内的数据。 - **分页参数**:设置分页大小为100,页码为1,以便分批次获取大量数据。 - **仓库编码**:使用`cwhcode`字段,通过`in`操作符指定多个仓库编码(702、802、803),以筛选出特定仓库的数据。 - **排除制单人**:通过`cmaker`字段,排除由特定用户(如ASUSER和陈勇)生成的数据。 这些过滤条件确保了我们能够精准地从用友U8系统中提取到所需的数据。 #### 数据转换与写入 在获取到符合条件的数据后,需要进行相应的转换与写入操作。此处我们定义了两个主要的API: - **ID列表接口**:用于获取销售出库单的ID列表,API路径为`saleout/list`。 - **详情接口**:用于根据ID获取销售出库单的详细信息,API路径为`saleout/get`。 通过这两个API,我们可以先获取到所有符合条件的销售出库单ID,然后逐个调用详情接口获取每个出库单的详细信息,并进行相应的数据处理和写入操作。 #### 自动填充响应 在配置中,我们设置了`autoFillResponse:true`,这意味着平台会自动处理并填充响应结果,从而简化了开发人员的工作量,提高了效率。 #### 条件判断 最后,我们还定义了一些条件判断逻辑,例如: - **数量大于0**:确保只有数量大于0的数据才会被处理。 - **业务代码不包含CK**:排除业务代码中包含“CK”的记录。 这些条件判断进一步提高了数据处理的准确性和有效性。 通过以上步骤,我们成功实现了从用友U8系统中调用API获取并加工数据,为后续的数据集成奠定了坚实基础。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台——旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。本文将深入探讨这一过程中的技术细节和实现方法。 #### 元数据配置解析 首先,我们来看一下元数据配置: ```json { "api": "wdt.vip.wms.stockinout.order.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "contact", "label": "联系人", "type": "string", "value": "{ccusperson}"}, {"field": "api_outer_no", "label": "接口外部单号", "type": "string", "value": "{ccode}"}, {"field": "warehouse_no", "label": "仓库编号", "type": "string", "describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置)","value":"{cwhcode}", "mapping":{"target":"640163621499f14120278f6f","direction":"positive"}}, {"field": "order_type", "label": "出入类型", "type": "string", "value":"1"}, {"field":"address","label":"详细地址","type":"string","value":"{ccusaddress}"}, {"field":"remark","label":"备注","type":"string","describe":"其他出库单备注","value":"{cmemo}&发货{cbuscode},出库"}, {"field":"goods_list","label":"货品列表节点","type":"array","describe":"请求参数的2级数据节点,包含其他出库单所有货品属性信息的数据节点,节点下数据字段详见下述“ detail_list”", "value":"body","children":[ {"field":"spec_no","label":"商家编码","type":"string","value":"{{body.cinvcode}}"}, {"field":"num","label":"出库数量","type":"string","value":"{{body.iquantity}}"}, {"field":"price","label":"价格","type":"string"} ]}, {"field": "prop1", "label": "来源单号", "type": "string", "value": "{cbuscode}"}, {"field": "prop2", "label": "部门客户", "type": "string", "value": "{ccusname}"}, {"field": "prop3", "label": "出库类别", "type": "string", "value": "{crdname}"}, {"field": "prop4", "label": "出库日期", "type": : : : : ``` #### 数据转换与写入流程 1. **数据请求与清洗** - 在这一阶段,我们从源平台(如U8销售出库单)获取原始数据,并进行必要的数据清洗和标准化处理。这一步骤确保我们获得高质量、结构化的数据,为后续的ETL转换打下基础。 2. **ETL转换** - **提取(Extract)**:从源系统中提取所需的数据字段,例如`ccusperson`、`ccode`、`cwhcode`等。 - **转换(Transform)**:根据目标API接口的要求,对提取的数据进行格式转换和映射。例如,将源系统中的字段名映射到目标系统所需的字段名,并对字段值进行必要的格式化处理。 - **加载(Load)**:将转换后的数据通过API接口写入到目标平台——旺店通·企业奇门。 #### API接口调用 在完成ETL转换后,我们需要通过HTTP POST请求将处理后的数据发送到目标API接口。以下是一个示例代码片段,用于展示如何构建和发送HTTP请求: ```python import requests import json # 构建请求头 headers = { 'Content-Type': 'application/json', } # 构建请求体 payload = { 'contact': '张三', 'api_outer_no': 'SO123456', 'warehouse_no': 'WH001', 'order_type': '1', 'address': '北京市海淀区中关村大街1号', 'remark': '备注信息&发货SO123456,出库', 'goods_list': [ {'spec_no': 'P001', 'num': '10', 'price': '100.00'}, {'spec_no': 'P002', 'num': '5', 'price': '200.00'} ], 'prop1': 'SO123456', 'prop2': '客户A', 'prop3': '普通出库', 'prop4': '2023-10-01' } # 发送POST请求 response = requests.post('https://api.wangdiantong.com/wdt.vip.wms.stockinout.order.push', headers=headers, data=json.dumps(payload)) # 检查响应状态 if response.status_code == 200: print('数据成功写入目标平台') else: print(f'请求失败,状态码: {response.status_code}, 响应内容: {response.text}') ``` 以上代码展示了如何使用Python构建并发送HTTP POST请求,将经过ETL转换后的数据写入到旺店通·企业奇门API接口中。我们可以根据实际需求,对请求头和请求体进行动态调整,以适应不同的数据场景。 #### 数据验证与监控 为了确保数据成功写入并保持一致性,我们需要对API响应进行验证,并实时监控数据流动和处理状态。这一步骤可以通过轻易云提供的实时监控功能来实现,确保每个环节都清晰可见,提高业务透明度和效率。 综上所述,通过轻易云数据集成平台,我们可以高效地完成从源平台到目标平台的数据ETL转换,并通过API接口实现无缝对接。在实际操作中,需要根据具体业务需求灵活调整元数据配置和ETL流程,以确保最佳的数据集成效果。 ![打通钉钉数据接口](https://pic.qeasy.cloud/T8.png~tplv-syqr462i7n-qeasy.image)