从钉钉到金蝶:数据集成技术解析与应用

  • 轻易云集成顾问-胡秀丛
### 钉钉报销项目数据集成到金蝶云星空的技术探讨 在企业管理过程中,财务数据的跨系统集成是一个关键环节。在本案例中,我们重点探讨如何将钉钉平台上的【项目报销类】数据高效、可靠地集成到金蝶云星空完成付款单生成。为实现这一目标,我们利用轻易云数据集成平台进行了以下核心配置和优化: 首先,确保从钉钉获取的数据不遗漏是至关重要的一步。通过调用钉钉提供的API接口`topapi/processinstance/get`,可以定期、稳定抓取审批流程中的报销数据。为了应对可能出现的数据分页和限流问题,我们设置了一套具备重试机制的抓取策略,通过监控接口返回状态码和分页信息来动态调整请求参数及频率。 其次,由于批量写入大量的数据到金蝶云星空需要考虑响应速度和资源消耗,在这里我们采用了批量操作方式,将整理后的报销记录通过API `batchSave` 一次性写入到金蝶云星空系统,以提升处理效率。同时,为避免网络不稳定导致的数据写入丢失或重复,还设计了异常处理与错误重试机制。这一过程不仅保障了数据完整性,也极大提高了系统运行的稳定性。 另外一个挑战来自于两者之间的数据格式差异。例如,钉钉中的部分字段需转换以符合金蝶云星空数据库要求。针对这些情况,我们在轻易云平台上进行了详细的数据映射规则定义,并借助其可视化界面,对不同类型字段进行精细化处理,从而确保所有字段准确无误地映射到指定位置。 最后,为进一步提升透明度,我们结合日志模块与实时监控功能,对每一次集成任务进行全程跟踪。从任务启动、执行进度,到是否成功完成,各个阶段均有详细记录,使得整个过程一目了然并便于快速排查潜在问题。 这种无缝衔接方案充分发挥各工具自身优势,实现了业务环节间高效、安全且透明的数据流转,大幅优化企业日常运营效率。因此,这也为其他希望实现多系统互联协同工作的团队提供了一条现实而有效的参考路径。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image) ### 调用钉钉接口topapi/processinstance/get获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`,并对获取的数据进行加工处理。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用钉钉的API接口。根据提供的元数据配置,我们可以看到以下关键字段: - `api`: `topapi/processinstance/get` - `method`: `POST` - `number`: `number` - `id`: `id` - `idCheck`: `true` - `condition`: `[{"field":"报销类别","logic":"eq","value":"项目报销类"}]` 这些字段定义了我们需要从钉钉系统中获取的数据类型和条件。 #### 数据请求与清洗 在轻易云平台上,我们首先需要设置API请求参数。以下是一个典型的API请求配置示例: ```json { "url": "https://oapi.dingtalk.com/topapi/processinstance/get", "method": "POST", "headers": { "Content-Type": "application/json" }, "body": { "process_instance_id": "<your_process_instance_id>" } } ``` 在这个请求中,`process_instance_id`是我们需要传递给API的参数,用于指定具体的流程实例。 接下来,我们需要根据条件过滤数据。在本案例中,我们只关心“报销类别”为“项目报销类”的数据。因此,我们可以在请求返回的数据中进行条件过滤: ```json { "field": "报销类别", "logic": "eq", "value": "项目报销类" } ``` 通过这种方式,我们确保只处理符合条件的数据,从而提高数据处理的效率和准确性。 #### 数据转换与写入 一旦我们成功获取并清洗了所需的数据,下一步就是将这些数据转换为目标系统所需的格式,并写入目标系统。在本案例中,目标系统是金蝶付款单【画纤骨】。 首先,我们需要定义一个映射规则,将钉钉返回的数据字段映射到金蝶付款单所需的字段。例如: ```json { "sourceField1": "targetField1", "sourceField2": "targetField2" } ``` 然后,通过轻易云平台提供的数据转换工具,我们可以将清洗后的数据进行格式转换。例如,将JSON格式的数据转换为XML或CSV格式,以便于写入目标系统。 最后,通过轻易云平台提供的异构系统集成功能,我们可以实现将转换后的数据无缝写入金蝶付款单系统。以下是一个简单的写入配置示例: ```json { "url": "<kingdee_api_endpoint>", "method": "POST", "headers": { "Content-Type": "<appropriate_content_type>" }, "body": { "<mapped_field1>": "<value1>", "<mapped_field2>": "<value2>" } } ``` 通过这种方式,我们完成了从钉钉获取数据、清洗、转换到最终写入金蝶付款单系统的整个过程。 #### 实时监控与管理 为了确保整个过程顺利进行,轻易云平台提供了实时监控和管理功能。通过可视化界面,我们可以实时查看每个环节的数据流动和处理状态,及时发现并解决潜在问题,提高业务透明度和效率。 综上所述,通过合理配置元数据和利用轻易云平台强大的集成功能,我们能够高效地实现从钉钉到金蝶付款单系统的数据集成,为企业业务流程自动化提供有力支持。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/S12.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将钉钉报销数据转换并写入金蝶云星空 在数据集成的生命周期中,将已经集成的源平台数据进行ETL转换是关键的一步。本文将详细探讨如何利用轻易云数据集成平台,将钉钉报销【项目报销类】的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 1. 配置API接口 首先,我们需要配置金蝶云星空的API接口,以便能够接收和处理从钉钉获取的数据。本文使用的是`batchSave` API,采用POST方法进行数据提交。 ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" } } ``` #### 2. 数据字段映射与转换 为了确保数据能够正确写入金蝶云星空,我们需要对钉钉报销数据进行字段映射和转换。以下是主要字段及其配置: - **单据编号 (FBillNo)**: 从`extend.business_id`获取。 - **单据类型 (FBillTypeID)**: 固定值`FKDLX04_SYS`。 - **业务日期 (FDATE)**: 从`extend.create_time`获取。 - **结算组织 (FSETTLEORGID)** 和 **付款组织 (FPAYORGID)**: 根据费用归属项目名称从特定集合中查找Number。 - **币别 (FCURRENCYID)** 和 **结算币别 (FSETTLECUR)**: 固定值`PRE001`。 - **往来单位类型 (FCONTACTUNITTYPE)** 和 **收款单位类型 (FRECTUNITTYPE)**: 固定值`BD_Department`。 - **往来单位 (FCONTACTUNIT)** 和 **收款单位 (FRECTUNIT)**: 从费用归属部门关联中获取,并进行Number转换。 - **备注 (FREMARK)**: 由多个字段组合而成,包括标题、项目报销类型和报销明细。 以下是具体的元数据配置示例: ```json [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{{extend.business_id}}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNUMBER"},"value":"FKDLX04_SYS"}, {"field":"FDATE","label":"业务日期","type":"string","describe":"业务日期","value":"{{extend.create_time}}"}, {"field":"FSETTLEORGID","label":"结算组织","type":"string","describe":"100","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}"}, {"field":"FPAYORGID","label":"付款组织","type":"string","describe":"100","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find Number from 723e2cb6-f80f-3823-8b4f-6e98b9713ba3 where Name={{费用归属项目}}"}, {"field":"FCURRENCYID","label":"币别","type":"string","describe":"币别","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PRE001"}, {"field":"FCONTACTUNITTYPE","label":"往来单位类型","type":"string","describe":"","value": "BD_Department"}, {"field": "FCONTACTUNIT", "label": "往来单位", "type": "string", "describe": "", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "{{费用归属部门_关联}}"}, {"field": "FRECTUNITTYPE", "label": "收款单位类型", "type": "string", "describe":"","value": "BD_Department"}, {"field": "FRECTUNIT", "label": "收款单位", "type": "string", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value" : "{{费用归属部门_关联}}"}, {"field" : FREMARK, label: “备注” , type : “ string ” , describe : “备注” , value : “ {title} & {{项目报销类型}} & {{报销明细.费用明细}} ”}, {"field" : FSETTLECUR, label : “结算币别” , type : “ string ” , describe : “结算币别” , parser :{ name : ConvertObjectParser, params : FNUMBER}, value : PRE001} ] ``` #### 3. 配置付款单明细 对于付款单明细(FPAYBILLENTRY),我们需要配置多个子字段,包括结算方式、付款用途、应付金额等。这些字段同样需要从源数据中提取并进行适当的转换。 ```json [ { "field" :"FPAYBILLENTRY", "label" :"付款单明细", "type" :"array", "children":[ { "field" :" FSETTLETYPEID ", "label" :"结算方式", "type ":" string ", "parser ":{" name ":" ConvertObjectParser "," params ":" FNumber "}," value ":" {{付款方式}} "," parent ":" FPAYBILLENTRY "," mapping ":"629460bc1dc0083d491e60b4 "," mappingDirection ":" positive " }, { " field ":" FPURPOSEID ", " label ":"付款用途", "type ":" string ", "value ":" SFKYT002 "," parent ":" FPAYBILLENTRY "," parser ":{" name ":" ConvertObjectParser "," params ":" FNumber "} }, { " field ": FPAYTOTALAMOUNTFOR, " label ": 应付金额, "type ": string, "value ": {{报销明细.报销金额(元)}}, parent: FPAYBILLENTRY }, { " field ": FCOSTID, label: “费用项目”, "type ": string, parser:{ name: ConvertObjectParser, params:FNumber}, "value ": _findCollection find FNumber from b02f1e34-b500-3075-8b14-08fec61d08a4 where FName={{项目报销类型}}, parent: FPAYBILLENTRY }, { “ field ”:“ FCOMMENT ”,“ label ”:“备注”,“ type ”:“ string ”,“ value ”:“ {{报销明细.费用明细}}”,“ parent ”:“ FPAYBILLENTRY ” }, { parent:"FPAYBILLENTRY", label:"对方银行账号", field:"FOPPOSITEBANKACCOUNT", type:"string", "value": "_function CASE LOCATE('ALIPAY_ACCOUNT','{{收款信息.identityType}}') WHEN0 THEN '{{账号}}' ELSE '{{账号}}' END" }, { parent:"FPAYBILLENTRY", label:"对方账户名称", field:"FOPPOSITECCOUNTNAME", type:"string", "value": {{用户名}} } ] } ] ``` #### 4. 配置其他请求参数 最后,我们还需要配置一些其他必要的请求参数,如表单Id、操作类型等: ```json [ {"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} ] ``` 通过以上步骤,我们完成了将钉钉报销【项目报销类】的数据转换为金蝶云星空API接口所能接收的格式,并成功写入目标平台。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/T7.png~tplv-syqr462i7n-qeasy.image)