技术案例:吉客云数据集成到金蝶云星空的实现
在本次技术案例中,我们将详细探讨如何将吉客云的数据集成到金蝶云星空系统,方案名称为JY-BDS其他出库单。本案例重点介绍通过API接口erp.storage.goodsdocout
从吉客云抓取数据,并使用batchSave
接口批量写入金蝶云星空的具体实现过程。
首先,为了确保整个数据处理链路的高效运转,我们需要解决几个关键性技术问题:
-
定时可靠的数据抓取:我们采用定时器任务,每隔固定时间段(如每小时)调用吉客云接口
erp.storage.goodsdocout
,确保可以及时获取最新的数据。 -
批量数据快速写入:利用轻易平台支持的高吞吐量能力,通过优化传输并行度和分区策略,将大批量的数据快速稳定地写入至金蝶云星空。借助其
batchSave
API 接口,高效完成批量保存操作。 -
分页与限流处理:面对大量数据,必须处理好分页与限流问题,以防止API超时或数据库负载过重。针对这一点,我们设计了合理的分页机制,并引入动态速率限制来调节请求频率。
-
自定义数据转换逻辑:
- 数据格式差异是跨平台集成中的常见挑战之一。在本方案中,通过预先定义好的映射规则,将吉客云输出字段适配为符合金蝶标准的数据结构。
- 利用轻易提供的可视化工具配置转换逻辑,使得开发人员能够直观地管理和调整转换规则,提高开发效率并减少人为错误。
-
监控与异常处理机制:
- 提供实时监控功能,跟踪各个环节的数据流动和状态,一旦发现异常情况立即告警。
- 实现完整的日志记录体系,不仅记录正常操作,还详尽记载任何错误发生的位置及原因,从而增强系统可维护性。
- 针对可能出现的临时网络异常、服务不可用等问题,引入重试机制保证任务执行成功率,并且在多次失败后进行人工干预提醒。
结合以上几个方面,本次集成实践不仅有效提高了工作效率,而且保障整个流程安全、稳定运行。接下来,我们将深入解析每一个技术细节,以及如何一步步实施这些关键步骤。
调用吉客云接口获取并加工数据的技术实现
在轻易云数据集成平台中,生命周期的第一步是调用源系统接口以获取数据。本文将详细探讨如何通过调用吉客云接口erp.storage.goodsdocout
来获取并加工数据,重点介绍元数据配置和具体实现步骤。
元数据配置解析
首先,我们需要理解元数据配置metadata
,它定义了如何调用API以及请求参数的细节:
{
"api": "erp.storage.goodsdocout",
"method": "POST",
"number": "goodsdocNo",
"id": "recId",
"pagination": {"pageSize": 50},
"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":
"201-销售出库 202调拨出库 203 = 盘亏出库 204-其他出库 205采购退货
206生产领料 207组装拆卸出库 208翻新出库 209报废出库
210残次品出库 211倒冲出库 212 包材出库
215维修还厂 231成本调整出库","value":"204"},
{"field":"sourceBillNo","label":"来源单号","type":"string"},
{"field":"warehouseCode","label":"仓库编号","type":"string"},
{"field":"vendCode","label":"供应商编号(往来单位)","type":"string"},
{"field":"billNo","label":"上游单据号(关联单号)","type":"string"},
{"field":"userName","label":"创建人名称","type":"string"}
]
}
调用API获取数据
根据上述元数据配置,我们需要构建一个POST请求来调用吉客云的erp.storage.goodsdocout
接口。以下是具体步骤:
-
构建请求体: 请求体包含分页信息、时间范围、类型等参数。注意,
startDate
和endDate
使用动态变量来表示上次同步时间和当前时间。{ "pageIndex": "{{PAGE_INDEX}}", "pageSize": "{{PAGE_SIZE}}", ... //其他参数 }
-
处理分页: 平台支持分页机制,通过设置每页大小为50条记录,并逐页请求直到没有更多数据为止。
-
发送请求: 使用HTTP POST方法发送请求,并接收响应数据。
-
检查ID重复: 根据配置中的
idCheck: true
,需要对返回的数据进行ID重复性检查,以确保每条记录唯一。
数据清洗与转换
在获取到原始数据后,需要进行清洗和转换,以便后续处理:
-
字段映射: 将API返回的数据字段映射到目标系统所需的字段。例如,将
goodsDocNo
映射为目标系统中的订单编号。 -
格式转换: 对日期、数值等字段进行格式转换,确保符合目标系统要求。例如,将日期格式从YYYY-MM-DD转换为YYYYMMDD。
-
过滤无效数据: 根据业务需求过滤掉无效或不必要的数据。例如,只保留状态为“已完成”的订单记录。
实现代码示例
以下是一个简化的Python代码示例,用于演示如何调用API并处理返回的数据:
import requests
import datetime
# 配置参数
url = 'https://api.jikexun.com/erp.storage.goodsdocout'
headers = {'Content-Type': 'application/json'}
params = {
'pageIndex': '1',
'pageSize': '50',
'startDate': (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d'),
'endDate': datetime.datetime.now().strftime('%Y-%m-%d'),
'inouttype': '204'
}
# 发起POST请求
response = requests.post(url, json=params, headers=headers)
data = response.json()
# 数据清洗与转换
cleaned_data = []
for record in data['records']:
cleaned_record = {
'order_no': record['goodsDocNo'],
'date': record['createTime'].replace('-', ''),
# 更多字段映射...
}
cleaned_data.append(cleaned_record)
# 输出清洗后的数据
print(cleaned_data)
通过上述步骤,我们成功地调用了吉客云接口获取原始数据,并进行了必要的数据清洗和转换,为后续的数据写入和处理做好准备。这一过程展示了轻易云平台在异构系统集成中的强大能力。
轻易云数据集成平台生命周期的第二步:ETL转换与写入金蝶云星空API接口
在数据集成过程中,ETL(Extract, Transform, Load)转换是关键的一环。本文将详细介绍如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。
接口配置与元数据解析
在轻易云数据集成平台中,我们需要配置元数据以便正确调用金蝶云星空的API接口。以下是元数据配置的详细解析:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{
"field": "FBillNo",
"label": "单据编号",
"type": "string",
"describe": "单据编号",
"value": "{goodsdocNo}"
},
{
...
}
],
...
}
数据字段映射与转换
-
单据编号(FBillNo):
- 类型:字符串
- 描述:单据编号
- 映射:
{goodsdocNo}
-
单据类型(FBillTypeID):
- 类型:字符串
- 描述:单据类型
- 转换器:
ConvertObjectParser
- 参数:
FNumber
- 固定值:
QTCKD01_SYS
-
库存组织(FStockOrgId):
- 类型:字符串
- 描述:组织
- 转换器:
ConvertObjectParser
- 参数:
FNumber
- 映射规则:
_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={warehouseCode}
-
日期(FDate):
- 类型:字符串
- 描述:日期
- 转换函数:
_function FROM_UNIXTIME( ( {inOutDate} / 1000 ) ,'%Y-%m-%d %T' )
-
货主(FOwnerIdHead):
- 类型:字符串
- 描述:多类别基础资料
- 转换器:
ConvertObjectParser
- 参数:
FNumber
- 映射:
{companyCode}
-
明细信息(FEntity): 包含多个子字段,如物料编码、零售条形码、实发数量、发货仓库和备注等。
API请求构建
根据上述元数据配置,我们可以构建一个完整的API请求体:
{
"FormId": "STK_MisDelivery",
"IsAutoSubmitAndAudit": true,
"IsVerifyBaseDataField": true,
"Operation": "Save",
...
}
其中,明细信息部分需要特别注意其数组结构和嵌套关系。例如:
"FEntity":[
{
"FMaterialId":"material_001",
...
},
{
...
}
]
数据写入与验证
在完成ETL转换后,将生成的数据通过POST方法发送到金蝶云星空的batchSave
API接口。为了确保数据写入的准确性和完整性,需要进行以下步骤:
-
验证基础资料有效性: 设置
IsVerifyBaseDataField
为true
,确保所有基础资料字段有效。 -
自动提交并审核: 设置
IsAutoSubmitAndAudit
为true
,实现自动提交和审核功能。 -
检查返回结果: 接收API返回结果,检查是否有错误信息或异常情况,并进行相应处理。
通过上述步骤,我们可以高效地将源平台的数据转换并写入到金蝶云星空系统,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。