吉客云到用友BIP数据集成案例分享:调拨入库与其他入库对接方案
在现代企业的数字化运营中,数据的高效传输和及时处理至关重要。本文将介绍通过轻易云平台实现吉客云数据无缝集成到用友BIP系统中的一个具体实例:从吉客云获取“调拨入库”数据并写入到用友BIP的“YS-其他入库”。
为了确保这一过程高效而可靠地完成,我们采用了一系列技术手段与最佳实践。
首先,我们利用了轻易云平台的可视化数据流设计工具,创建了一个名为“吉客云-调拨入库--->YS-其他入库-ok”的集成方案。这一方案不仅在界面上清晰展现了每个流程步骤,还使得操作和维护变得更加直观。
在具体实施过程中,通过调用吉客云提供的数据接口erp.storage.goodsdocin.v2
,我们定时抓取最新的调拨入库数据,为后续处理奠定基础。鉴于大批量的数据需要被迅速且准确地传输至用友BIP系统,我们进一步优化了吞吐量,并合理设定分页机制以应对限流问题。
针对不同系统之间可能存在的数据格式差异,通过自定义的数据转换逻辑,对获取的数据进行了必要调整。例如,在字段映射和类型转换方面做了一些优化,使其符合用友BIP要求。同时,为保证写入过程顺利进行,每条记录都被精确地关联到了指定API /yonbip/scm/othinrecord/single/save
中。
实时监控和日志记录也是过程中不可或缺的一环。监控系统不仅能够及时发现潜在问题,还能快速定位并解决异常情况,从而保障整个数据流动的可靠性。此外,引人注目的集中告警功能,也让任何意外状况能第一时间得到反馈并采取相应措施。
综上所述,本次集成案例充分利用了轻易云平台卓越的数据管理能力,以及丰富灵活的问题解决机制,实现了跨系统间高效、透明、高质量的数据交换。接下来,将详细讲解不同阶段实施细节及相关代码示例,以便读者深入理解整个流程及关键技术点。
调用吉客云接口获取并加工数据
在数据集成生命周期的第一步,我们需要调用源系统吉客云的接口 erp.storage.goodsdocin.v2
来获取并加工数据。本文将详细探讨如何配置和调用该接口,并对返回的数据进行处理。
接口配置与调用
首先,我们需要配置元数据,以便正确地调用吉客云的接口。以下是元数据配置的详细信息:
{
"api": "erp.storage.goodsdocin.v2",
"effect": "QUERY",
"method": "POST",
"number": "goodsdocNo",
"id": "goodsdocNo",
"idCheck": true,
"request": [
{"field": "pageIndex", "label": "分页页码", "type": "string"},
{"field": "pageSize", "label": "分页页数", "type": "string", "value":"50"},
{"field": "goodsDocNo", "label": "入库单号", "type": "string"},
{"field": "startDate", "label": "创建时间的起始时间", "type":"string",
"value":"{{LAST_SYNC_TIME|datetime}}"},
{"field": "endDate", "label":"创建时间的结束时间","type":"string",
"value":"{{CURRENT_TIME|datetime}}"},
{"field":"inouttype","label":"入库类型","type":"string","describe":
"入库类型(100-期初库存 101-采购入库 102-调拨入库 103-盘盈入库 104-其他入库 105-销售退货 106-完工入库 107-组装拆卸入库 108-翻新入库 109-报废入库 110-残次品入库111-成本调整 112-即采即入113-退料入库114-调拨退回115-维修返厂返还)","value":"102"},
{"field":"warehouseId","label":"仓库ID","type":"string"},
{"field":"warehouseCode","label":"仓库编号","type":"string"},
{"field":"vendId","label":"供应商ID(往来单位)","type":"string"},
{"field":"vendCode","label":"供应商编号(往来单位)","type":"string"},
{"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
{"field":"userName","label":"创建人名称","type":"string"},
{"field":"gmtModifiedStart","label":"主表更新时间起始","type":
"string"},
{"field":"gmtModifiedEnd","label":"主表更新时间截至","type":
"string"},
{"field":"selelctFields","label":
"返回参数","type":
"string",
"value":
"goodsdocNo,inOutDate,userName,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,inOutReason,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.quantity,goodsDocDetailList,goodsDocDetailList.transHasTaxPrice,goodsDocDetailList.serialNo"}
],
autoFillResponse: true,
condition_bk: [[{"field":
warehouseCode,"logic":
neqv2,"value":
03}]]
}
请求参数解析
-
分页参数:
pageIndex
: 分页页码。pageSize
: 分页页数,默认值为50。
-
时间参数:
startDate
: 创建时间的起始时间,使用占位符{{LAST_SYNC_TIME|datetime}}
动态获取上次同步时间。endDate
: 创建时间的结束时间,使用占位符{{CURRENT_TIME|datetime}}
动态获取当前时间。
-
过滤条件:
inouttype
: 入库类型,固定值为102(调拨入库)。warehouseCode
: 仓库编号,排除编号为03的仓库。
-
返回字段:
- 配置了多个字段以确保返回的数据包含必要的信息,例如:
goodsdocNo
,inOutDate
,userName
,gmtCreate
, 等等。
- 配置了多个字段以确保返回的数据包含必要的信息,例如:
数据请求与清洗
在完成接口配置后,我们通过POST请求调用该接口,并获取返回的数据。以下是一个示例请求:
{
"pageIndex": 1,
"pageSize": 50,
// 动态生成
"startDate": "{{LAST_SYNC_TIME|datetime}}",
// 动态生成
"endDate": "{{CURRENT_TIME|datetime}}",
// 固定值
“inouttype”: “102”
}
数据清洗与转换
在获取到原始数据后,需要对其进行清洗和转换,以便后续处理和写入目标系统。以下是一些常见的数据清洗步骤:
- 字段映射:将原始数据字段映射到目标系统所需字段。例如,将
goodsdocNo
映射到目标系统中的相应字段。 - 数据格式转换:将日期格式从字符串转换为标准日期格式,确保一致性。
- 过滤无效数据:根据业务规则过滤掉不符合条件的数据,例如剔除仓库编号为03的数据。
示例代码
以下是一个简单的Python示例代码,用于调用接口并处理返回的数据:
import requests
import json
from datetime import datetime
# 配置请求URL和头部信息
url = 'https://api.jikexyun.com/erp.storage.goodsdocin.v2'
headers = {'Content-Type': 'application/json'}
# 构建请求体
payload = {
'pageIndex': '1',
'pageSize': '50',
'startDate': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'endDate': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'inouttype': '102'
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据清洗与转换
cleaned_data = []
for item in data['data']:
if item['warehouseCode'] != '03':
cleaned_item = {
'document_number': item['goodsdocNo'],
'date': item['inOutDate'],
'creator': item['userName'],
# 更多字段映射...
}
cleaned_data.append(cleaned_item)
else:
print(f'Error: {response.status_code}')
# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4))
通过以上步骤,我们成功地调用了吉客云接口,获取并加工了所需的数据,为后续的数据写入和处理打下了坚实基础。这一过程展示了如何利用轻易云平台提供的元数据配置,实现高效、透明的数据集成。
使用轻易云数据集成平台进行ETL转换并写入用友BIPAPI接口
在数据集成生命周期的第二步,我们需要将源平台的数据进行ETL(提取、转换、加载)处理,并将其转换为目标平台——用友BIPAPI接口所能接收的格式,最终写入目标平台。以下是具体的技术实现过程。
数据请求与清洗
首先,我们从源平台(如吉客云)获取原始数据。这些数据通常是未经处理的,需要进行清洗和预处理。清洗步骤包括去除无效数据、填补缺失值以及标准化字段格式等。
数据转换与写入
接下来,我们进入关键的ETL转换阶段。我们需要将清洗后的数据按照用友BIPAPI接口的要求进行格式转换,并通过POST请求将其写入目标平台。以下是详细的元数据配置及其应用示例。
元数据配置解析
根据提供的元数据配置,我们需要构建一个POST请求,将数据写入用友BIPAPI接口。以下是主要字段及其含义:
- needCalcLines: 表体行计算标识,默认传
false
,表示不对子表进行二次计算。 - code: 单据编号,需根据系统编码规则配置。
- org: 库存组织,传入id或code。
- accountOrg: 会计主体,与库存组织相同。
- vouchdate: 单据日期,时间戳格式。
- bustype: 交易类型,这里固定为
JKY002
。 - warehouse: 仓库,传入id或code。
- department: 部门,传入id或code。
- operator: 业务员,传入id或code。
- memo: 备注,可填写单据编号等信息。
- _status: 操作标识,这里固定为
Insert
表示新增操作。
子表字段(othInRecords)包括:
- rowno: 行号
- product: 物料,传入id或code
- productsku: 物料SKU
- batchno: 批次号,根据条件判断是否填写
- contactsQuantity, contactsPieces, qty, subQty: 数量相关字段
- unit, stockUnitId: 主计量单位和库存单位
- invExchRate: 库存换算率
- natUnitPrice, natMoney: 单价和金额
- goodsposition: 货位
- isSerialNoManage, isBatchManage, isExpiryDateManage: 管理标识
- memo: 子表备注
- _status: 子表操作标识
孙表字段(othInRecordsSNs)包括:
- id, sn, _status, pubts
示例代码实现
以下是一个示例代码片段,用于构建并发送POST请求,将转换后的数据写入用友BIPAPI接口:
import requests
# 构建请求头
headers = {
'Content-Type': 'application/json'
}
# 构建请求体
payload = {
"needCalcLines": "false",
"code": "QTRK0000001",
"org": "wzyqzn",
"accountOrg": "wzyqzn",
"vouchdate": "2021-03-05",
"bustype": "JKY002",
"warehouse": "ck01",
"department": "dept01",
"operator": "operator_01",
"memo": "QTRK0000001",
"_status": "Insert",
"othInRecords": [
{
"rowno": 1,
"product": "PD0817000001",
"productsku": "PD08170000010004",
"batchno": "",
...
"_status": "Insert"
}
# 更多子表记录...
],
...
}
# 发送POST请求
response = requests.post(
url='https://api.yonyou.com/yonbip/scm/othinrecord/single/save',
headers=headers,
json=payload
)
# 检查响应状态码及内容
if response.status_code == 200:
print("Data successfully written to YonYou BIP API")
else:
print(f"Failed to write data. Status code: {response.status_code}, Response content: {response.content}")
在这个示例中,我们使用Python编程语言,通过requests库发送HTTP POST请求,将预处理后的数据按照元数据配置要求构建成JSON格式,并发送至用友BIPAPI接口。
注意事项
- 确保所有必填字段均已正确填写,如单据编号、库存组织、会计主体等。
- 根据业务需求调整子表和孙表的数据结构,以确保数据的一致性和完整性。
- 实时监控请求响应状态码和内容,以便及时发现并解决可能出现的问题。
通过上述步骤,我们可以高效地完成从源平台到目标平台的数据ETL转换和写入过程,实现不同系统间的数据无缝对接。