吉客云数据集成到金蝶云星空的技术案例分享:其他入库109v2报废入库
在本文中,我们将详细探讨如何通过轻易云数据集成平台实现吉客云(Geek Cloud)与金蝶云星空(Kingdee Cloud)的高效对接,具体案例为"其他入库109v2报废入库"。这个过程不仅需要确保数据准确无误地传递,还需处理分页、限流以及两套系统间的数据格式差异等问题。
确保吉客云数据不漏单
为了保证从吉客云获取的数据完整且无遗漏,我们使用了erp.storage.goodsdocin.v2
接口。该接口支持定时抓取功能,可以设定固定时间间隔自动获取最新数据,同时利用日志记录和实时监控来追踪每次请求的执行情况。一旦检测到任何异常,如网络抖动导致的请求失败,会触发错误重试机制,以确保所有应处理的数据都被正确捕获。
处理分页和限流
在面对大规模的数据量时,吉客云API返回的结果可能会受到分页限制。这就要求我们实现一个健壮的分页机制,通过控制参数页码(pageNum)与每页条数(pageSize),细化请求策略,有效规避因服务器临时性负载高峰导致的响应延迟或失败。此外,为避免触及API调用频率上限而遭受封禁,对每次请求进行频率控制也至关重要,这可以通过设置合理的时间间隔来达成。
数据快速写入金蝶云星空
在成功获取并处理好来自吉客云的大量数据信息后,下一个关键步骤是利用金蝶云星空提供的batchSave
接口,实现批量快速写入。在这个过程中,必须对不同结构化标准下的数据格式进行映射转化,确保字段对应关系明确无误。例如,将原始JSON格式转换为符合XML规范,使得双方系统能够顺利理解和接受彼此的信息。同时,通过使用合适缓冲批量上传策略,大幅提升了整体写入效率,并减少了单笔操作带来的潜在性能瓶颈。
异常处理与错误重试机制
针对在对接过程中可能出现的一系列异常情况,例如网络中断或者服务器宕机等,我们设计了一套完善的异常捕捉与错误重试机制。它包括多级别告警通知、重复尝试逻辑以及自动回滚,从而有效降低由于突发故障给业务流程带来的负面影响。例如,当一次写入操作失败后,会先记录于日志,并依据预设规则再次尝试;如果多次尝试依然未果,则发送告
调用吉客云接口erp.storage.goodsdocin.v2获取并加工数据的技术案例
在数据集成生命周期的第一步,我们需要从源系统获取数据并进行初步处理。本文将深入探讨如何通过调用吉客云接口erp.storage.goodsdocin.v2
来实现这一过程。
接口调用配置
首先,我们需要根据元数据配置来设置接口调用参数。以下是关键参数及其配置说明:
- api:
erp.storage.goodsdocin.v2
- method:
POST
- number:
goodsdocNo
- id:
recId
- pagination:
{"pageSize":10}
- idCheck:
true
请求参数包括分页信息、时间范围、入库类型等,具体配置如下:
{
"pageIndex": 1,
"pageSize": 100,
"goodsDocNo": "",
"gmtModifiedStart": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')",
"gmtModifiedEnd": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')",
"startDate": "",
"endDate": "",
"inouttype": "109",
"sourceBillNo": "",
"warehouseCode": "",
"outBillNo": "",
"vendCode": "",
"billNo": "",
"userName": "",
"selelctFields": "vendCustomerCode,companyName,memo,redStatus,inouttypeName,outBillNo,billNo,logisticCode,companyCode,applyCompanyCode,inouttype,sourceBillNo,applyCompanyId,applyDepartId,applyUserName,companyId,financeBillStatus,vendCustomerId,recId,inOutDate,goodsdocNo,logisticNo,logisticType,gmtModified,warehouseName,warehouseCode,applyUserId,channelId,channelCode,gmtCreate,userName,inOutReason,..."
}
数据请求与清洗
在数据请求阶段,我们通过POST方法向吉客云接口发送上述请求参数。接口返回的数据包含了入库单的详细信息,包括但不限于供应商编号、仓库编号、创建人名称等。
为了确保数据的准确性和完整性,我们需要对返回的数据进行清洗和过滤。例如,过滤掉数量为零的记录:
"condition_bk":[[{"field":"goodsDocDetailList.quantity","logic":"gt","value":"0"}]]
数据转换与写入
在完成数据清洗后,我们需要将数据转换为目标系统所需的格式,并写入目标数据库。这一步通常涉及字段映射和格式转换。例如,将吉客云返回的goodsDocDetailList
中的字段映射到目标系统的相应字段。
异常处理与补偿机制
为了确保数据集成过程的稳定性和可靠性,我们还需要考虑异常处理和补偿机制。元数据配置中提供了一个定时任务(crontab)用于异常情况下的数据补偿:
"omissionRemedy":{
"crontab":"2 */5 * * *",
"takeOverRequest":[
{"field":"gmtModifiedStart","value":"_function from_unixtime(({CURRENT_TIME}-172800),'%Y-%m-%d %H:%i:%s')"},
{"field":"gmtModifiedEnd","value":"_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')}
]
}
该定时任务每5分钟执行一次,确保在异常情况下能够及时重新获取并处理数据。
实践案例
以下是一个实际调用吉客云接口并处理返回数据的示例代码(伪代码):
import requests
import json
from datetime import datetime, timedelta
# 配置请求参数
params = {
"pageIndex": 1,
"pageSize": 100,
# 使用函数计算时间范围
"gmtModifiedStart": (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'),
"gmtModifiedEnd": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
# 固定入库类型为报废入库
"inouttype": '109',
# 返回字段列表
"selelctFields": "...",
}
# 发起POST请求
response = requests.post('https://api.jikexyun.com/erp.storage.goodsdocin.v2', data=json.dumps(params))
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据清洗:过滤数量为零的记录
cleaned_data = [item for item in data['goodsDocDetailList'] if item['quantity'] > 0]
# 数据转换与写入(示例)
for record in cleaned_data:
transformed_record = transform(record) # 自定义转换函数
write_to_target_system(transformed_record) # 自定义写入函数
else:
print(f"Error: {response.status_code}")
以上代码展示了如何调用吉客云接口获取数据,并对返回的数据进行清洗、转换和写入目标系统。
通过上述步骤,我们可以高效地实现从源系统获取并加工数据,为后续的数据集成工作打下坚实基础。
轻易云数据集成平台:ETL转换与金蝶云星空API接口集成
在轻易云数据集成平台中,将源平台的数据转换为目标平台所需的格式是一个关键步骤。本文将详细探讨如何将已经集成的源平台数据进行ETL(提取、转换、加载)处理,转为金蝶云星空API接口能够接收的格式,并最终写入目标平台。
API接口配置
在进行数据转换和写入之前,首先需要了解金蝶云星空API接口的配置。以下是一个典型的API接口配置示例:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{goodsdocNo}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD01_SYS"},
{"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{companyCode}"},
{"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"_function IF( {redStatus}<>9 , \"GENERAL\" , \"RETURN\")"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"_function DATE_FORMAT('{inOutDate} ', '%Y-%m-%d')"},
{"field":"FDEPTID","label":"部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"BM000016"},
{"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"},
{"field":"FOwnerIdHead","label":"货主","type":"","parser":{"name":"","params":""},"value":""},
{"field":"","label":"","type":"","describe":"","value":""}
],
"otherRequest":[
{"field":"","label":"","type":"","describe":"","value":""},
{"field":"","label":"","type":"","describe":"","value":""}
]
}
数据字段解析与转换
在上述配置中,每个字段都有特定的解析和转换规则。例如:
- FBillNo: 单据编号,通过
{goodsdocNo}
占位符从源数据中提取。 - FBillTypeID: 单据类型,通过
ConvertObjectParser
解析器将固定值QTRKD01_SYS
转换为目标系统所需的格式。 - FStockOrgId: 库存组织,同样通过
ConvertObjectParser
解析器将公司代码{companyCode}
进行转换。 - FStockDirect: 库存方向,根据条件判断库存方向,如果
{redStatus}
不等于9,则返回"GENERAL",否则返回"RETURN"。 - FDate: 日期,通过自定义函数将日期格式化为
%Y-%m-%d
。
这些字段的解析和转换确保了数据能够被金蝶云星空API正确接收和处理。
明细信息处理
对于复杂的数据结构,如明细信息,需要使用嵌套数组来表示。例如:
{
"field": "FEntity",
"label": "明细信息",
"type": "array",
"children": [
{
"field": "FMATERIALID",
"label": "物料编码",
"type": "string",
"parser": {
"name": "ConvertObjectParser",
"params": ["FNumber"]
},
"value": "{{goodsDocDetailList.goodsNo}}"
},
{
// ...其他明细字段
}
],
"value": "{goodsDocDetailList}"
}
每个明细字段都有其独特的解析和转换规则,例如物料编码通过ConvertObjectParser
解析器将物料编码转换为目标系统所需的格式。
提交与审核
在完成所有字段的解析和转换后,最后一步是提交并审核数据。这可以通过设置以下参数来实现:
{
"otherRequest":[
{"field":"","label":"","type":"","describe":"","value":""},
{"field":"","label":"","type":"","describe":"","value":""}
]
}
其中,IsAutoSubmitAndAudit
设置为true表示自动提交并审核,确保数据在写入后立即生效。
实践案例
假设我们有一批待入库的数据需要写入金蝶云星空系统。首先,我们需要根据上述配置准备好源数据,并按照配置中的规则进行解析和转换。然后,通过调用金蝶云星空的API接口,将处理后的数据批量保存到目标系统中。
具体操作步骤如下:
- 提取源数据:从源系统中提取待处理的数据。
- 数据清洗与预处理:根据业务需求对数据进行清洗和预处理。
- 字段映射与转换:按照配置中的规则对每个字段进行映射和转换。
- 调用API接口:使用HTTP POST方法调用金蝶云星空的API接口,将处理后的数据批量保存到目标系统中。
通过上述步骤,我们可以高效地将源平台的数据转化为金蝶云星空API能够接收的格式,并成功写入目标平台,实现不同系统间的数据无缝对接。