### 钉钉数据集成到金蝶云星空的技术案例分享
在企业日常运营中,如何高效地实现系统间的数据对接和无缝集成,是提升业务效率的重要环节。本文将详细探讨通过轻易云数据集成平台,将钉钉报销【项目报销类】的数据快速、可靠地迁移至金蝶付款单【炫涵】中的具体技术方案及实施细节。
首先,我们需要从钉钉获取报销申请相关的数据。利用钉钉提供的API接口`topapi/processinstance/get`可以精准抓取特定实例下的处理流程。在实现过程中,需特别关注如何确保这些数据不遗漏,以及应对接口分页和限流的问题,这样才能保证所有需要迁移的数据都能完整且准确地获取到。
为了将大量获取到的报销数据快速写入至金蝶云星空中,我们使用了其批量保存API`batchSave`。此过程中,不仅要考虑到不同系统间可能存在的数据格式差异,还需仔细设计映射规则,以确保各字段信息能够正确对应。此外,为避免因网络或其他异常情况导致部分数据同步失败,我们还引入了错误重试机制,可以自动检测并重新提交失败的请求,从而提高整体操作的成功率。
在整个集成流程中,一个不可忽视的重要环节是实时监控与日志记录。这不仅帮助我们了解每一步执行状态,也为后续故障排查和性能优化提供了宝贵的信息。例如,在处理过程中的任何异常情况,都能通过日志及时捕获,并触发相应的告警措施,以尽早介入解决问题。
以上概述了轻易云平台下,通过标准化API,实现从钉钉到金蝶这两个系统之间顺利对接的一些核心技术点。在实际操作层面,还有更多细节与技巧,此处略过不表;接下来将具体展示各步骤代码示例及配置详解。
![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image)
### 调用钉钉接口topapi/processinstance/get获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何使用轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`,并对获取的数据进行加工处理。
#### API 接口调用配置
首先,我们需要配置元数据以便正确调用钉钉的API接口。以下是我们在轻易云平台上配置的元数据:
```json
{
"api": "topapi/processinstance/get",
"method": "POST",
"number": "number",
"id": "id",
"idCheck": true,
"condition": [
[
{
"field": "报销类别",
"logic": "eq",
"value": "项目报销类型"
}
]
]
}
```
该配置指定了我们要调用的API接口为`topapi/processinstance/get`,请求方法为POST。同时,我们设定了一个条件,即只获取“报销类别”为“项目报销类型”的数据。
#### 数据请求与清洗
在实际操作中,首先需要通过HTTP POST请求来调用上述API接口。以下是一个示例代码片段,展示了如何发起这个请求:
```python
import requests
url = 'https://oapi.dingtalk.com/topapi/processinstance/get'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}
payload = {
'process_instance_id': 'YOUR_PROCESS_INSTANCE_ID'
}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
```
在这个过程中,我们发送了一个包含`process_instance_id`的POST请求,并接收返回的数据。接下来,需要对返回的数据进行清洗和验证,以确保其符合我们的需求。
#### 数据转换与写入
一旦我们成功获取并清洗了数据,就需要将其转换为目标系统所需的格式,并写入到目标系统中。在本案例中,我们将数据从钉钉转移到金蝶付款单系统。
假设我们从钉钉获取的数据如下:
```json
{
"errcode": 0,
"process_instance": {
"title": "项目报销申请",
"form_component_values": [
{"name": "报销金额", "value": "1000"},
{"name": "报销类别", "value": "项目报销类型"},
{"name": "申请人", "value": "张三"}
]
}
}
```
我们需要提取其中的关键字段,并转换为金蝶付款单系统所需的格式。例如:
```python
processed_data = {
'title': data['process_instance']['title'],
'amount': next(item['value'] for item in data['process_instance']['form_component_values'] if item['name'] == '报销金额'),
'category': next(item['value'] for item in data['process_instance']['form_component_values'] if item['name'] == '报销类别'),
'applicant': next(item['value'] for item in data['process_instance']['form_component_values'] if item['name'] == '申请人')
}
```
然后,将这些处理后的数据写入到金蝶付款单系统:
```python
kingdee_url = 'https://kingdee.api.endpoint/payment'
kingdee_headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_KINGDEE_ACCESS_TOKEN'
}
kingdee_response = requests.post(kingdee_url, headers=kingdee_headers, json=processed_data)
```
通过上述步骤,我们实现了从钉钉到金蝶付款单系统的数据集成。
#### 小结
本文详细介绍了如何在轻易云数据集成平台上配置和调用钉钉API接口`topapi/processinstance/get`,并对获取的数据进行清洗、转换和写入目标系统。通过这种方式,可以高效地实现不同系统间的数据无缝对接,提高业务透明度和效率。
![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台实现钉钉报销数据向金蝶云星空付款单的ETL转换
在数据集成生命周期的第二步中,我们将已经从源平台(钉钉报销系统)获取的数据进行ETL转换,转为目标平台(金蝶云星空API接口)所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。
#### 配置元数据
首先,根据提供的元数据配置,我们需要将钉钉报销系统的数据字段映射到金蝶云星空付款单API接口所需的字段格式。以下是关键字段的映射和处理逻辑:
1. **单据编号(FBillNo)**:
- 来源:`{{extend.business_id}}`
- 类型:字符串
- 描述:单据编号
2. **单据类型(FBillTypeID)**:
- 固定值:`FKDLX04_SYS`
- 类型:字符串
- 描述:单据类型
- 解析器:`ConvertObjectParser`,参数为`FNUMBER`
3. **业务日期(FDATE)**:
- 来源:`{{extend.create_time}}`
- 类型:字符串
- 描述:业务日期
4. **结算组织(FSETTLEORGID)**:
- 来源:`_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}`
- 类型:字符串
- 描述:100
- 解析器:`ConvertObjectParser`,参数为`FNumber`
5. **币别(FCURRENCYID)**:
- 固定值:`PRE001`
- 类型:字符串
- 描述:币别
- 解析器:`ConvertObjectParser`,参数为`FNumber`
6. **往来单位类型(FCONTACTUNITTYPE)**:
- 固定值:`BD_Department`
- 类型:字符串
- 描述:往来单位类型
7. **往来单位(FCONTACTUNIT)**:
- 来源:`{{费用归属部门_关联}}`
- 类型:字符串
- 描述:往来单位
- 解析器:`ConvertObjectParser`,参数为`FNumber`
8. **收款单位类型(FRECTUNITTYPE)**:
- 固定值:`BD_Department`
- 类型:字符串
- 描述:收款单位类型
9. **收款单位(FRECTUNIT)**:
- 来源: `{{费用归属部门_关联}}`
- 类型: 字符串
- 解析器: `ConvertObjectParser`, 参数为 `FNumber`
10. **备注(FREMARK)**:
- 来源: `{title}&{{项目报销类型}}&{{报销明细.费用明细}}`
- 类型: 字符串
- 描述: 备注
11. **付款单明细(FPAYBILLENTRY)**:
包含多个子字段,如下所示:
a) **结算方式(FSETTLETYPEID)**:
* 来源: `{{付款方式}}`
* 类型: 字符串
* 解析器: `ConvertObjectParser`, 参数为 `FNumber`
b) **付款用途(FPURPOSEID)**:
* 固定值: `SFKYT002`
* 类型: 字符串
* 解析器: `ConvertObjectParser`, 参数为 `FNumber`
c) **应付金额(FPAYTOTALAMOUNTFOR)**:
* 来源: `{{报销明细.报销金额(元)}}`
* 类型: 字符串
d) **费用项目(FCOSTID)**:
* 来源: `_findCollection find FNumber from b02f1e34-b500-3075-8b14-08fec61d08a4 where FName={{项目报销类型}}`
* 类型: 字符串
* 解析器: `ConvertObjectParser`, 参数为 `FNumber`
e) **对方银行账号(FOPPOSITEBANKACCOUNT)**:
* 来源: `_function CASE LOCATE('ALIPAY_ACCOUNT','{{收款信息.identityType}}') WHEN 0 THEN '{{收款信息.cardNo}}' ELSE '{{收款信息.logonId}}' END`
* 类型: 字符串
f) **对方账户名称(FOPPOSITECCOUNTNAME)**:
* 来源: `{{收款信息.name}}`
* 类型: 字符串
#### API请求配置
根据上述字段映射,我们构建API请求体。以下是一个示例请求体:
```json
{
"FormId": "AP_PAYBILL",
"Operation": "BatchSave",
"IsAutoSubmitAndAudit": false,
"IsVerifyBaseDataField": false,
"Model": {
"FBillNo": "{{extend.business_id}}",
"FBillTypeID": {"FNUMBER": "FKDLX04_SYS"},
"FDATE": "{{extend.create_time}}",
"FSETTLEORGID": {"FNumber": "_findCollection find Number from ... where Name={{费用归属项目}}"},
"FPAYORGID": {"FNumber": "_findCollection find Number from ... where Name={{费用归属项目}}"},
"FCURRENCYID": {"FNumber": "PRE001"},
"FCONTACTUNITTYPE": "BD_Department",
"FCONTACTUNIT": {"FNumber": "{{费用归属部门_关联}}"},
"FRECTUNITTYPE": "BD_Department",
"FRECTUNIT": {"FNumber": "{{费用归属部门_关联}}"},
"FREMARK": "{title}&{{项目报销类型}}&{{报销明细.费用明细}}",
...
}
}
```
#### 数据转换与写入
在轻易云数据集成平台中,通过配置上述元数据和API请求体,可以实现从钉钉报销系统到金蝶云星空付款单的数据转换与写入。具体步骤如下:
1. 配置ETL任务,将源数据按上述映射规则进行转换。
2. 调用金蝶云星空API接口,将转换后的数据写入目标平台。
3. 实时监控数据流动和处理状态,确保每个环节都清晰可见。
通过这种方式,可以高效地完成异构系统间的数据集成,实现业务流程的自动化和透明化。
![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)