钉钉数据集成到金蝶云星空:实战案例分享
在企业的日常运营中,数据从一个系统无缝对接到另一个系统是确保业务高效运作的重要环节。本文将通过一个具体案例,深入探讨如何使用轻易云数据集成平台,将钉钉的报销【月结贷款】记录集成到金蝶云星空付款单【一臣】模块,实现精准高效的数据同步。
API接口调用及处理
为了实现这一需求,我们首先需要通过钉钉API topapi/processinstance/get 获取待处理的报销记录。在实际操作过程中,需要特别关注如何定时、可靠地抓取这些接口数据,同时应对分页和限流问题。例如,为了避免超过API调用频率而导致请求失败,可以设计并实现重试机制和延迟策略。
# 示例代码片段用于调用钉钉获取报销记录
def fetch_dingtalk_data(api_token, process_code):
    headers = {
        'Authorization': f'Bearer {api_token}',
        'Content-Type': 'application/json'
    }
    payload = {
        "processCode": process_code,
        "startTime": "...",
        "endTime": "...",
    }
    response = requests.post(
        url="https://oapi.dingtalk.com/topapi/processinstance/get", 
        headers=headers, 
        json=payload
    )
    if response.status_code == 200:
         return response.json()
     # 错误处理和重试机制
     retry_count = 3
     while retry_count > 0 and response.status_code != 200:
         time.sleep(5)
         retry_count -= 1
         response = requests.post(url, headers=headers, data=data)
     return None if retry_count == 0 else response.json()数据格式差异的处理与映射
在成功获取到数据后,下一个关键点是解决源(Source)系统与目标(Target)系统之间的数据格式差异。这一步通常包括字段名称、类型以及业务逻辑上的调整。我们针对这两套系统进行了定制化的数据映射,以确保信息能够准确无误地传输。然而,这不仅仅是简单的字段对应,更涉及多层次、多维度的数据转换工作。
# 示例代码片段用于进行数据格式转换和映射:
def map_dingtalk_to_kingdee(dingtalk_data):
    mapped_data = []
    for record in dingtalk_data['result']['process_instance_list']:
          transformed_record = {
              "billNo": record["approval_id"],  
              "amount": float(record["reimbursement_amount"]), 
              ...
          }
          mapped_data.append(transformed_record)
      return mapped_data
d

### 调用钉钉接口topapi/processinstance/get获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用钉钉接口`topapi/processinstance/get`,获取并加工数据,为后续的数据转换与写入打下坚实基础。
#### 接口调用配置
首先,我们需要配置元数据,以便正确调用钉钉的API接口。根据提供的元数据配置,我们可以看到以下关键参数:
- **API路径**: `topapi/processinstance/get`
- **请求方法**: `POST`
- **唯一标识字段**: `id`
- **校验标识字段**: `idCheck`,值为`true`
- **条件过滤**: 仅获取报销类别为“月结货款”的数据
#### 配置示例
在轻易云数据集成平台中,我们需要按照以下步骤进行配置:
1. **定义API路径和请求方法**
   ```json
   {
     "api": "topapi/processinstance/get",
     "method": "POST"
   }- 
设置唯一标识字段和校验 { "id": "id", "idCheck": true }
- 
添加条件过滤 { "condition": [ [ {"field": "报销类别", "logic": "eq", "value": "月结货款"} ] ] }
完整的元数据配置如下:
{
  "api": "topapi/processinstance/get",
  "method": "POST",
  "number": "number",
  "id": "id",
  "idCheck": true,
  "condition": [
    [
      {"field": "报销类别", "logic": "eq", "value": "月结货款"}
    ]
  ]
}数据请求与清洗
在完成元数据配置后,我们可以开始进行数据请求与清洗。以下是具体的技术步骤:
- 
发送请求 使用POST方法向钉钉API发送请求,并附带必要的参数,例如流程实例ID等。 import requests url = 'https://oapi.dingtalk.com/topapi/processinstance/get' headers = {'Content-Type': 'application/json'} payload = { 'process_instance_id': 'your_process_instance_id' } response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: data = response.json() # 处理返回的数据 else: print(f"Error: {response.status_code}")
- 
数据清洗 获取到原始数据后,需要对其进行清洗,以确保符合后续处理的要求。例如,提取出我们关心的字段,并进行格式转换。 def clean_data(raw_data): cleaned_data = [] for item in raw_data['process_instance']['form_component_values']: if item['name'] == '报销类别' and item['value'] == '月结货款': cleaned_data.append({ 'id': raw_data['process_instance']['process_instance_id'], 'number': item['value'] }) return cleaned_data cleaned_data = clean_data(data)
数据转换与写入准备
经过上述步骤,我们已经成功获取并清洗了所需的数据。接下来,可以将这些清洗后的数据传递给下一阶段进行转换与写入。
def transform_and_write(cleaned_data):
    # 假设我们要将这些数据写入金蝶付款单系统
    for record in cleaned_data:
        transformed_record = {
            '付款单号': record['number'],
            '流程实例ID': record['id']
        }
        # 将transformed_record写入目标系统通过以上步骤,我们实现了从调用钉钉接口获取原始数据,到清洗并准备好用于下一步处理的数据流转过程。这不仅提高了业务透明度和效率,也为后续的数据处理打下了坚实基础。

使用轻易云数据集成平台将钉钉报销数据转换并写入金蝶云星空API接口
在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。在本案例中,我们将重点探讨如何使用轻易云数据集成平台,将钉钉报销的月结贷款数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。
配置元数据
为了实现这一目标,我们需要详细配置元数据。以下是关键字段的配置及其解析:
- 
单据编号 (FBillNo) - 类型:string
- 描述:单据编号
- 值:{{extend.business_id}}
- 说明:从源系统获取业务ID作为单据编号。
 
- 
单据类型 (FBillTypeID) - 类型:string
- 描述:单据类型
- 解析器:ConvertObjectParser,参数为FNUMBER
- 值:FKDLX01_SYS
- 说明:固定值,表示付款单类型。
 
- 
业务日期 (FDATE) - 类型:string
- 描述:业务日期
- 值:{{extend.finish_time}}
- 说明:从源系统获取完成时间作为业务日期。
 
- 
结算组织 (FSETTLEORGID) - 类型:string
- 描述:结算组织
- 解析器:ConvertObjectParser,参数为FNumber
- 值:_findCollection find Number from 400f56e7-e846-35e5-9017-c28fd7303fb0 where Name={{费用归属部门}}
- 说明:通过费用归属部门名称查找对应的组织编号。
 
- 
付款组织 (FPAYORGID) - 类型:string
- 描述:付款组织
- 解析器:ConvertObjectParser,参数为FNumber
- 值与结算组织相同。
 
- 
往来单位类型 (FCONTACTUNITTYPE) - 类型:string
- 描述:往来单位类型
- 值:BD_Supplier
 
- 
往来单位 (FCONTACTUNIT) - 类型:string
- 描述:往来单位
- 解析器:ConvertObjectParser,参数为FNumber
- 值: _findCollection find FNumber from e3fb9252-4cce-32f4-bccf-2792bac19e8d where FName={{月结货款明细.供应商名称}}
 
- 
收款单位类型 (FRECTUNITTYPE) - 类型: string
- 描述: 收款单位类型
- 值: BD_Supplier
 
- 
收款单位 (FRECTUNIT) - 类型: string
- 解析器: ConvertObjectParser, 参数为FNumber
- 值与往来单位相同
 
- 
结算币别 (FSETTLECUR) - 类型: string
- 解析器: ConvertObjectParser, 参数为FNUMBER
- 值: PRE001
 
- 
备注 (FREMARK) - 类型: string
- 描述: 备注信息
- 值: {title}-{{项目费用明细.0.客户TextField-K2U5DHAA}}-{{备注}}
 
- 
付款单明细 (FPAYBILLENTRY) 明细字段包含多个子字段,每个子字段的配置如下: a. 结算方式 (FSETTLETYPEID) - 类型: string
- 解析器: ConvertObjectParser, 参数为FNumber
- 值: {{结算方式}}
 b. 付款用途 (FPURPOSEID) - 类型: string
- 解析器: ConvertObjectParser, 参数为FNumber
- 值: SFKYT08_SYS
 c. 应付金额 (FPAYTOTALAMOUNTFOR) - 类型: string
- 值: {{月结货款明细.金额(元)}}
 d. 费用项目 (FCOSTID) - 类型: string
- 解析器: ConvertObjectParser, 参数为FNumber
- 值: _findCollection find FNumber from b02f1e34-b500-3075-8b14-08fec61d08a4 where FName={{项目报销类型}}
 e. 备注 (FCOMMENT) - 类型: string
- 值: {{报销明细.费用明细}}
 f. 对方银行账号 (FOPPOSITEBANKACCOUNT) - 类型: string
- 值:
_function CASE LOCATE('ALIPAY_ACCOUNT','{{收款信息.identityType}}') WHEN 0 THEN '{{收款信息.cardNo}}' ELSE '{{收款信息.logonId}}' END
 g. 对方账户名称 (FOPPOSITECCOUNTNAME) - 类型: string
- 值: {{收款信息.name}}
 
- 
部门 (FDepartment) - 类型:string
- 解析器:ConvertObjectParser, 参数为FNumber
- 值:_findCollection find FNumber from 400f56e7-e846-35e5-9017-c28fd7303fb0 where FName={{费用归属部门}}
 
API请求配置
为了确保数据能够成功写入金蝶云星空,我们还需要配置API请求的其他参数:
- 
API接口: {"api":"batchSave","method":"POST"}
- 
操作方法: {"method":"batchArraySave","rows":1,"rowsKey":"array"}
- 
表单Id: {"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"}
通过上述详细配置,可以确保将钉钉报销的数据成功转换并写入到金蝶云星空平台。每个字段都经过精确映射和转换,以满足目标系统的要求,从而实现无缝的数据集成。
