案例分享:旺店通·企业奇门数据集成到用友BIP
在本次技术案例中,我们将探讨如何使用轻易云数据集成平台,实现旺店通·企业奇门中的调拨单数据无缝对接到用友BIP系统,具体方案名称为“调拨单对接YS调拨订单-v”。此架构不仅涵盖了高吞吐量的数据写入能力,还注重异常处理与实时监控。
获取旺店通·企业奇门数据
首先,我们利用wdt.stock.transfer.query
API接口从旺店通·企业奇门系统中抓取需要的调拨单数据。在这一过程中,需要重点关注分页和限流问题,以确保大批量的数据能够被可靠且高效地提取。为了实现定时准时抓取,可以设置合理的任务计划。
数据转换与质量监控
获取到原始数据后,会通过自定义的数据转换逻辑进行处理,以适应用友BIP的数据结构需求。这一过程通常涉及字段映射、格式规范化以及必要的单位转换。为保证最终结果的一致性和准确性,整个流程会引入严格的数据质量监控机制,并设立告警系统以便及时发现和解决潜在的问题。
批量写入到用友BIP
经过清洗和转换后的数据,将通过API /yonbip/scm/transferapply/save
进行批量写入至用友BIP。这一环节依赖于轻易云提供的大容量、高吞吐能力,确保大量的数据能够快速稳定地传输并存储。在这一阶段,还实现了细粒度的异常处理与错误重试机制,以进一步提高整体操作的鲁棒性。
实时监控与日志记录
在整个项目实施过程中,实时跟踪各个步骤的状态是关键。集中式监控平台会持续观测每个任务节点,并生成详细的日志记录,为故障排除提供依据。此外,可视化工具使得运维人员能直观了解当前系统表现,一旦发现问题能够快速定位并解决,从而降低停机时间和业务影响。
下一步将在设计方案部分深入讨论具体实现细节,包括API调用示例、分页策略优化及性能提升措施等内容。
调用源系统旺店通·企业奇门接口wdt.stock.transfer.query获取并加工数据
在数据集成生命周期的第一步中,调用源系统接口以获取原始数据是至关重要的。本文将详细探讨如何使用轻易云数据集成平台配置元数据,调用旺店通·企业奇门接口wdt.stock.transfer.query
,并对获取的数据进行初步加工。
接口概述
接口wdt.stock.transfer.query
用于查询调拨单信息。该接口采用POST请求方式,支持分页查询和条件过滤。以下是元数据配置中的主要字段及其用途:
- api:
wdt.stock.transfer.query
- method:
POST
- number:
transfer_no
- id:
transfer_no
- pagination: 分页配置,每页大小为100条
- idCheck: 启用ID检查,确保唯一性
- condition: 查询条件,过滤掉
api_outer_no
包含"DBDD"的记录 - request: 请求参数,包括开始时间、结束时间、源仓库、目标仓库和调拨单状态等
- otherRequest: 其他请求参数,如分页大小和页号
请求参数配置
在实际应用中,我们需要根据业务需求动态设置请求参数。以下是关键请求参数的配置及其描述:
-
start_time 和 end_time
- 用于增量获取数据,分别表示开始时间和结束时间。
- 格式为
yyyy-MM-dd HH:mm:ss
。 - 例如:
{{LAST_SYNC_TIME|datetime}}
和{{CURRENT_TIME|datetime}}
-
from_warehouse_no 和 to_warehouse_no
- 分别代表源仓库和目标仓库的唯一编码,用于区分不同仓库的数据。
- 这些编码在ERP系统内可以自定义。
-
status
- 调拨单状态,用于筛选特定状态的调拨单。
- 例如:传递值为"90"表示只查询已完成的调拨单。
-
pagination
- 分页大小和页号,用于控制每次请求返回的数据量。
- 每页返回的数据条数默认为100。
数据请求与清洗
调用接口后,我们需要对返回的数据进行初步清洗,以确保数据质量和一致性。以下是常见的数据清洗步骤:
-
去重
- 根据调拨单号(
transfer_no
)去重,确保每条记录唯一。
- 根据调拨单号(
-
过滤无效数据
- 根据预设条件过滤掉不符合要求的数据,例如剔除包含特定字符串的记录。
-
字段转换
- 将时间字段转换为标准格式,以便后续处理。
- 对数值字段进行单位转换或格式化处理。
实际案例
假设我们需要获取2023年10月1日至2023年10月31日期间,从仓库编号为"W001"到仓库编号为"W002"的所有已完成调拨单。具体配置如下:
{
"api": "wdt.stock.transfer.query",
"method": "POST",
"number": "transfer_no",
"id": "transfer_no",
"pagination": {"pageSize": 100},
"idCheck": true,
"condition": [
[{"field":"api_outer_no","logic":"notlike","value":"DBDD"}]
],
"request": [
{"field":"start_time","label":"开始时间","type":"datetime","describe":"增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss","value":"2023-10-01 00:00:00"},
{"field":"end_time","label":"结束时间","type":"datetime","describe":"增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss","value":"2023-10-31 23:59:59"},
{"field":"from_warehouse_no","label":"源仓库","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)","value":"W001"},
{"field":"to_warehouse_no","label":"目标仓库","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)","value":"W002"},
{"field":"status","label":"调拨单状态","type":"string","describe":"调拨单状态10已取消 20编辑中 30待审核 40已审核 42出库单待推送 44出库单推送失败 46待出库 50部分出库 60全部出库 62入库单待推送 64入库单推送失败 66待入库 70部分入库 80待结算 90调拨完成 (不传该字段默认返回全部状态的单据)","value":"90"}
],
"otherRequest": [
{"field":"page_size","label":"分页大小","type":"string","describe":"每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里","value":"100"},
{"field":"page_no","label":"页号","type":"string","describe":"不传值默认从0页开始"}
]
}
通过上述配置,我们可以精准地获取所需的调拨单信息,并进行后续的数据处理与分析。这一步骤不仅确保了数据的一致性和准确性,也为后续的数据转换与写入打下了坚实基础。
轻易云数据集成平台:将调拨单数据转换并写入用友BIPAPI接口
在轻易云数据集成平台中,数据处理的第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台用友BIPAPI接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。
API接口配置
我们需要将调拨单的数据通过用友BIPAPI接口写入目标系统。根据元数据配置,我们使用了/yonbip/scm/transferapply/save
这个API接口,采用POST方法进行数据传输。
{
"api": "/yonbip/scm/transferapply/save",
"method": "POST",
"idCheck": true,
"BIPAudit": "/yonbip/scm/transferapply/batchaudit"
}
请求参数配置
请求参数主要包括调拨单的主表和子表信息。在元数据配置中,我们定义了多个字段,包括调出组织、调出会计主体、单据编号、单据日期等。这些字段需要从源系统的数据中提取并映射到目标系统的相应字段。
主表字段映射
-
调出组织id或code (
outorg
){ "field": "outorg", "label": "调出组织id或code", "type": "string", "describe": "例:A23001", "value": "_findCollection find inventoryOrg from fa193860-6aa8-37a8-b996-a856e9a8a96f where omsInWarehouse={to_warehouse_no} omsOutWarehouse={from_warehouse_no} mappingType=1" }
使用
_findCollection
函数从源系统中查找对应的组织ID或编码。 -
单据编号 (
code
){ "field": "code", "label": "单据编号,编码规则是手动时必填", "type": "string", "describe": "例:ZK20210417000002", "value": "{transfer_no}" }
直接映射源系统中的
transfer_no
字段。 -
单据日期 (
vouchdate
){ "field": "vouchdate", "label": "单据日期", "type": "string", "describe": "例:2021-04-17 00:00:00", "value": "{created}" }
映射源系统中的
created
字段。 -
交易类型id或code (
bustype
){ "field": "bustype", "label": "交易类型id或code", "type": "string", "describe": "例:110000000000019", "value":"A03002" }
固定值为"A03002"。
-
备注 (
memo
){ "field":"memo", "label":"备注", 'type':'string', 'describe':'例:表头备注', 'value':'{remark}' }
映射源系统中的
remark
字段。
子表字段映射
子表信息包含物料信息、数量、单位等,需要逐条进行映射:
-
物料id或code (
product
){ 'field':'product', 'label':'物料id或code', 'type':'string', 'describe':'例:1920126858647891', 'value':'{{details_list.goods_no}}', 'parent':'details' }
映射源系统中的
goods_no
字段。 -
数量 (
qty
){ 'field':'qty', 'label':'数量', 'type':'string', 'describe':'例:12', 'value':'{{details_list.num}}', 'parent':'details' }
映射源系统中的
num
字段。 -
单位id或编码 (
unit
){ 'field':"unit",'label':"单位id或编码",'type':"string",'describe':"例:1836523958194432",'value':"_findCollection find code from f9eedcc9-f1ff-31c0-9081-6aee9cf21740 where name={unit_name}",'parent':"details" }
使用
_findCollection
函数从源系统中查找对应的单位ID或编码。
数据转换与写入
在完成所有字段的映射后,我们需要将这些数据按照目标平台所需的格式进行转换,并通过API接口写入到用友BIP系统。具体步骤如下:
-
构建请求体: 根据上述配置,将所有主表和子表信息构建成一个JSON对象作为请求体。
{ // 主表信息 outorg: "...", code: "...", vouchdate: "...", bustype: "...", memo: "...", // 子表信息列表 transferApplys: [ { product: "...", qty: "...", unit: "..."}, ... ] }
-
发送请求: 使用HTTP POST方法,将构建好的请求体发送到指定的API接口。
const axios = require('axios');
axios.post('/yonbip/scm/transferapply/save', requestBody) .then(response => { console.log('Data successfully written to YONBIP:', response.data); }) .catch(error => { console.error('Error writing data to YONBIP:', error); });
通过以上步骤,可以实现将调拨单数据从源平台转换并写入到用友BIP系统。整个过程涉及多个字段的映射和转换,需要确保每个步骤都准确无误,以保证数据的一致性和完整性。
![打通钉钉数据接口](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)