聚水潭盘盈单对接金蝶其他入库单ok
数据集成在企业信息系统协同工作中起着关键作用,特别是在涉及多平台的数据传输时。本文分享一个实际案例:如何通过轻易云数据集成平台,将聚水潭的盘盈单精准对接到金蝶云星空的其他入库单。
为了实现这一目标,我们需要确保几个关键技术点:
-
可靠抓取聚水潭接口数据: 使用聚水潭提供的
inventory.count.query
API 定时获取最新的盘盈数据信息。此API允许我们查询特定时间段内所有新增或更新过的数据记录,保证不遗漏任何重要数据。 -
处理分页和限流问题: 由于
inventory.count.query
API 返回的数据可能非常庞大,所以需要进行分页处理,并遵守API调用频率限制,以免触发限流机制。这一步骤至关重要,以确保稳定、高效地获取全部必要数据。 -
大量数据快速写入到金蝶云星空: 获取到完整、正确的盘盈记录后,需要通过金蝶云星空提供的
batchSave
API 批量写入这些数据。批量操作能够显著提升系统性能与运行效率,但同时也要求我们细致检查每一条记录是否符合输入规范。 -
处理数据格式差异: 聚水潭与金蝶云星空之间的数据结构存在差异,我们必须进行详细分析并实施相应转换,使得跨平台传输过程中保持一致性和准确性。例如,对日期格式、数值单位等字段进行标准化转换,是避免潜在错误的重要环节。
-
异常处理及重试机制: 在整个对接流程中,不可避免会遇到网络故障、服务器响应超时等异常情况。因此,设计一个健壮的错误检测及重试机制尤为必要,这样可以保证即使部分上传失败,也能自动重新尝试直至成功,同时有效日志记录便于后续审计跟踪和问题排查。
本文将详细讲解这些步骤中的每个技术要点,展示如何利用高效可靠的方法,实现从聚水潭到金蝶云星空完美无缝的数据集成。
调用聚水潭接口inventory.count.query获取并加工数据的技术案例
在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭的inventory.count.query
接口,获取盘盈单数据并进行初步加工。
接口调用配置
首先,我们需要配置元数据,以便正确调用聚水潭的inventory.count.query
接口。以下是元数据配置的详细说明:
{
"api": "inventory.count.query",
"method": "POST",
"number": "io_id",
"id": "io_id",
"idCheck": true,
"condition": [
[{"field":"items.qty","logic":"gt","value":0}],
[{"field":"batch.qty","logic":"gt","value":0}]
],
"request": [
{"field":"page_index","label":"开始页码","type":"string","describe":"第几页,从第一页开始,默认1"},
{"field":"page_size","label":"每页条数","type":"string","describe":"每页多少条,默认30,最大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"}
]
}
请求参数解析
- page_index: 开始页码,从第一页开始。
- page_size: 每页条数,默认30条记录。
- modified_begin: 修改开始时间,用于限定查询范围。
- modified_end: 修改结束时间,与修改开始时间共同使用。
- io_ids: 指定盘点单号,可以指定多个,用逗号分隔。
- status: 单据状态,此处我们只查询已生效的单据(Confirmed)。
数据请求与清洗
在调用接口时,我们需要构建请求体,并根据元数据中的条件对返回的数据进行初步清洗。以下是一个示例请求体:
{
"page_index": "1",
"page_size": "30",
"modified_begin": "{{LAST_SYNC_TIME|datetime}}",
"modified_end": "{{CURRENT_TIME|datetime}}",
"status": "Confirmed"
}
通过POST方法发送请求后,我们会收到一组盘盈单数据。为了确保数据质量,我们需要根据条件对数据进行过滤。例如,只保留items.qty
和batch.qty
大于0的记录。
数据转换与写入
在清洗完毕后,需要将数据转换为目标系统所需的格式,并写入目标系统。在这个案例中,我们假设目标系统为金蝶其他入库单。以下是一个简单的数据转换示例:
def transform_data(data):
transformed_data = []
for record in data:
if record['items']['qty'] > 0 and record['batch']['qty'] > 0:
transformed_record = {
'entry_id': record['io_id'],
'product_code': record['items']['product_code'],
'quantity': record['items']['qty'],
'batch_number': record['batch']['batch_no']
}
transformed_data.append(transformed_record)
return transformed_data
通过上述代码,我们将聚水潭的数据转换为金蝶系统所需的格式。
实践中的注意事项
- 分页处理:由于每次请求只能返回有限数量的数据,需要实现分页逻辑以获取所有符合条件的数据。
- 异常处理:在实际操作中,需要处理可能出现的网络异常、接口错误等情况,以确保数据集成过程的稳定性。
- 实时监控:利用轻易云平台提供的实时监控功能,可以及时发现并解决数据流动中的问题,提高整体效率。
通过以上步骤,我们成功地调用了聚水潭的inventory.count.query
接口,并对获取的数据进行了初步加工,为后续的数据转换与写入打下了坚实基础。这一过程展示了轻易云平台在异构系统集成中的强大能力和灵活性。
使用轻易云数据集成平台进行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":"PYQTRKD"},
{"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{io_date}"},
{"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"},
{"field":"FOwnerIdHead","label":"货主","type":"string","describe":"多类别基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":
"_findCollection find F_HZ_OrgId_Fnumber from 0cba013f-c6e7-3826-bf89-bb0b11e996e1 where FNumber={{items.sku_id}}"},
{"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": "FSTOCKID",
"label": "收货仓库",
"type": "string",
"describe": "基础资料",
"parser":{"name":
"ConvertObjectParser",
"params":
"FNumber"},
"value":
"{wms_co_id}",
parent: "
FEntity"
},
{"field":
"FSTOCKSTATUSID",
label: "
库存状态",
type: "
string",
value:
KCZT01_SYS,
parser:{
name:
ConvertObjectParser,
params:
FNumber
}
},
{"field":
FLOT,
label:
批号,
type:
string,
describe:
批次,
value:
{{items.batch_id}},
parent:
FEntity,
parser:{
name:
ConvertObjectParser,
params:
FNumber
}
},
{"field":
FPRODUCEDATE,
label:
生产日期,
type:
string,
describe:
批次,
value:
{{items.product_date}},
parent:
FEntity
},
{"field":
FEXPIRYDATE,
label:
有效期至,
type:
string,
describe:
批次,
value:
{{items.expiration_date}},
parent:"
FEntity
},
{"
field:FQty,label:实收数量,type:string,describe:数量,value:{{items.qty}},parent:FEntity},
{"
field:FPrice,label:成本价,type:string,describe:单价,parent:FEntity},
{"
field:FEntryNote,label:备注,type:string,describe:多行文本,parent:FEntity},
{"
field:FOWNERTYPEID,label:货主类型,type:string,value:BD_OwnerOrg},
{"
field:FOWNERID,label:货主,type:string,value:_findCollection find F_HZ_OrgId_Fnumber from 0cba013f-c6e7-3826-bf89-bb0b11e996e1 where FNumber={{items.sku_id}},parser:{name:ConvertObjectParser,params:FNumber}}
],
value:"items"
}
],
otherRequest:[
{"
field:"FormId,label:"业务对象表单Id,type:"string,describe:"必须填写金蝶的表单ID如:PUR_PurchaseOrder,value:"STK_MISCELLANEOUS},
{"
field:IsVerifyBaseDataField,label:"验证基础资料,type:"bool,describe:"是否验证所有的基础资料有效性,布尔类,默认false(非必录),value:true},
{"
field:Operation,label:"执行的操作,type:"string,value:"Save},
{"
field:IsAutoSubmitAndAudit,label:"提交并审核,type:"bool,value:false}
]
}
技术实现步骤
-
API接口调用配置:
api
字段指定了调用的API接口为batchSave
。method
字段指定了HTTP请求方法为POST
。idCheck
字段设置为true
,确保每条记录都有唯一标识。
-
操作参数设置:
operation
字段中定义了批量保存操作,使用了batchArraySave
方法。rowsKey
和rows
分别指定了数组键和行数。
-
请求参数映射:
- 请求参数通过
request
数组进行定义,每个字段都包含具体的信息,如字段名称、标签、类型、描述和取值方式等。 - 特别注意的是部分字段使用了解析器(如:
ConvertObjectParser
),用于将特定格式的数据转换为目标系统可识别的格式。例如:{ "field": "FBillTypeID", label:"单据类型", type:"string", describe:"单据类型", parser:{"name:"ConvertObjectParser",params:"FNumber"}, value:"PYQTRKD" }
- 请求参数通过
-
嵌套数组处理:
- 对于复杂的数据结构,如明细信息(
FEntity
),使用嵌套数组来表示。每个子项也包含类似的字段配置,并且可以继续嵌套其他子项。
- 对于复杂的数据结构,如明细信息(
-
其他请求参数:
otherRequest
数组中定义了一些额外的请求参数,如业务对象表单ID(FormId)、是否验证基础资料(IsVerifyBaseDataField)、执行操作(Operation)以及是否自动提交并审核(IsAutoSubmitAndAudit)。
数据转换与写入示例
假设我们有以下源数据需要转换并写入金蝶云星空:
{
io_id: 'PI20231001',
io_date: '2023-10-01',
remark: '盘盈入库',
items:[
{
sku_id:'SKU12345',
batch_id:'BATCH001',
product_date:'2023-09-15',
expiration_date:'2024-09-15',
qty:'100'
}
],
wms_co_id:'WH001'
}
根据上述元数据配置,该源数据将被转换为以下格式:
{
FormId: 'STK_MISCELLANEOUS',
IsVerifyBaseDataField:true,
Operation:'Save',
IsAutoSubmitAndAudit:false,
Model:{
FBillNo:'PI20231001',
FBillTypeID:{'FNumber':'PYQTRKD'},
FStockOrgId:{'FNumber':'100'},
FStockDirect:'GENERAL',
FDate:'2023-10-01',
FOwnerTypeIdHead:'BD_OwnerOrg',
FOwnerIdHead:{'FNumber':'_findCollection find F_HZ_OrgId_Fnumber from 0cba013f-c6e7-3826-bf89-bb0b11e996e1 where FNumber=SKU12345'},
NOTE:'盘盈入库',
Entity:[
{
FMATERIALID:{'FNumber':'SKU12345'},
STOCKID:{'FNumber':'WH001'},
STOCKSTATUSID:{'FNumber':'KCZT01_SYS'},
LOT:{'FNumber':'BATCH001'},
PRODUCEDATE:'2023-09-15',
EXPIRYDATE:'2024-09-15',
Qty:'100'
}
]
}
}
通过轻易云的数据集成平台,这些转换后的数据将通过API接口发送到金蝶云星空,实现无缝对接和写入。