ETL在金蝶云星空与纷享销客数据集成中的应用

  • 轻易云集成顾问-潘裕

案例分享:金蝶其他应收单对接纷享销客账户支出流水--账户信息未填

在本篇技术文章中,我们将深入探讨一个实际运行的系统对接集成案例。通过本次项目,成功实现了金蝶云星空的数据无缝传输到纷享销客,尤其是针对"金蝶其他应收单"与"纷享销客账户支出流水"的特定场景。

首先,在数据获取方面,我们利用金蝶云星空提供的executeBillQuery API,实现了对“其他应收单”数据的精准抓取。此接口支持分页及限流处理,有效避免了由于大规模数据调用导致的网络拥塞和接口超时问题。同时,我们设定了定时任务机制,确保每隔一定时间段就能可靠地从金蝶云星空获取最新的数据快照。

然后,为解决两端系统间的数据格式差异,我们设计了一套数据转换逻辑。这包括字段映射、类型转换以及必要的数据清洗等步骤。例如,将获取到的数据重新格式化,以符合纷享销客API/cgri/crm/v2/data/create所需的JSON结构,从而顺利完成批量写入操作。

另外,在整个集成过程中,对于可能出现的数据异常情况,例如某条记录字段缺失或值不合法,我们实现了一套完善的错误重试机制和实时监控日志记录系统。一旦检测到接口调用失败,即可根据日志信息及时定位并解决问题,如自动重试或手动干预处理,极大提升了系统稳定性和数据完整度。

通过这些精密设计与实施方法,本次项目不仅充分展示了如何高效且可靠地进行跨平台数据集成,也为未来类似需求提供了一份成熟且值得借鉴的方法论。后续部分将详细介绍具体实施细节与代码示例。 如何对接钉钉API接口

调用源系统金蝶云星空接口executeBillQuery获取并加工数据

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery接口,获取并加工数据,以实现与纷享销客账户支出流水的对接。

接口配置与请求参数

首先,我们需要配置元数据以便正确调用金蝶云星空的executeBillQuery接口。以下是元数据配置的详细内容:

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FBillNo",
  "pagination": {
    "pageSize": 100
  },
  "idCheck": true,
  "request": [
    {"field": "FBillNo", "label": "单据编号", "type": "string", "value": "FBillNo"},
    {"field": "FDATE", "label": "业务日期", "type": "string", "value": "FDATE"},
    {"field": "FAMOUNTFOR", "label": "总金额", "type": "string", "value": "FAMOUNTFOR"},
    {"field": "FCONTACTUNIT_FNumber", "label": "往来单位", "type": "string", "value":"FCONTACTUNIT.FNumber"},
    {"field": "FSALEERID_FName", "label": "销售员",    "type":"string","value":"FSALEERID.FName"},
    {"field":"F_PRSH_Assistant_imu","label":"用途","type":"string","value":"F_PRSH_Assistant_imu.fnumber"}
  ],
  ...
}

请求参数解析

  1. API及方法:使用POST方法调用executeBillQuery API。
  2. 分页设置:每次请求获取100条记录,通过分页参数控制数据量。
  3. 字段映射:定义了多个字段,如单据编号(FBillNo)、业务日期(FDATE)、总金额(FAMOUNTFOR)等,确保从源系统获取到所需的数据。
  4. 过滤条件:通过FilterString字段设置过滤条件,例如 FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and F_PRSH_Assistant_imu.fnumber in ('01'),确保只获取符合条件的数据。

数据请求与清洗

在实际操作中,首先需要构建请求体,并根据元数据配置发送HTTP POST请求至金蝶云星空接口。以下是一个示例请求体:

{
  ...
  {
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...
            {
              ...
              {
                ...
                {
                  ...
                  {
                    ...
                    {
                      ...
                      {
                        ...
                        {
                          ...
                          {
                            ...
                            {
                              ...
                              {
                                ...
                                {
                                  ...
![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image)
### 数据集成平台生命周期的第二步:ETL转换与写入纷享销客API接口

在数据集成过程中,将源平台的数据转换为目标平台能够接收的格式是关键的一步。本文将深入探讨如何使用轻易云数据集成平台,将金蝶其他应收单的数据通过ETL(Extract, Transform, Load)转换后,写入到纷享销客的账户支出流水中。

#### API接口配置解析

在进行数据写入之前,我们需要了解目标平台的API接口配置。以下是针对纷享销客API接口的元数据配置:

```json
{
  "api": "/cgi/crm/v2/data/create",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {
      "field": "data",
      "label": "数据map",
      "type": "object",
      "children": [
        {
          "field": "object_data",
          "label": "表头",
          "type": "object",
          "children": [
            {"field":"dataObjectApiName","label":"对象的api_name","type":"string","value":"AccountTransactionFlowObj"},
            {"field":"name","label":"单号","type":"string","value":"{FBillNo}"},
            {"field":"transaction_date","label":"交易日期","type":"string","value":"_function ROUND((TIMESTAMPDIFF(MICROSECOND, '1970-01-01 00:00:00', STR_TO_DATE('{FDATE}', '%Y-%m-%dT%H:%i:%s')) / 1000),0)"},
            {"field":"customer_id","label":"客户","type":"string","value":"_findCollection find _id from b4342822-5038-3e8f-9bdf-3684ac8a551d where account_no={FCONTACTUNIT_FNumber}"},
            {"field":"owner","label":"负责人","type":"string","value":"_findCollection find user_id from ad096beb-313f-340a-b153-cdf7fdf9b6d7 where name={FSALEERID_FName}","parser":{"name":"StringToArray","params":","},"default":"FSUID_F56CEEA6EDDBFE10681577526DF83326"},
            {"field":"expense_type","label":"支出类型","type":"string","value":"2"},
            {"field":"expense_amount","label":"支出金额","type":"string","value":"{FAMOUNTFOR}"},
            {"field":"fund_account_id","label":"账户--表头没有账户信息,后续需要修改关联语句","type":"string","value":"_function case '{F_PRSH_Assistant_imu}' when '01' then '66b5c4b5537d670001a55d86' end"},
            {"field":"remark","label":"备注","type":"string"},
            {"field":"field_kingdee_document_number__c","label":"金蝶单号","type":"string","value":"{FBillNo}"}
          ]
        }
      ]
    }
  ],
  "otherRequest": [
    {
      "field": "currentOpenUserId",
      "label": "当前操作人userid",
      "type": "string",
      "value": "FSUID_F56CEEA6EDDBFE10681577526DF83326"
    }
  ]
}

数据字段解析与转换

  1. 对象的api_name:

    • dataObjectApiName字段指定了目标对象为AccountTransactionFlowObj
  2. 单号:

    • name字段直接映射金蝶中的FBillNo
  3. 交易日期:

    • transaction_date字段通过SQL函数将时间戳转换为所需格式。使用ROUND((TIMESTAMPDIFF(MICROSECOND, '1970-01-01 00:00:00', STR_TO_DATE('{FDATE}', '%Y-%m-%dT%H:%i:%s')) / 1000),0)实现。
  4. 客户ID:

    • customer_id字段通过查找集合中的客户编号来获取对应的客户ID,使用了 _findCollection find _id from b4342822-5038-3e8f-9bdf-3684ac8a551d where account_no={FCONTACTUNIT_FNumber}
  5. 负责人:

    • owner字段通过查找集合中的负责人名称来获取对应的用户ID,并使用了字符串转数组解析器 StringToArray
  6. 支出类型:

    • expense_type字段固定值为"2"。
  7. 支出金额:

    • expense_amount字段直接映射金蝶中的金额字段 {FAMOUNTFOR}
  8. 账户信息:

    • fund_account_id字段使用条件判断语句 _function case '{F_PRSH_Assistant_imu}' when '01' then '66b5c4b5537d670001a55d86' end 来确定具体账户ID。
  9. 备注与金蝶单号:

    • remarkfield_kingdee_document_number__c 分别映射备注和金蝶单号。

数据请求与写入

在完成上述字段映射和转换后,通过POST方法将数据发送到纷享销客API接口 /cgi/crm/v2/data/create。注意,当前操作人的用户ID也需要包含在请求中,以确保操作权限和记录准确性:

{
  "currentOpenUserId": "{FSUID_F56CEEA6EDDBFE10681577526DF83326}",
  ...
}

实际案例应用

假设我们从金蝶系统获取了一条其他应收单,其关键数据如下:

{
  "FBillNo": "20231001001",
  "FDATE": "2023-10-01T12:00:00",
  ...
}

经过ETL处理后,生成的请求体如下:

{
  "data":{
    ...
    {
      object_data:{
        dataObjectApiName:"AccountTransactionFlowObj",
        name:"20231001001",
        transaction_date:"1696156800000", // 转换后的时间戳
        customer_id:"1234567890", // 查找到的客户ID
        owner:"0987654321", // 查找到的用户ID
        expense_type:"2",
        expense_amount:"1000.00", // 示例金额
        fund_account_id:"66b5c4b5537d670001a55d86", // 条件判断后的账户ID
        remark:"",
        field_kingdee_document_number__c:"20231001001"
      }
    }
    ...
  },
  currentOpenUserId:"FSUID_F56CEEA6EDDBFE10681577526DF83326"
}

通过上述配置和处理,我们成功地将源平台的数据经过ETL转换,写入到了目标平台纷享销客中。这一过程不仅确保了数据的一致性和准确性,也大大提高了业务处理效率。 金蝶与外部系统打通接口

更多系统对接方案