轻易云助力钉钉数据与金蝶云星空的高效集成

  • 轻易云集成顾问-胡秀丛
### 钉钉数据集成到金蝶云星空案例分享:exp-新报销退款单(付款退款)V4.0 在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,将钉钉的数据高效地集成到金蝶云星空环境中。具体方案名称为“exp-新报销退款单(付款退款)V4.0”。该解决方案旨在实现两大系统间的数据无缝对接,确保从报销申请到最终审核的流程全程透明、高效且可靠。 #### 技术核心:API接口调用与数据处理 为了完成这一目标,我们主要利用了两个关键API接口: 1. **钉钉获取数据的API:** `v1.0/yida/processes/instances` 2. **金蝶云星空写入数据的API:** `batchSave` 首先,在获取钉钉生成的新报销和退款信息时,通过调用`v1.0/yida/processes/instances` API接口,实时抓取相关业务数据。轻易云的平台支持定时、可靠地调度这一请求,有效保证了我们能够及时捕捉到每笔交易记录,从而避免任何漏单现象。 #### 处理分页与限流问题 由于涉及大量数据信息导出和导入操作,必须应对分页和限流的问题。在调用上述API接口过程中,实现自动化分页策略,并结合限流算法,对大批量数据分段处理。这不但提高了吞吐量,还避免了因一次性请求过多引起的网络拥塞或超时情况。 #### 数据转换与质量监控 不同于简单的数据传递,本次集成还需进行复杂的数据转换,以适配特定业务需求及目标系统结构。借助轻易云提供的自定义数据转换逻辑,将从钉钉处获取的数据映射至符合金蝶云星空要求的格式。同时,通过内置的数据质量监控机制,实时检测并校正异常值或格式错误,为后续的批量写入奠定基础。 #### 批量写入与智能告警系统 最后一步是将经过清洗及转化后的数据信息,以较高吞吐量快速批量写入至金蝶云星空,这一过程依赖于`batchSave` API实现。此外,集中式监控和告警系统可随时跟踪任务执行状态,一旦出现性能瓶颈或错误,即刻触发告警并启动重试机制,使得整个流程更加稳定和可靠。 通过上述一系列技术手段,本次项目成功实现了多个异构系统间的信息互通,不仅提升了各环节运营效率,还极大程度上保障了业务连续 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口v1.0/yida/processes/instances获取并加工数据 在数据集成生命周期的第一步中,调用源系统接口是至关重要的一环。本文将详细探讨如何使用轻易云数据集成平台调用钉钉接口`v1.0/yida/processes/instances`来获取并加工数据。 #### API接口配置 我们首先需要配置API接口的元数据。以下是具体的配置细节: - **API路径**: `v1.0/yida/processes/instances` - **请求方法**: `POST` - **关键字段**: - `number`: 标题 - `id`: 流程实例ID (`processInstanceId`) - `idCheck`: `true` #### 请求参数配置 请求参数是API调用成功与否的关键。以下是具体的请求参数及其配置: 1. **分页参数**: - `pageNumber`: 分页页码,类型为字符串,值为`{PAGINATION_START_PAGE}`。 - `pageSize`: 分页大小,类型为字符串,值为`{PAGINATION_PAGE_SIZE}`。 2. **应用信息**: - `appType`: 应用ID,类型为字符串,值为`APP_WTSCMZ1WOOHGIM5N28BQ`。 - `systemToken`: 应用秘钥,类型为字符串,值为`IS866HB1DXJ8ODN3EXSVD750RBTK2X72R8MELL4`。 3. **用户信息**: - `userId`: 用户的userid,类型为字符串,值为`16000443318138909`。 4. **语言设置**: - `language`: 语言设置,类型为字符串,可选值包括`zh_CN`(中文)和`en_US`(英文)。 5. **表单信息**: - `formUuid`: 表单ID,类型为字符串,值为`FORM-0IA66C71A4V9JSAX6MEV45W77QOO2WI78EHGLQ`。 6. **查询条件**(嵌套对象): - `searchFieldJson`: 查询条件对象,包括以下字段: - `selectField_lgkiepju`: 是否退还余额,类型为字符串,值为“是”。 - `radioField_lgk9jn2v`: 费用报销类型,类型为字符串,值为“借款核销”。 - `numberField_lgkiepjv`: 退还余额数目,类型为数组(包含一个浮点数),值为 `[0.0001]`。 - `selectField_lgk9jn35`: 部门过滤。 7. **时间范围**: - 创建时间起始值:`createFromTimeGMT`, 类型为字符串, 值通过函数计算 `_function DATE_FORMAT(DATE_ADD(NOW(),INTERVAL - 25 DAY),'%Y-%m-%d 00:00:00')` - 创建时间终止值:`createToTimeGMT`, 类型为字符串, 值通过函数计算 `{{CURRENT_TIME|datetime}}` 8. **其他参数**: - 流程发起人工号查询:`originatorId`, 类型为字符串。 - 修改时间起始值:`modifiedFromTimeGMT`, 类型为字符串。 - 修改时间终止值:`modifiedToTimeGMT`, 类型为字符串。 - 任务ID:`taskId`, 类型为字符串。 - 实例状态:`instanceStatus`, 类型为字符串, 值设定为“COMPLETED”。 - 流程审批结果:`approvedResult`, 类型为字符串, 值设定为“agree”。 #### 数据请求与清洗 在完成上述元数据配置后,我们可以开始进行数据请求和清洗工作。轻易云平台提供了全透明可视化操作界面,使得每一步的数据处理过程都清晰可见。 1. **发送请求**: 使用POST方法发送请求到钉钉接口,并携带上述配置的所有参数。 2. **接收响应**: 钉钉接口返回的数据将包含多个流程实例的信息。我们需要对这些数据进行初步清洗和过滤,以确保后续处理的准确性。 3. **数据清洗**: 对于返回的数据,根据业务需求进行筛选。例如,只保留审批结果同意(agree)的记录,并且实例状态必须是已完成(COMPLETED)。 #### 数据转换与写入 在完成数据请求与清洗之后,我们需要将处理后的数据转换并写入目标系统。这一步通常包括以下几个步骤: 1. **格式转换**: 将从钉钉获取的数据转换成目标系统所需的格式。例如,将JSON格式的数据转换成CSV或数据库表格式。 2. **字段映射**: 根据目标系统的要求,对字段进行映射和重命名。例如,将钉钉中的字段名转换成目标系统中的对应字段名。 3. **写入操作**: 最后,将转换后的数据写入到目标系统中。这可能涉及到数据库插入操作、文件写入操作等。 通过以上步骤,我们实现了从钉钉获取并加工数据的全过程。在整个过程中,通过轻易云平台的全生命周期管理功能,可以实时监控每个环节的数据流动和处理状态,从而确保业务流程的高效运行。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,最终转为目标平台金蝶云星空API接口所能够接收的格式,并写入目标平台。本文将详细探讨这一过程中涉及的技术细节和操作步骤。 #### 数据转换与写入过程 在轻易云数据集成平台上,我们可以通过配置元数据来实现对源数据的转换和写入。以下是具体的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","value":"{serialNumberField_lgk9jn2s}(FKTK)"}, {"field":"FSETTLEORGID","label":"结算组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{tableField_lgk9jn4p.textField_lgk9jn45}}"}, {"field":"FEXCHANGETYPE","label":"汇率类型","type":"string","value":"HLTX01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FDATE","label":"业务日期","type":"string","value":"_function FROM_UNIXTIME( ( {dateField_lgkieplu} / 1000 ) ,'%Y-%m-%d' )"}, {"field":"FCURRENCYID","label":"币别","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PRE001"}, {"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"FKTKDLX02_SYS"}, {"field":"FBUSINESSTYPE","label":"业务类型","type":"string","value":"3"}, {"field":"FCONTACTUNITTYPE","label":"往来单位类型","type":"string","value":"BD_Empinfo"}, {"field":"FCONTACTUNIT","label":"往来单位","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value": "{textField_llyjeu7o}"}, {"field": "FPAYUNITTYPE", "label": "付款单位类型", "type": "string", "value": "BD_Empinfo"}, {"field": "FPAYUNIT", "label": "付款单位", "type": "string", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{textField_llyjeu7o}"}, {"field": "FDepartment", "label": "部门", "type": "string", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{tableField_lgk9jn4p.textField_lgk9jn46}}" }, {"field": "FPAYORGID", "label": "付款组织", "type": "string", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{textField_lgkieple}" }, {"field": "FSETTLECUR", "label": "结算币别", "type": "string", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "PRE001" }, {"field": "FREMARK", "label": "备注", "type": "strings "value: "{textareaField_lgkiepk7}" }, { “ field”:“ FREFUNDBILLENTRY”,“ label”:“退款单明细”,“ type”:“ array”,“ children”:[ {“ field”:“ FSETTLETYPEID”,“ label”:“结算方式”,“ type”:“ string”,“ parser”:{“ name”:“ ConvertObjectParser”,“ params”:“ FNumber”},“ value”:“ JSFS04_SYS”,“ parent ”:“ FREFUNDBILLENTRY”}, {“ field”:“ FREFUNDAMOUNTFOR”,“ label”:“表体-应退金额”,“ type”:“ string”,“ value”: “ {numberField_lgkiepjv}”,“ parent”: “ FREFUNDBILLENTRY” }, {“ field”:“ FNOTE”,“ label”: “备注”, “ type”: “ string”, “ value”: “ {textareaField_lgkiepk7}”, “ parent”: “ FREFUNDBILLENTRY” }, {“ field”:“ FACCOUNTID”, “ label”: “我方银行账号”, “ type”: “ string”, “ parser”: {“ name”: “ ConvertObjectParser”, “ params”: “ FNumber” },“ value”:“ {selectField_lgkieplh} ”, parent:”“ FREFUNDBILLENTRY ”}, {“ field”:“ FEXPENSEDEPTID_E ”,“ label”:“费用承担部门”,“ type”:“ string”,“ parser”: {“ name”:“ ConvertObjectParser ”,“ params”:“ FNumber ” },“ value”: {{tableField_lgk9jn4p.textField_lgk9jn46}},“ parent”:“ FREFUNDBILLENTRY ” }, {“ field”:“ FPURPOSEID ”,“ label”:“原付款用途”,“ type”:“ string”,“ value”:“ SFKYT23_SYS ”,“ parent ”:”“ FREFUNDBILLENTRY”,解析器:{名称:ConvertObjectParser,参数:FNumber}}, {字段:退款金额,标签:退款金额,类型:字符串,值:numberField_lgkiepjv,父级:退款单明细} { parent:退款单明细,标签:承担部门,字段:F_QKZI_Base1,类型:字符串,值:{{tableField_lgk9jn4p.textField_lgk9jn46}},解析器:{名称:ConvertObjectParser,参数:FNumber} }, { parent:退款单明细,标签:费用项目,字段:F_QKZI_Base,类型:字符串,值:{{tableField_lgk9jn4p.textField_lgk9jn47}},解析器:{名称:ConvertObjectParser,参数:FNumber} } ]}, { label: 往来类型, field: F_QKZI_Assistant, type: string, value: _function case '{selectField_lglw55x0}' when '否' then '\" \"' when '是' then '{selectField_lgkiepl6_id}' end, parser: {name: ConvertObjectParser, params: FNumber } }], 其他请求:[{ field: FormId, label: 业务对象表单Id, type: string, describe: 必须填写金蝶的表单ID如:PUR_PurchaseOrder, value: AP_REFUNDBILL },{ field: 操作, label: 执行的操作, type: string, value: 批量保存 },{ field: IsAutoSubmitAndAudit, label: 提交并审核, type: bool, value: true },{ field: IsVerifyBaseDataField, label: 验证基础资料, type: bool, describe: 是否验证所有的基础资料有效性,布尔类,默认false(非必录), value: false }] } ``` #### 元数据配置详解 1. **API接口与方法** 配置中指定了使用`batchSave` API接口,通过`POST`方法进行数据提交。 2. **字段映射与转换** - **单据编号(FBillNo)**:通过序列号生成。 - **结算组织(FSETTLEORGID)**、**汇率类型(FEXCHANGETYPE)**等字段使用`ConvertObjectParser`进行对象转换。 - **业务日期(FDATE)**通过函数`FROM_UNIXTIME`进行时间戳转换。 - **币别(FCURRENCYID)**等字段直接指定固定值,如`PRE001`。 3. **数组处理** 对于退款单明细(`FREFUNDBILLENTRY`),使用数组结构处理多个子项,并对每个子项进行相应的字段映射和转换。 4. **其他请求参数** 包括表单Id、操作类型、是否自动提交并审核等,这些参数确保了在调用API时能够正确执行相应操作。 #### 实际应用案例 假设我们从源系统获取了一条新的报销退款单记录,需要将其转换并写入金蝶云星空。首先,我们按照上述元数据配置,将源系统的数据字段映射到目标系统所需的格式。然后,通过轻易云的数据集成平台调用金蝶云星空的API接口,将处理后的数据提交到目标系统中。 例如,对于一个具体的报销退款单记录: ```json { "serialNumberField_lgk9jn2s": "12345678", ... } ``` 经过上述配置和处理后,将生成如下格式的数据: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... ![数据集成平台API接口配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)