吉客云数据集成到用友BIP的技术案例分享
在本文中,我们将深入探讨通过轻易云数据集成平台实现吉客云与用友BIP的系统对接。本项目具体涉及吉客云中的“其他出库单”数据写入到用友BIP,方案名为"吉客云-其他出库---> YS-其他出库单-OK"。
项目背景
整合吉客云与用友BIP两个系统的数据,是为了实现高效、无缝的数据流转。借助轻易云的平台,我们不仅能支持高吞吐量的数据写入,还具备实时监控和异常处理能力,从而确保整个数据集成过程平稳进行。
技术要点
1. 数据获取及分页处理
通过调用吉客云提供的API erp.storage.goodsdocout.v2
,我们可以获取需要同步的“其他出库单”数据。由于该接口存在分页和限流限制,我们设计了一套可靠的定时抓取机制,以确保每次请求都完整无误地获取所需数据。在此过程中,实现了精准掌控分页参数以及限流策略的灵活调整。
2. 数据转换逻辑
为了使得从吉客云提取出来的数据能够适配用友BIP接收格式,我们利用平台提供的自定义转换功能,对源数据进行必要的清洗和重构。这样处理后,再通过API /yonbip/scm/othoutrecord/single/save
将整理后的“其他出库单”批量、安全地提交至用友BIP系统。
3. 实时监控与告警
在整个流程中,通过全透明可视化操作界面和集中监控系统,我们可以实时跟踪每一个任务执行情况。一旦出现任何异常,如接口超时或响应错误,告警机制会立刻通知相关人员并触发自动重试策略,从而提高任务成功率。
以上是本项目实施的一些关键技术点,下文将详细介绍相关配置步骤与实施细节,并包括如何利用轻易云平台优化这些流程以达到最佳性能表现。
调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过调用吉客云接口erp.storage.goodsdocout.v2
获取并加工数据。
接口配置与请求参数
根据元数据配置,我们需要向吉客云接口发送一个POST请求。以下是该接口的主要配置参数:
- API:
erp.storage.goodsdocout.v2
- Method:
POST
- Pagination: 每页50条记录
- ID Check: 启用ID检查
- Auto Fill Response: 自动填充响应
请求参数包括分页信息、出库单号、更新时间范围、创建时间范围、出库类型等。以下是具体的请求参数及其含义:
{
"pageIndex": "1",
"pageSize": "50",
"goodsDocNo": "",
"gmtModifiedStart": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')",
"gmtModifiedEnd": "_function from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')",
"startDate": "",
"endDate": "",
"inouttype": "204",
"warehouseCode": "",
"outBillNo": "",
"vendCode": "",
"billNo": "",
"userName": "",
"selelctFields": "recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,field3,field4,field5,financeBillStatus,vendCustomerId,applyDepartId,applyDepartName,outBillNo,companyCode,deliveryNo,..."
}
数据清洗与转换
在接收到吉客云的数据后,需要进行清洗和转换,以便后续处理和写入目标系统。以下是几个关键步骤:
-
分页处理:由于每次请求只能获取50条记录,因此需要循环调用接口,直到获取所有数据。
-
时间格式转换:将
gmtModifiedStart
和gmtModifiedEnd
字段的Unix时间戳转换为标准时间格式,确保数据的一致性。 -
字段映射与重命名:根据业务需求,将吉客云返回的数据字段映射到目标系统所需的字段。例如,将
goodsDocDetailList.goodsId
映射为目标系统中的商品ID。 -
数据过滤与校验:根据业务规则过滤无效或重复的数据。例如,过滤掉仓库编号为"03"的数据。
实际案例
假设我们需要获取过去一天内所有“其他出库”的记录,并将其写入目标系统。具体步骤如下:
-
初始化请求参数:
{ "pageIndex": "1", "pageSize": "50", ... "gmtModifiedStart": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')", ... }
-
循环调用接口,获取所有分页数据:
all_data = [] page_index = 1 while True: response = call_api(api="erp.storage.goodsdocout.v2", method="POST", params={"pageIndex": page_index}) data = response["data"] if not data: break all_data.extend(data) page_index += 1
-
清洗与转换数据:
cleaned_data = [] for record in all_data: if record["warehouseCode"] != "03": cleaned_record = { # 映射字段 ... } cleaned_data.append(cleaned_record)
-
写入目标系统:
for record in cleaned_data: write_to_target_system(record)
通过上述步骤,我们可以高效地从吉客云获取所需的出库记录,并进行必要的数据清洗和转换,为后续的数据处理打下坚实基础。
用友BIPAPI接口数据集成技术案例:ETL转换与写入
在使用轻易云数据集成平台进行数据处理的全生命周期管理中,第二步是将已经集成的源平台数据进行ETL转换,转为目标平台用友BIPAPI接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中的关键技术细节和实现方法。
1. API接口配置
在本案例中,我们需要将吉客云的“其他出库”数据转换并写入用友BIP系统。根据提供的元数据配置,我们使用的API接口为/yonbip/scm/othoutrecord/single/save
,请求方法为POST。以下是该API接口的主要字段及其配置:
- 单据编号 (
code
):此字段接受系统编码规则配置,示例值为QTCK0000001
。在实际操作中,我们将其映射到源数据中的goodsdocNo
。 - 库存组织 (
org
)和会计主体 (accountOrg
):这两个字段都接受ID或代码,示例值为wzyqzn
,映射到源数据中的warehouseCode
。 - 单据日期 (
vouchdate
):日期格式为yyyy-MM-dd
,示例值为2021-03-05
,映射到源数据中的inOutDate
。 - 交易类型 (
bustype
):固定值为A10001
。 - 仓库 (
warehouse
):接受ID或代码,示例值为ck01
,映射到源数据中的warehouseCode
。 - 部门 (
department
)、业务员 (operator
)、备注 (memo
)等字段也需要根据实际需求进行配置。
2. 子表及孙表配置
对于子表“其他出库单子表”(字段名为 othOutRecords
),我们需要处理以下字段:
- 物料 (
product
):传入ID或代码,示例值为PD0817000001
,映射到源数据中的goodsNo
. - 批次号 (
batchno
):通过_function case _findCollection find detail.batchManage from 7aed2c28-cc02-35c8-aa6a-2d750373f9e1 where code={goodsNo} _endFind when false then '' else '001' end
函数来确定是否需要填写批次号。 - 应发数量 (
contactsQuantity
) 和 数量 (qty
) 等字段均映射到源数据中的quantity
.
此外,对于孙表“序列号孙表”(字段名为 othOutRecordsSNs
),我们需要处理以下字段:
- 序列号id (
id
) - 序列号 (
sn
)
这些字段在更新操作时必填,并且需要确保每个序列号的唯一性。
3. 数据转换与写入实现
在轻易云平台上,我们可以通过以下步骤实现数据转换与写入:
-
定义元数据模型:根据提供的元数据配置文件定义目标平台的数据模型。这一步确保了所有必要字段都被正确识别和映射。
-
编写ETL脚本:
- 使用轻易云平台提供的可视化工具或编写自定义脚本,将源平台的数据提取出来。
- 对提取的数据进行清洗和转换,使其符合目标API接口所需的格式。例如,将日期格式从原始格式转换为
yyyy-MM-dd
, 将数量等数值字段进行必要的单位换算等。
-
调用API接口:
- 使用HTTP POST方法,将转换后的数据发送到用友BIP系统的
/yonbip/scm/othoutrecord/single/save
接口。 - 确保每个请求都包含必要的幂等性检查键(如
resubmitCheckKey: {goodsdocNo}_1
),以防止重复提交。
- 使用HTTP POST方法,将转换后的数据发送到用友BIP系统的
-
错误处理与日志记录:
- 捕获并处理API调用过程中可能出现的错误,如网络故障、验证失败等。
- 记录每次API调用的请求和响应,以便后续审计和问题排查。
4. 示例代码片段
以下是一个简化版的Python代码片段,用于展示如何调用用友BIP API接口:
import requests
import json
url = "https://api.yonyoucloud.com/yonbip/scm/othoutrecord/single/save"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
data = {
"code": "QTCK0000001",
"org": "wzyqzn",
"accountOrg": "wzyqzn",
"vouchdate": "2021-03-05",
"bustype": "A10001",
"warehouse": "ck01",
# ... other fields ...
"_status": "Insert",
"othOutRecords": [
{
"product": "PD0817000001",
# ... other fields ...
"_status": "Insert",
"othOutRecordsSNs": [
{
"id": 123,
"sn": "SN01",
"_status": "Insert"
}
]
}
],
# ... other fields ...
}
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
print("Data successfully written to Yonyou BIP")
else:
print(f"Failed to write data: {response.text}")
通过上述步骤和技术实现,我们可以高效地将吉客云的数据转换并写入用友BIP系统,实现不同系统间的数据无缝对接。