钉钉数据集成到金蝶云星空的实现方案分享:修改下推的付款单③
在企业内部系统对接与数据整合过程中,实现高效、准确的数据同步是关键。本文将聚焦于一个实际案例,展示如何通过轻易云数据集成平台将钉钉的数据无缝对接到金蝶云星空,实现批量处理和定时抓取。
首先,我们需要使用钉钉提供的API接口topapi/processinstance/get
来获取所需业务数据。在此过程中,确保不漏单是首要任务,这要求我们必须仔细处理分页和限流问题。如果用错误的策略处理API调用,不仅会导致请求失败,还可能错失关键信息。因此,通过适当配置分页参数并结合限流机制,可以有效保障每次请求都能成功返回完整的数据集合。
其次,大量从钉钉获取的数据需要快速、可靠地写入到金蝶云星空中。这一步至关重要,因为它直接影响整个系统的数据一致性和实时性。为此,我们采用了金蝶云星空提供的批量写入API batchSave
。这个API支持一次性写入大量记录,使得我们能够大幅提高操作效率。但是,由于两者在数据格式上存在差异,需要在轻易云平台上进行精确的数据映射与转换,以满足金蝶云星空的特定格式要求。
此外,在实现这套集成方案时,必须考虑异常处理与错误重试机制。当网络波动或接口服务出现短暂故障时,通过设置合理的重试策略可以保证最终所有数据均成功上传至目标系统。另外,为进一步提升透明度及可维护性,全程监控每个环节的数据流动状态,并记录详细日志便显得尤为重要。
这样一套解决方案不仅克服了各种技术难题,还显著提升了整体效率和稳定性。以下章节将详细介绍具体实施步骤,包括如何调用各类API、配置参数以及应对潜在问题的方法。
调用钉钉接口topapi/processinstance/get获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用钉钉接口topapi/processinstance/get
来获取并加工数据。
接口配置与请求参数
首先,我们需要配置调用接口的元数据。以下是元数据配置的详细信息:
{
"api": "topapi/processinstance/get",
"method": "POST",
"number": "business_id",
"id": "单据编号",
"idCheck": true,
"condition": [
[
{
"field": "extend.status",
"logic": "eq",
"value": "COMPLETED"
}
]
],
"request": [
{
"label": "审批流的唯一码",
"field": "process_code",
"type": "string",
"value": "PROC-A48FE992-9F20-4D1D-BDDB-92208230F790"
},
{
"label": "审批实例开始时间。Unix时间戳,单位毫秒。",
"field": "start_time",
"type": "string",
"value": "{LAST_SYNC_TIME}000"
},
{
"label": "审批实例结束时间,Unix时间戳,单位毫秒",
"field": "end_time",
"type": "string",
"value": "{CURRENT_TIME}000"
},
{
"label": "分页参数,每页大小,最多传20。",
"field": "size",
"type": "string",
"value": "20"
},
{
"label": "分页查询的游标,最开始传0,后续传返回参数中的next_cursor值。",
"field": "cursor",
"type": ""
}
]
}
请求参数详解
- process_code: 审批流的唯一码,用于标识具体的审批流程。在本例中,其值为
PROC-A48FE992-9F20-4D1D-BDDB-92208230F790
。 - start_time: 审批实例开始时间,以Unix时间戳表示,并且单位为毫秒。这里使用占位符
{LAST_SYNC_TIME}
来动态替换为上次同步的时间。 - end_time: 审批实例结束时间,同样以Unix时间戳表示,并且单位为毫秒。使用占位符
{CURRENT_TIME}
来动态替换为当前时间。 - size: 分页参数,每页大小,最多传20。
- cursor: 分页查询的游标,初始请求时传0,后续请求时传递上一次响应中的
next_cursor
值。
数据请求与清洗
在发起请求之前,需要确保所有占位符已经被正确替换。例如,将{LAST_SYNC_TIME}
和{CURRENT_TIME}
替换为实际的Unix时间戳。
{
...
{
...
{
field: 'start_time',
value: '1633046400000' // 替换后的实际值
},
{
field: 'end_time',
value: '1633132800000' // 替换后的实际值
}
}
}
发起POST请求后,我们会收到一个包含审批实例信息的JSON响应。接下来,需要对这些数据进行清洗和过滤。根据元数据配置中的条件,我们只保留状态为"COMPLETED"的记录。
数据转换与写入
清洗后的数据需要进行格式转换,以便写入目标系统。在这个过程中,可以根据业务需求对字段进行重命名、类型转换等操作。例如,将钉钉返回的数据字段映射到目标系统所需的字段格式。
{
...
// 钉钉返回的数据
{
process_instance_id: '12345',
status: 'COMPLETED',
...
}
// 转换后的数据格式
{
单据编号: '12345',
状态: '已完成',
...
}
}
最后,将转换后的数据通过轻易云平台写入到目标系统中,从而完成整个数据集成过程。
通过以上步骤,我们实现了从钉钉接口获取审批实例数据,并进行清洗和转换,最终写入目标系统。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。
使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口的技术案例
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。
API接口配置与元数据解析
首先,我们需要理解并配置金蝶云星空API接口。本文以batchSave
API为例,具体配置如下:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"method": "batchArraySave",
"rows": 1,
"rowsKey": "array"
},
"request": [
{
"field": "FID",
"label": "单据编号",
"type": "string",
"describe": "单据编号",
"value": "_findCollection find FID from b91e58dd-b358-385e-a6e9-58ae2b8c37ff where FBillNo={Number}"
},
{
"field": "F_VAOJ_HKSX",
"label": "货款属性",
"type": "string",
"describe": "单据类型",
"value": "_function case '{{货款属性}}' when '成品' then 'CP' else 'FL' end"
},
{
"label": "备注",
"field": "FREMARK",
"type": "string",
"value": "{title}-{{收款人(公司名称)}}-{{备注}}"
},
{
"label": "单据编号",
"field": "FBillNo",
"type": "string",
"value": "{business_id}"
}
],
...
}
数据请求与清洗
在ETL转换过程中,首先需要从源平台请求数据并进行清洗。假设我们从一个数据库中获取付款单信息,这些信息可能包括付款单号、货款属性、收款人等。我们可以通过SQL查询或API请求获取这些原始数据。
SELECT
Number AS 单据编号,
PaymentType AS 货款属性,
CompanyName AS 收款人,
Remark AS 备注
FROM
Payments
WHERE
Status = 'Pending';
数据转换与写入
接下来,我们将这些原始数据根据金蝶云星空API接口的要求进行转换。以下是具体字段的转换逻辑:
-
单据编号 (FID):
- 使用
_findCollection
函数从指定集合中查找对应的FID
。 - 示例值:
_findCollection find FID from b91e58dd-b358-385e-a6e9-58ae2b8c37ff where FBillNo={Number}
- 使用
-
货款属性 (F_VAOJ_HKSX):
- 使用
_function
函数根据条件进行转换。 - 示例值:
_function case '{{货款属性}}' when '成品' then 'CP' else 'FL' end
- 使用
-
备注 (FREMARK):
- 拼接多个字段值形成备注信息。
- 示例值:
{title}-{{收款人(公司名称)}}-{{备注}}
-
单据编号 (FBillNo):
- 将业务ID直接赋值给
FBillNo
字段。 - 示例值:
{business_id}
- 将业务ID直接赋值给
配置其他请求参数
除了上述主要字段外,还需配置其他必要参数以确保API请求成功执行:
"otherRequest":[
{"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"AP_PAYBILL"},
{"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"},
{"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"false"},
{"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"},
{"label":"NeedUpDateFields","field":"NeedUpDateFields","type":"string","value":"F_VAOJ_HKSX,FREMARK,FBillNo","parser":{"name":"StringToArray","params":","}}
]
这些参数确保了我们在调用 batchSave
API 时能够正确执行批量保存操作,并且可以选择是否自动提交和审核,以及是否验证基础资料。
实际操作步骤
- 获取源数据:通过SQL查询或API请求获取待处理的数据。
- 清洗与转换:根据配置元数据对原始数据进行清洗和转换,确保符合目标平台API要求。
- 构建请求:使用轻易云提供的可视化工具或编程方式构建HTTP请求,将转换后的数据发送到金蝶云星空API接口。
- 监控与日志:实时监控数据流动和处理状态,记录日志以便于后续分析和问题排查。
通过以上步骤,我们可以高效地完成从源平台到目标平台的数据ETL转换,并确保数据准确无误地写入金蝶云星空系统。这一过程充分利用了轻易云平台的数据集成能力,实现了不同系统间的数据无缝对接。