案例分享:聚水潭数据集成到金蝶云星空
在企业数据管理和业务流程优化的过程中,系统间的数据对接与集成尤为重要。本文将详细介绍如何通过配置轻易云数据集成平台,实现聚水潭盘亏单据的自动同步到金蝶云星空,并重点分享相关技术细节。
方案名称:[自动]-盘亏单同步-V1.0
确保无漏单的高效数据抓取
首先,我们需要从聚水潭系统中可靠、定时地抓取库存盘点相关的数据。通过调用 /open/inventory/count/query
接口,可以获取所需的盘亏单信息。在请求过程中,需要处理分页与接口限流问题,以确保所有数据都能准确无误地提取出来。对于接口分页,可以设置每次请求记录条数,并逐页递增查询,从而完整地获取整个结果集。
{
"apiName": "/open/inventory/count/query",
"pageSize": 100,
"pageNumber": 1
}
批量快速写入金蝶云星空
收集完聚水潭的数据后,下一个关键步骤是将这些大批量信息迅速、安全地写入到金蝶云星空。在这一环节,我们使用 batchSave
API 实现批量写入操作。这不但提升了处理速度,还减少了网络通信开销,提高了整体效率。此外,针对两端系统间的数据格式差异,我们利用自定义映射,将聚水潭获取的数据结构转换为符合金蝶云星空要求的格式。
{
"apiName": "batchSave",
"data": [
{
// 转换后的具体字段及值
},
...
]
}
异常处理与错误重试机制
在实际运行中,为保障数据对接过程中的稳定性和可靠性,需要设计异常处理机制。当发生网络抖动或服务暂时不可用等异常情况时,动态配置错误重试策略,以最大化保证任务顺利完成。例如,可以设定出错后延时一定时间并重新尝试提交直到成功或达到最大重试次数:
{
"retryPolicy":{
"maxAttempts":5,
"intervalSeconds":30
}
}
上述措施不仅使得整个对接流程稳健实用,同时在发现潜在问题时也提供良好的日志记录功能,方便调优和排查。
数据监控与实时日志追踪
为了更好地把控全局状态,从源头登陆、API调用、传输再到目标平台落地,每一环节都通过可视化界面进行实时监控。同时,通过详细全面的日志
调用聚水潭接口获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将深入探讨如何通过调用聚水潭接口 /open/inventory/count/query
获取并加工数据。
接口配置与请求参数
首先,我们需要配置元数据以便正确调用聚水潭的API接口。以下是元数据配置的详细信息:
{
"api": "/open/inventory/count/query",
"method": "POST",
"number": "io_id",
"id": "io_id",
"idCheck": true,
"request": [
{
"field": "page_index",
"label": "开始页码",
"type": "string",
"describe": "第几页,从第一页开始,默认1",
"value": "1"
},
{
"field": "page_size",
"label": "每页条数",
"type": "string",
"describe": "每页多少条,默认30,最大50",
"value": "50"
},
{
"field": "modified_begin",
"label": "修改开始时间",
"type": "string",
"describe": "修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空",
"value": "{{LAST_SYNC_TIME|datetime}}"
},
{
"field": "modified_end",
"label": "修改结束时间",
"type": "string",
"describe": "修改结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空",
"value": "{{CURRENT_TIME|datetime}}"
},
{
"field": "io_ids",
"label": "盘点单号",
"type": ":string",
,"describe":"指定盘点单号,多个用逗号分隔,最多50,和时间段不能同时为空"
},
{
,"field":"status","label":"单据状态","type":"string","describe":"单据状态,Confirmed=生效,WaitConfirm待审核,Creating=草拟,Archive=归档,Cancelled=作废","value":"Confirmed"}
],
,"condition_bk":[[{"field":"items.qty","logic":"lt","value:0}]],
,"condition":[[{"field":"items.qty","logic":"lt","value:0}]]
}
请求参数解析
page_index
和page_size
用于分页控制,每次请求返回的数据量由此决定。modified_begin
和modified_end
用于指定数据的修改时间范围,这两个参数必须同时存在且时间间隔不能超过七天。io_ids
用于指定特定的盘点单号,可以一次性查询多个单号。status
用于过滤特定状态的单据,例如只查询已生效的单据。
这些参数确保了我们能够灵活地控制请求的数据范围和数量。
数据获取与清洗
在发送请求后,我们会收到包含盘点信息的数据。为了确保数据质量,需要对返回的数据进行清洗和过滤。根据元数据配置中的条件,我们只保留数量小于零的记录:
"condition":[[{"field":"items.qty","logic":"lt","value:0}]]
这一条件确保了我们只处理那些库存数量异常(即负库存)的记录。
数据转换与写入
在完成数据清洗后,我们需要将数据转换为目标系统所需的格式,并写入目标数据库。这一步通常涉及字段映射、格式转换等操作。例如,将聚水潭返回的数据字段映射到目标系统所需的字段:
{
// 聚水潭返回的数据结构
"_source":{
"_id":"12345",
"_qty":"-10"
},
// 转换后的目标结构
"_target":{
"_inventory_id":"12345",
"_quantity_diff":"-10"
}
}
这种映射关系可以通过轻易云平台提供的可视化工具进行配置,大大简化了复杂的数据转换过程。
实时监控与调试
在整个过程中,实时监控和调试功能至关重要。轻易云平台提供了详细的日志和监控界面,可以帮助我们快速定位和解决问题。例如,如果某个API请求失败,我们可以通过日志查看具体错误信息,并及时调整请求参数或处理逻辑。
通过上述步骤,我们实现了从聚水潭获取并加工盘点数据,为后续的数据处理奠定了基础。这一过程不仅提高了数据处理效率,也确保了数据的一致性和准确性。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例
在数据集成生命周期的第二步,我们将源平台的数据进行ETL(提取、转换、加载)处理,最终将其转化为目标平台——金蝶云星空API接口所能接收的格式并写入。本文将详细介绍如何通过轻易云数据集成平台配置元数据,实现这一过程。
配置元数据
首先,我们需要理解和配置元数据,以便能够正确地将源数据转换为目标格式。以下是我们使用的元数据配置:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{io_id}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PKD"},
{"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '13328244' then '101' when '12612085' then '100' when '13328413' then '100' when '13438465' then '100' else '101' end"},
{"field":"FPickOrgId","label":"领用组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '13328244' then '101' when '12612085' then '100' when '13328413' then '100' else '101' end"},
{"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{io_date}"},
{"field":"FDeptId","label":"领料部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":
"_function case when '{{items.sku_id}}' like 'A%' or '{{items.sku_id}}'
like'M%' or '{{items.sku_id}}'
like
'
X%' or '{{items.sku_id}}'
like
'
D%' or '{{items.sku_id}}'
like
'
T%' then
'
LJ006'
else
'
LJ011'
end"},
{"field":
"
FPickerId"
,"
label":
"
领料人"
,"
type":
"
string"
,"
describe":
"
基础资料"
,"
parser":
{
"
name":
"
ConvertObjectParser"
,"
params":
"
FName"}},
{"field":
"
FOwnerTypeIdHead"
,"
label":
"
货主类型"
,"
type":
"
string"
,"
describe":
"
多类别基础资料列表"
,"
value":
"
BD_OwnerOrg"},
{"field":
FOwnerIdHead","
label":
"货主","
type":
"string","
describe":
"多类别基础资料","
parser":
{"name":
"ConvertObjectParser","
params":
"FNumber"},"
value":
"_function case '{wms_co_id}' when
'
13328244'
then
'
101'
when
'
10404759'
then
'
101'
when
'
13328244'
then
'
101'
when
12612085'
then
'
100'
when
'
13328413'
then
'
100'
when
'
13438465'
then
'
100'
else
'
101'
end"},
{"field":
"FNote","
label":
"备注","
type":
"string","
describe":
"多行文本","
value":
"{remark}"},
{"field":
"FEntity","
label":
"明细信息","
type":
"array","
children":[
{"field":
"FMaterialId","
label":
"物料编码","
type":
"string","
describe":
"基础资料","
parser":{"name":
"ConvertObjectParser",
params:
"FNumber"},
"value":
{{items.sku_id}},
parent:
"
FEntity"},
{"field":
"
FQty",
"
label":
"
实发数量",
"
type":
"
string",
"
describe":
"
数量",
"value":
"_function {{items.qty}} *(-1)",
parent:
"
FEntity"},
{"field":
"
FStockId",
"
label":
"
发货仓库",
"
type":
"
string",
"
describe":
"
基础资料",
"
parser":{"name":
"
ConvertObjectParser",
params:
"
FNumber"},
"value":
"{wms_co_id}",
parent:
"
FEntity"},
{"field":
FAmount,
label:
总成本,
type:
string,
describe:
金额,
parent:
FEntity},
{"field":
Price,
label:
成本价,
type:
string,
describe:
单价,
parent:
Entity},
{"field":
OwnerTypeId,
label:
货主类型,
type:
string,
describe:
多类别基础资料列表,
value:
BD_OwnerOrg,
parent:
Entity},
{"field":
OwnerId,
label:
货主, type: string, describe: 多类别基础资料, parser: {name: ConvertObjectParser, params: FNumber}, value: _function case '{wms_co_id}' when
'
13328244'
then
'
101'
when
'
10404759'
then
'
101'
when
'
13328244'
then
'
101'
when
'
12612085'
then
'
100'
when
'
13328413'
then
'
100'
when
'
13438465'
then
'
100'
else
'
101'
end,
parent:
Entity},
{"field":
EntryNote,
label:
备注,
type:
string,
describe:
多行文本,
parent:
Entity}],
"value"
:
items}],
otherRequest:[
{"field"
:
FormId,
label:
业务对象表单Id,
type:
string,
describe:
必须填写金蝶的表单ID如:PUR_PurchaseOrder,
"value"
:
STK_MisDelivery},
{"field"
:
IsAutoSubmitAndAudit,
label:
提交并审核,
"type"
:
bool,
"value"
:
true},
{"field"
:
IsVerifyBaseDataField,
'label':
验证基础资料,
'type':
bool,
'description':
是否验证所有的基础资料有效性,布尔类,默认false(非必录),
'value':
true},
{'字段':
操作,
'label':
执行的操作,
'type':
字符串,
'value':
保存},
{'标签':
允许负库存,
字段:
InterationFlags,
类型:
字符串,
值:
STK_InvCheckResult}
]}
数据转换与写入流程解析
-
API接口配置
我们使用
batchSave
API接口,通过POST方法提交数据。该接口支持批量保存操作,允许一次性提交多个记录。 -
字段映射与转换
-
FBillNo
(单据编号):直接从源数据中提取{io_id}
。 -
FBillTypeID
(单据类型):固定值PKD
,通过ConvertObjectParser
进行解析。 -
FStockOrgId
和FPickOrgId
(库存组织和领用组织):根据不同的wms_co_id
值进行条件判断,并通过ConvertObjectParser
解析为相应的组织编码。 -
FDate
(日期):直接从源数据中提取{io_date}
。 -
FDeptId
(领料部门):根据物料编码前缀进行条件判断,选择不同的部门编码。
-
-
明细信息处理
-
FMaterialId
(物料编码):从子项中提取物料编码,并通过解析器转换。 -
FQty
(实发数量):将子项中的数量乘以-1,以符合目标系统的要求。
-
-
其他请求参数
-
FormId
: 固定值为业务对象表单ID,如:STK_MisDelivery。 -
IsAutoSubmitAndAudit
: 设置为true,表示自动提交并审核。
-
-
特殊逻辑处理
在某些字段中,如库存组织和领用组织,我们使用了条件判断逻辑来根据不同的输入值返回相应的输出。这些逻辑通过
_function case ... end
表达式实现。
实际应用案例
假设我们有一条来自源系统的数据记录,需要同步到金蝶云星空:
{
"io_id": "12345",
"io_date": "2023-10-01",
"wms_co_id": "13328244",
"remark": "盘亏调整",
"items":[
{
"sku_id": "A001",
"qty": 10
},
{
"sku_id": "B002",
"qty": 5
}
]
}
经过上述元数据配置和转换逻辑处理后,将生成如下符合金蝶云星空API接口要求的数据格式:
{
"FormId": "STK_MisDelivery",
"IsAutoSubmitAndAudit": true,
"IsVerifyBaseDataField": true,
"Operation": "Save",
...
}
总结与注意事项
在实际应用过程中,应确保每个字段的映射和转换逻辑准确无误,同时需要注意API接口调用中的各种异常处理机制,以保证数据同步过程顺利完成。