吉客云与金蝶云星空系统集成案例:JY-BDS采购退货(出库查询)
在复杂的企业资源管理环境中,实现不同业务系统之间的数据无缝对接一直以来都是一项极具挑战性的任务。本文将聚焦于具体的技术实现,分享我们如何通过轻易云数据集成平台有效地完成吉客云与金蝶云星空采购退货(出库查询)系统对接。
在该项目中,我们需要从吉客云获取采购退货相关的数据,并将其快速、安全地写入到金蝶云星空中。这其中,涉及到多个核心技术点,包括高效的数据抓取、实时监控、API调用以及错误处理等关键环节。
首先,通过调用吉客云提供的erp.storage.goodsdocout
API接口定时可靠地抓取相关数据。为了确保数据不漏单和避免分页及限流问题,我们使用了灵活的重试机制和分段式读取策略,大大提高了数据采集过程中的稳定性和效率。同时,这些数据需经过自定义的数据转换逻辑以满足金蝶云星空特有的数据结构要求。
在完成初步数据准备后,需要利用轻易云强大的批量写入能力,将处理后的大量高质量信息快速安全地发送给金蝶云星空。其中,特别关注的是如何使用 batchSave
API 来进行数据存储工作,以及针对可能出现对接异常的问题设置了完善的错误重试机制,以确保最终所有合法合规的数据都能成功进入目标数据库。此外,为全面掌握整个流程运行状况,还配置了集中化监控和告警系统,对每一个操作步骤实行实时跟踪,从而能够及时发现并解决潜在风险。
通过这些严谨且高效的方法,我们不仅实现了两大SaaS平台间顺畅、高性能的数据传输,也为日后类似项目积累下宝贵经验。下面让我们深入探讨具体实施细节。
调用吉客云接口erp.storage.goodsdocout获取并加工数据的技术案例
在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用吉客云接口erp.storage.goodsdocout
获取采购退货出库数据,并对其进行初步加工。
接口调用配置
首先,我们需要配置元数据以便正确调用吉客云的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":"20"},
{"field":"goodsDocNo","label":"出库单号","type":"string"},
{"field":"startDate","label":"创建时间的起始时间","type":"string","value":"_function DATE_FORMAT(DATE_ADD(NOW(),INTERVAL - 30 DAY),'%Y-%m-%d 00:00:00')"},
{"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":"205"},
{"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"}
]
}
请求参数解析
-
分页参数:
pageIndex
: 分页页码,类型为字符串。pageSize
: 分页页数,默认值为20。
-
时间范围:
startDate
: 创建时间的起始时间,默认值为当前日期前30天。endDate
: 创建时间的结束时间,默认值为当前时间。
-
业务参数:
inouttype
: 类型,固定值为205(采购退货)。goodsDocNo
,sourceBillNo
,warehouseCode
,vendCode
,billNo
,userName
:这些字段用于过滤和查询特定条件的数据。
数据请求与清洗
在配置好元数据后,我们可以开始进行数据请求。使用POST方法向erp.storage.goodsdocout
接口发送请求,并传递上述参数。返回的数据需要进行清洗和初步加工,以确保后续的数据转换与写入过程顺利进行。
-
发送请求:
import requests import json url = 'https://api.jikecloud.com/erp.storage.goodsdocout' headers = {'Content-Type': 'application/json'} payload = { 'pageIndex': '1', 'pageSize': '20', 'startDate': '2023-09-01', 'endDate': '2023-09-30', 'inouttype': '205' # 可以根据需要添加其他字段 } response = requests.post(url, headers=headers, data=json.dumps(payload)) if response.status_code == 200: data = response.json() # 对返回的数据进行处理 else: print(f"Error: {response.status_code}")
-
数据清洗: 获取到的数据可能包含冗余信息或格式不一致的问题,需要进行清洗。例如,将日期格式统一、去除无效字段等。
def clean_data(data): cleaned_data = [] for record in data['records']: cleaned_record = { 'goodsDocNo': record.get('goodsDocNo'), 'recId': record.get('recId'), 'createTime': record.get('createTime'), # 添加其他需要的字段 } cleaned_data.append(cleaned_record) return cleaned_data cleaned_data = clean_data(data)
数据转换与写入准备
经过清洗后的数据,可以进一步进行转换和写入操作。这一步通常包括将数据格式转换为目标系统所需的格式,并将其写入目标数据库或系统中。
def transform_and_write(data):
transformed_data = []
for record in data:
transformed_record = {
'document_number': record['goodsDocNo'],
'record_id': record['recId'],
'created_at': record['createTime'],
# 根据目标系统要求进行字段映射和转换
}
transformed_data.append(transformed_record)
# 将转换后的数据写入目标系统,例如数据库或另一个API接口
write_to_target_system(transformed_data)
def write_to_target_system(data):
# 示例:将数据写入数据库
for record in data:
# 数据库插入操作
pass
transform_and_write(cleaned_data)
通过上述步骤,我们完成了从吉客云获取采购退货出库数据并进行初步加工的全过程。在实际应用中,可以根据具体需求进一步优化和扩展这些操作,以满足复杂业务场景下的数据集成需求。
使用轻易云数据集成平台将采购退货数据转换并写入金蝶云星空API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,最终写入目标平台金蝶云星空API接口。本文将详细探讨如何利用轻易云数据集成平台完成这一过程,并分享具体的技术实现细节。
数据转换与写入配置
在本案例中,我们需要将采购退货数据转换为金蝶云星空API接口能够接收的格式,并通过POST请求将其写入目标系统。以下是元数据配置的详细说明:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 10,
"method": "batchArraySave"
},
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{goodsdocNo}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"TLD01_SYS"},
{"field":"FMRTYPE","label":"退料类型","type":"string","describe":"下拉列表","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"B"},
{"field":"FMRMODE","label":"退料方式","type":"string","describe":"下拉列表","value":"A"},
{"field":"FStockOrgId","label":"退料组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={warehouseCode}"},
{"field":"FDate","label":"退料日期","type":"string","describe":"日期","value":"_function FROM_UNIXTIME( ( {inOutDate} / 1000 ) ,'%Y-%m-%d %T' )"},
{"field":"FSupplierID","label":"供应商","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{vendCustomerCode}"},
{"field":"FDESCRIPTION","label":"备注","type": "string", "describe": "多行文本", "value": "{comment}"},
{"field": "FSettleOrgId", "label": "结算组织", "type": "string", "describe": "组织", "parser": {"name": "ConvertObjectParser", "params": "FNumber"},
"value": "_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={warehouseCode}"},
{"field": "FOwnerTypeIdHead", "label": "货主类型",
"type":
"string",
"describe":
"多类别基础资料列表",
"value":
"BD_OwnerOrg"
},
{"field":
"FOwnerIdHead",
"label":
"货主",
"type":
"string",
"describe":
"多类别基础资料",
"parser":
{
"name":
ConvertObjectParser,
params:
FNumber
},
value:
_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={warehouseCode}
},
{
field:
F_JKBillNo,
label:
吉客云单据编号,
type:
string,
value:
goodsdocNo
}
],
otherRequest:[
{
field:
FormId,
label:
业务对象表单Id,
type:
string,
describe:
必须填写金蝶的表单ID如:PUR_PurchaseOrder,
value:
PUR_MRB
},
{
field:IsAutoSubmitAndAudit,label:提交并审核,type:bool,value:true},
{field:IsVerifyBaseDataField,label:验证基础资料,type:bool,describe:是否验证所有的基础资料有效性,布尔类,默认false(非必录),value:true},
{field:Operation,label:执行的操作,type:string,value:Save},
{label:允许负库存,field:InterationFlags,type:string,value:STK_InvCheckResult}
]
}
核心字段解析与处理
-
单据编号(FBillNo):
- 类型:字符串
- 描述:用于唯一标识每个采购退货记录。
- 来源:
{goodsdocNo}
,从源系统获取。
-
单据类型(FBillTypeID):
- 类型:字符串
- 描述:表示单据的类型。
- 转换器:
ConvertObjectParser
,参数为FNumber
。 - 固定值:
TLD01_SYS
。
-
退料类型(FMRTYPE):
- 类型:字符串
- 描述:表示退料的类型。
- 转换器:
ConvertObjectParser
,参数为FNumber
。 - 固定值:
B
。
-
退料日期(FDate):
- 类型:字符串
- 描述:表示退料发生的日期。
- 转换函数:使用UNIX时间戳转换为标准日期格式。
-
供应商(FSupplierID):
- 类型:字符串
- 描述:供应商信息。
- 转换器:
ConvertObjectParser
,参数为FNumber
。 - 来源:
{vendCustomerCode}
。
-
明细信息(FPURMRBENTRY): 明细信息包含多个子字段,如物料编码、实发数量、发货仓库等。这些字段通过嵌套数组形式进行处理,每个子字段都需要进行相应的数据解析和转换。
请求配置与操作
在配置完请求字段后,我们需要设置其他请求参数以确保数据能够正确提交到金蝶云星空API接口:
-
业务对象表单Id(FormId):
- 必须填写金蝶的表单ID,例如PUR_MRB。
-
提交并审核(IsAutoSubmitAndAudit):
- 设置为true,以便自动提交并审核数据。
-
验证基础资料(IsVerifyBaseDataField):
- 设置为true,以确保所有基础资料有效性。
-
执行操作(Operation):
- 设置为Save,表示保存操作。
-
允许负库存(InterationFlags):
- 设置为STK_InvCheckResult,以允许负库存检查结果。
通过上述配置和处理步骤,我们可以确保采购退货数据能够正确地转换并写入到金蝶云星空系统中。此过程不仅提高了数据处理效率,还保证了数据的一致性和准确性。