数据转换与写入金蝶云星空的ETL实战案例

  • 轻易云集成顾问-何语琴

案例分享:金蝶云星空数据集成——收款单-新20231120-临时使用

在本次技术案例中,我们聚焦于如何高效实现“收款单-新20231120-临时使用”方案的系统对接和数据集成。该方案基于轻易云数据集成平台,目标是将业务系统中的收款单数据准确、及时地写入到金蝶云星空。

为满足快速大规模的数据处理需求,我们充分利用了平台支持的大量数据快速写入能力及统一API资产管理功能,通过executeBillQuery接口来获取需要集成的数据,并通过batchSave接口进行批量写入操作,从而确保了每个环节都能顺畅工作,高度契合企业实际应用场景。

关键技术要点

  1. 高吞吐量的数据写入
    通过优化网络连接和并行处理机制,实现大量收款单数据快速、高效地导入至金蝶云星空。这一特性能显著提升整个业务流程的响应速度,确保关键财务信息能够实时更新。

  2. 集中监控与告警系统
    在整个集成过程中,引入完善的监控和告警机制,不仅可以实时跟踪任务状态,还可在出现异常时即时报警,有助于维护人员迅速定位问题并采取措施,保障系统稳定运行。

  3. 自定义转换逻辑适配
    集成过程涉及多种复杂业务规则,为此我们设计了一系列自定义转换逻辑,使得不同结构的数据能够灵活适配。同时,这些逻辑经过严密测试,以确保其对各类边缘情况均有良好兼容性。

  4. 分页与限流策略
    针对executeBillQuery和batchSave接口调用频率较高的问题,我们应用分页查询及限流策略。这样不仅减轻了服务器压力,也有效避免了因过载引起的服务宕机或请求失败,提高整体可靠性。

  5. 异常处理与重试机制 系统不免会遇到各种类型的数据传输错误,为此我们构建了一套健壮的异常处理框架,包括但不限于重试机制。在捕获到接报错信息后,会自动触发重试动作,极大地提高成功率,同时降低人为干预成本。

通过以上几项技术要点,本案例展示了如何借助轻易云平台,在复杂、多变的企业环境中实现精准、高效、可靠的数据对接,并切实解决实际业务挑战。更详细的方法论及实施步骤将在下文进一步展开。 金蝶与WMS系统接口开发配置

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

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery接口来获取收款单数据,并进行初步的数据加工。

配置元数据

首先,我们需要配置元数据,以便正确地调用金蝶云星空的API。以下是关键的元数据配置:

{
  "api": "executeBillQuery",
  "method": "POST",
  "number": "FBillNo",
  "id": "FRECEIVEBILLENTRY_FEntryID",
  "pagination": {
    "pageSize": 500
  },
  "idCheck": true,
  "condition_bk": [
    [
      {
        "field": "field1",
        "logic": "eqv2",
        "value": null
      }
    ]
  ],
  "request": [
    {"field":"FID","label":"实体主键","type":"string","value":"FID"},
    {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
    {"field":"FDOCUMENTSTATUS","label":"单据状态","type":"string","value":"FDOCUMENTSTATUS"},
    {"field":"FCreatorId","label":"创建人","type":"string","value":"FCreatorId"},
    {"field":"FAPPROVERID","label":"审核人","type":"string","value":"FAPPROVERID"},
    {"field":"FCreateDate","label":"创建日期","type":"string","value":"FCreateDate"},
    {"field":"FSETTLEORGID","label":"结算组织","type":"string","value":"FSETTLEORGID.FNumber"},
    {"field":"FApproveDate","label":"审核日期","type":"string","value":"FApproveDate"},
    {"field":"FSALEORGID","label":"销售组织","type":"string","value":"FSALEORGID.FNumber"},
    {"field":"FEXCHANGETYPE","label":"汇率类型","type":"string","value":"FEXCHANGETYPE"}
  ],
  "otherRequest": [
    {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "2000"},
    {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", 
        "value": "{PAGINATION_START_ROW}"},
    {"field": "TopRowCount", "label": "返回总行数", 
        "type": int, 
        "describe": 金蝶的查询分页参数},
    {"field": FilterString, 
        "label" :过滤条件, 
        "type" : string, 
        "describe" : 示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=,"value" : FBillNo='SKD03149266'or\nFBillNo='SKD03149267'or\nFBillNo='SKD03149268'or\nFBillNo='SKD03149269'or\nFBillNo='SKD03149270'or\nFBillNo='SKD03149271'or\nFBillNo='SKD03149272'or\nFBillNo='SKD03190935'or\nFBillNo='SKD03190936'or\nFBillNo='SKD03190937'or\nFBillNo='SKD03190938'or\nFBillNo='SKD03190939'or\nFBillNo='SKD03190940'or\nFBillNo='SKD03190941'or\nFBillNo='SKD03190942'or\nFBillNo='SKD03190943'or\nFBillNo='SKD03190944'or\nFBillNo='SKD03190945'or\nFBillNo='SKD03190946'or\nFBillNo='SKD03190947'or\nFBillNo='SKD03190948'or\nFBillNo='SKD03190949'or\nFBillNo='SKD03190950'or\nFBillNo='SKD03190951'or\nFBillNo='SKD03190952'or\nFBillNo='SKD03190953'or\n'...
   ]
}

调用API获取数据

在配置好元数据后,我们可以通过轻易云平台调用金蝶云星空的executeBillQuery接口。以下是一个示例请求:

{
  "_metadata_":{
      "_api_":{
          "_name_":"",
          "_version_":"",
          "_method_":"",
          "_url_":"",
          "_headers_":[]
      },
      "_pagination_":{
          "_pageSize_":"",
          "_currentPage_":"",
          "_totalPages_":"",
          "_totalRecords_":"",
          "_hasNextPage_":"",
          "_hasPreviousPage_" :""
      }
  },

}

数据清洗与转换

获取到原始数据后,需要对其进行清洗和转换。以下是一些常见的数据清洗与转换操作:

  1. 字段映射:将源系统字段映射到目标系统字段。例如,将FID映射到目标系统中的EntityID
  2. 数据格式转换:将日期格式从YYYY-MM-DD转换为目标系统所需的格式。
  3. 数据过滤:根据业务需求过滤掉不需要的数据。例如,只保留状态为“已审核”的单据。

示例代码

以下是一个示例代码片段,展示如何使用Python进行上述操作:

import requests
import json

# 配置请求头和URL
headers = {'Content-Type': 'application/json'}
url = 'https://api.kingdee.com/executeBillQuery'

# 构建请求体
payload = {
    'FormId': 'AR_RECEIVEBILL',
    'FieldKeys': ','.join([f['value'] for f in metadata['request']]),
    'FilterString': metadata['otherRequest'][3]['value'],
    'Limit': metadata['otherRequest'][0]['value'],
    'StartRow': metadata['otherRequest'][1]['value']
}

# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))

# 检查响应状态码
if response.status_code == 200:
    data = response.json()

    # 数据清洗与转换
    cleaned_data = []

    for record in data:
        cleaned_record = {
            'EntityID': record[0],
            'BillNumber': record[1],
            'DocumentStatus': record[2],
            'CreatorID': record[3],
            'ApproverID': record[4],
            # 更多字段映射...
        }
        cleaned_data.append(cleaned_record)

else:
    print(f'Error: {response.status_code}')

以上代码展示了如何通过HTTP POST请求调用金蝶云星空API,并对返回的数据进行初步清洗和转换。

总结

通过轻易云数据集成平台,我们可以高效地调用金蝶云星空的API,获取所需的业务数据,并进行必要的数据清洗和转换。这一步骤为后续的数据处理和分析奠定了坚实基础。在实际应用中,根据具体业务需求,可能还需要进一步优化和调整元数据配置及清洗逻辑。 如何对接钉钉API接口

数据转换与写入金蝶云星空API接口的技术案例

在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台实现这一过程。

元数据配置解析

元数据配置是实现数据转换与写入的核心。以下是关键字段和操作的详细解析:

  • API接口信息

    {"api":"batchSave","method":"POST","idCheck":true}

    我们使用的是batchSave API,采用POST方法进行数据提交,并启用了ID检查功能。

  • 操作配置

    "operation":{"method":"merge","field":"FBillTypeID,FBillNo,FDATE,FPAYORGI","bodyName":"details","header":["FBillNo","FSETTLEORGID","FDATE","FCURRENCYID","FBillTypeID","FCONTACTUNITTYPE","FCONTACTUNIT","FPAYUNITTYPE","FPAYUNIT","FBUSINESSTYPE","FPAYORGID","FSETTLECUR"],"body":["FSETTLETYPEID","FRECTOTALAMOUNTFOR","FACCOUNTID","FPURPOSEID","FRECEIVEITEMTYPE","FSALEORDERNO"]}

    操作方法为merge,合并字段包括FBillTypeID, FBillNo, FDATE, FPAYORGI。请求体名称为details,头部字段和体部字段分别定义了具体的数据映射关系。

  • 请求字段

    "request":[{"field":"FBillNo",...},{"field":"FSETTLEORGID",...},...]

    请求字段定义了每个字段在请求中的具体配置,包括字段名、标签、类型、描述、值以及解析器等。例如:

    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{FBillNo}"}

    单据编号字段直接从源数据中获取对应值。

数据转换细节

  1. 单据编号(FBillNo)

    • 类型:字符串
    • 描述:单据编号
    • 值:直接从源数据中获取 {FBillNo}
  2. 结算组织(FSETTLEORGID)

    • 类型:字符串
    • 描述:结算组织
    • 值:固定值 114
    • 映射方向:正向映射
    • 映射配置:6355fe20c4a6d536d27cd8dc
    • 转换器:使用 ConvertObjectParser 将值转换为金蝶云星空所需格式
  3. 币别(FCURRENCYID)

    • 类型:字符串
    • 描述:币别
    • 值:固定值 PRE001
    • 转换器:使用 ConvertObjectParser
  4. 业务日期(FDATE)

    • 类型:字符串
    • 描述:业务日期
    • 值:直接从源数据中获取 {FDATE}
  5. 单据类型(FBillTypeID)

    • 类型:字符串
    • 描述:单据类型
    • 值:固定值 SKDLX01_SYS
    • 转换器:使用 ConvertObjectParser
  6. 往来单位类型(FCONTACTUNITTYPE)往来单位(FCONTACTUNIT)

    • 往来单位类型直接从源数据中获取 {FCONTACTUNITTYPE}
    • 往来单位使用固定值 PDD15 并通过 ConvertObjectParser 转换
  7. 付款单位类型(FPAYUNITTYPE)付款单位(FPAYUNIT)

    • 类似于往来单位,分别从源数据中获取 {FPAYUNITTYPE}{FPAYUNIT},并通过相应的转换器处理
  8. 收款单明细(FRECEIVEBILLENTRY): 明细部分包含多个子字段,如结算方式、应收金额、我方银行账号等,每个子字段都有对应的配置。例如:

    {"field":"FACCOUNTID", "label":"我方银行账号", "type":"string", "describe":"我方银行账号", "parser":{"name":"ConvertObjectParser", "params":"FNumber"}, "value":"{FACCOUNTID}", "parent":"FRECEIVEBILLENTRY"}

    我方银行账号通过 ConvertObjectParser 转换,并从源数据中获取 {FACCOUNTID}

请求其他参数

  • 表单Id (FormId) 必须填写金蝶的表单 ID,例如 AR_RECEIVEBILL
  • 执行操作 (Operation) 固定为 BatchSave
  • 提交并审核 (IsAutoSubmitAndAudit) 默认设置为 false,不自动提交审核
  • 验证基础资料 (IsVerifyBaseDataField) 默认设置为 false,不验证基础资料有效性

实际应用案例

假设我们有一条源平台的数据如下:

{
    "FBillNo": "20231120",
    "FDATE": "2023-11-20",
    "FCONTACTUNITTYPE": "Customer",
    "FPAYUNITTYPE": "Company",
    "FPAYUNIT": "XYZ Ltd.",
    ...
}

通过上述元数据配置和ETL过程,我们可以将其成功转换并写入到金蝶云星空系统中。请求体示例如下:

{
    "FormId": "AR_RECEIVEBILL",
    "Operation": "BatchSave",
    "Model": {
        ...
        // 根据元数据配置生成的具体请求内容
        ...
    },
    ...
}

以上就是利用轻易云数据集成平台实现ETL转换并写入金蝶云星空API接口的技术案例,通过详细解析每个步骤和字段配置,实现了高效的数据集成与处理。 金蝶与CRM系统接口开发配置

更多系统对接方案