吉客云数据集成到金蝶云星空案例分享
在企业信息化的管理过程中,如何实现各个系统之间的数据对接与流转是一个重要课题。在本技术案例中,我们将详细探讨如何利用轻易云数据集成平台,实现吉客云中的组装拆卸单无缝集成到金蝶云星空的其他出库单上。
数据获取与处理
首先,通过调用吉客云提供的API erp.storage.goodsdocout.v2
接口来获取需要处理的数据。在这一阶段,为确保不漏单,需要实现定时可靠地抓取吉客云接口的数据,并且实时监控数据流程和状态。通过巧妙设置分页和限流机制,有效解决大批量数据读写的问题。
curl -X POST https://api.jike.com/erp/storage/goodsdocout/v2 \
-H 'Content-Type: application/json' \
-d '{"startTime": "2023-10-01T00:00:00", "endTime": "2023-10-31T23:59:59"}'
数据格式转换及映射
由于吉客云和金蝶云星空在数据格式上的差异,对所抓取到的数据进行适当的字段映射和转换至关重要。例如,将从吉客云获取到的数据格式按照金蝶要求规范化:
{
"sourceSystem": "JikeYun",
"dataList": [
{
"itemCode": "{商品编号}",
"quantity": "{数量}",
...
}
]
}
这里我们使用轻易平台自带的可视化工具,对不同字段进行一一匹配,确保数据信息得以正确传递。这一步骤能保证所有传输过程更加无误、紧密衔接,提高工作效率。
数据写入与异常处理
完成以上步骤后,将整理好的数据调用金蝶API batchSave
进行入库操作。同时引入了错误重试机制,以便在遇见网络故障或其它不可预见问题时自动调度重试任务,从而保证关键业务流程不中断。
curl -X POST https://api.kingdee.com/batchSave \
-H 'Content-Type: application/json' \
-d @transformed_data.json
此外,在整个过程中实施全面日志记录,使得每条操作都具备追溯性,这对于后期运维以及异常情况排查有极大的帮助。最后,通过定制化配置,实现了针对性更强、更精准的数据对接效果。
调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据
在数据集成生命周期的第一步,我们需要调用源系统吉客云的接口erp.storage.goodsdocout.v2
来获取数据,并进行初步的加工处理。本文将详细探讨如何配置和使用该接口,以确保数据的准确性和完整性。
接口配置
根据元数据配置,我们需要向吉客云发送一个POST请求,具体参数如下:
- api:
erp.storage.goodsdocout.v2
- method:
POST
- effect:
QUERY
- number:
goodsdocNo
- id:
recId
- idCheck:
true
请求参数包括分页信息、出入库类型、选择字段以及时间范围等。以下是请求参数的详细配置:
{
"pageIndex": "{PAGINATION_START_PAGE}",
"pageSize": "{PAGINATION_PAGE_SIZE}",
"inouttype": "207",
"selelctFields": "recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerCode,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,applyCompanyId,applyCompanyName,applyCompanyCode,applyDepartId,applyDepartName,departCode,applyUserId,applyUserName,outBillNo,gmtModified,...",
"gmtModifiedStart": "{{LAST_SYNC_TIME|datetime}}",
"gmtModifiedEnd": "{{CURRENT_TIME|datetime}}"
}
其他必要的请求参数包括方法名称、应用编号、版本号、返回格式、时间戳、业务参数和签名等:
{
"method": "erp.storage.goodsdocout.v2",
"appkey": "",
"version": "v1.0",
"contenttype": "json",
"timestamp": "",
"bizcontent": "",
"sign": ""
}
数据请求与清洗
在发送请求后,吉客云会返回一个包含多个字段的数据集。为了确保数据的准确性和一致性,我们需要对返回的数据进行清洗和初步处理。
- 字段映射与转换:根据业务需求,将返回的数据字段映射到目标系统所需的字段。例如,将
goodsdocNo
映射为目标系统中的订单编号。 - 数据过滤:根据特定条件过滤不需要的数据。例如,只保留出入库类型为207(组装拆卸出库)的记录。
- 格式化处理:对日期、金额等字段进行格式化处理,确保符合目标系统的要求。
示例代码
以下是一个示例代码片段,用于发送请求并处理返回的数据:
import requests
import json
from datetime import datetime
# 配置请求参数
payload = {
"pageIndex": 1,
"pageSize": 100,
"inouttype": "207",
"selelctFields": "...", # 列表太长省略
"gmtModifiedStart": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
"gmtModifiedEnd": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
# otherRequest parameters
"method": "erp.storage.goodsdocout.v2",
"appkey": "<your_app_key>",
"version": "v1.0",
"contenttype": "json",
# timestamp and sign should be generated dynamically
}
# 发起POST请求
response = requests.post("https://api.jikexyun.com/erp/storage/goodsdocout/v2", data=json.dumps(payload))
data = response.json()
# 数据清洗与转换
cleaned_data = []
for record in data['result']:
cleaned_record = {
'订单编号': record['goodsdocNo'],
'客户名称': record['vendCustomerName'],
'仓库名称': record['warehouseName'],
'出库日期': record['inOutDate'],
# 更多字段映射...
}
cleaned_data.append(cleaned_record)
# 输出清洗后的数据
print(json.dumps(cleaned_data, indent=4))
通过上述步骤,我们可以成功调用吉客云接口获取所需的数据,并进行初步的清洗和加工,为后续的数据转换与写入做好准备。这一过程不仅提高了数据处理的效率,也确保了数据的一致性和准确性。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成的过程中,将源平台的数据转换为目标平台所能接收的格式是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,将吉客云的组装拆卸单数据转换为金蝶云星空API接口所能接收的其他出库单格式,并最终写入目标平台。
元数据配置解析
在进行ETL转换之前,我们需要理解和配置元数据。以下是元数据配置的详细解析:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{goodsdocNo}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","value":"QTCKD01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","value":"100","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{inOutDate}"},
{"field":"FDeptId","label":"领料部门","type":"string","describe":"基础资料","value":"02","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FNote","label":"备注","type":"string","describe":"多行文本","value":"组装拆卸"},
{
"field": "FEntity",
"label": "明细信息",
"type": "array",
"describe": "111",
"value": "goodsDocDetailList",
"children": [
{"field": "FMaterialId", "label": "物料编码", "type": "string", "value": "{{goodsDocDetailList.goodsNo}}", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}},
{"field": "FQty", "label": "数量", "type": "string", "value": "{{goodsDocDetailList.quantity}}"},
{"field": "FStockId", "label": "仓库", "type": "string", "value": "{{goodsDocDetailList.warehouseCode}}", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}},
{"field": "FEntryNote", "label": "备注", "type": "string", "value": "{{goodsDocDetailList.rowRemark}}"},
{"field": "FOwnerId", "label": "货主", "type": "string", "value": "100", "parser":{"name":
ConvertObjectParser, params: FNumber}},
{"field":
FLot, label: FLot, type: string, value: _function IF('{{goodsDocDetailList.batchNo}}'<>'DEFAULT','{{goodsDocDetailList.batchNo}}',NULL), parser:{name: ConvertObjectParser, params: FNumber}}
]
}
],
otherRequest: [
{ field: FormId, label: FormId, type: string, describe: 必须填写金蝶的表单ID如:PUR_PurchaseOrder, value: STK_MisDelivery },
{ field: IsAutoSubmitAndAudit, label: IsAutoSubmitAndAudit, type: bool, value: true },
{ field: IsVerifyBaseDataField, label: IsVerifyBaseDataField, type: bool, describe: 是否验证所有的基础资料有效性,布尔类,默认false(非必录), value: false },
{ field: Operation, label: Operation, type: string, value: Save }
],
operation:{
rowsKey:"array",
rows:"1",
method:"batchArraySave"
}
}
数据字段解析与转换
-
基本字段映射:
FBillNo
:映射到源数据中的goodsdocNo
,表示单据编号。FBillTypeID
:固定值QTCKD01_SYS
,通过ConvertObjectParser
进行格式转换。FStockOrgId
:固定值100
,同样通过ConvertObjectParser
进行格式转换。FStockDirect
:固定值GENERAL
,表示库存方向。FDate
:映射到源数据中的inOutDate
,表示日期。FDeptId
: 固定值02
, 表示领料部门,通过ConvertObjectParser
.
-
明细信息字段映射:
FEntity
: 明细信息字段是一个数组,包含多个子字段,每个子字段对应源数据中的一个属性。FMaterialId
: 映射到明细列表中的物料编码,通过ConvertObjectParser
.FQty
: 映射到明细列表中的数量.FStockId
: 映射到明细列表中的仓库编码,通过ConvertObjectParser
.FLot
: 批次号,如果批次号不等于 'DEFAULT' 则使用批次号,否则为 NULL.
-
其他请求参数:
FormId
: 固定值为STK_MisDelivery
, 表示表单ID.IsAutoSubmitAndAudit
: 固定值为true
, 表示自动提交和审核.IsVerifyBaseDataField
: 固定值为false
, 表示是否验证所有基础资料有效性.
API接口调用
在完成元数据配置后,我们需要通过API接口将处理后的数据写入金蝶云星空。具体步骤如下:
-
构建请求体: 根据元数据配置构建请求体,将源平台的数据按照目标平台所需格式进行转换。
-
发送HTTP请求: 使用POST方法将构建好的请求体发送至金蝶云星空的API接口。确保设置正确的头部信息,如Content-Type等。
-
处理响应: 接收并处理API响应,根据响应结果判断操作是否成功,并记录日志以便后续追踪和排错。
以下是一个简化的HTTP请求示例:
import requests
import json
url = 'https://api.kingdee.com/batchSave'
headers = {
'Content-Type': 'application/json',
}
data = {
# 根据元数据配置构建的数据结构
}
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
print("Data successfully written to Kingdee Cloud")
else:
print(f"Failed to write data. Status code: {response.status_code}, Response content: {response.content}")
通过以上步骤,我们可以实现从吉客云到金蝶云星空的数据无缝对接,并确保每个环节都透明可控。