基于轻易云平台的ETL应用实例:金蝶云销售数据写入技巧

  • 轻易云集成顾问-杨嫦

金蝶云星空数据集成到轻易云集成平台——案例分享:[联动]-金蝶销售出库单查询

随着企业数字化转型的不断深入,各部门系统间的数据交互需求日益增多。在这一背景下,如何实现稳定、公正且高效的数据对接成为了各大企业亟待解决的问题。在本文中,我们将详细探讨一个真实运行中的技术方案——通过轻易云集成平台,实现金蝶云星空销售出库单数据的实时、高效同步。该方案的具体名称为:[联动]-金蝶销售出库单查询。

首先,为了确保从金蝶云星空系统获取的数据准确无误,我们调用其提供的executeBillQuery接口来进行销售出库单数据的抓取。这一步骤不仅涉及到接口调用和分页处理,同时需要注意限流机制,以避免频繁请求导致API服务端过载。此外,为应对潜在的数据格式差异问题,我们通过定制化的数据映射功能,将二者之间不同结构的数据转换为相同格式并进行后续操作。

接下来,在数据写入阶段,通过轻易云集成平台提供的写入API,把从金蝶云星空获取到的大量销售信息快速、批量地导入至目标数据库。为了增强可靠性,该过程中还引入了异常处理与错误重试机制,一旦出现网络延迟或其他不可预见的问题,可自动重新尝试连接并恢复传输,从而保障整个流程的不间断性。

最后,整个过程将在透明可视化的平台上监控,每个环节、每条数据流都能实时查看和跟踪。不仅有效提升业务透明度,还使得问题定位与解决变得更加直观迅速。

在此案例开头部分我们重点讲述了应用于[联动]-金蝶销售出库单查询项目中的关键技术点,其核心内容包括:如何利用executeBillQuery接口高效获取源数据、大规模快速写入、以及针对分页与限流等技术挑战提出解决方案。在接下来的部分中,我们会更详细地描述具体实施步骤及代码示例,以便读者能够参考借鉴实际操作经验。 泛微OA与ERP系统接口开发配置

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

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

接口配置与调用

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

{
  "api": "executeBillQuery",
  "effect": "QUERY",
  "method": "POST",
  "number": "FBillNo",
  "id": "FEntity_FENTRYID",
  "name": "FBillNo",
  "idCheck": true,
  "request": [
    {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","describe":"单据类型","value":"FBillTypeID.FNumber"},
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"FDate"},
    {"field":"FSaleOrgId_FNumber","label":"销售组织","type":"string","describe":"销售组织","value":"FSaleOrgId.FNumber"},
    {"field":"FCustomerID_FNumber","label":"客户编码","type":"string","describe":"客户编码","value":"FCustomerID.F.Number"},
    {"field":"FCustomerID_FName","label":"客户名称","type":"string","describe":"客户名称","value":"FCustomerID.FName"},
    {"field":"FStockOrgId_FNumber","label":"发货组织","type":"string","describe":"发货组织","value":"FStockOrgId.FNumber"},
    {"field":"FMaterialID_FNumber","label":"物料编码","type":"string","describe":"物料编码","value":"FMaterialID.F.Number"},
    {"field": "FMustQty", "label": "应发数量", "type": "string", "describe": "应发数量", "value": "FMustQty"},
    {"field": "FRealQty", "label": "实发数量", "type": "string", "describe": "实发数量", "value": "FRealQty"},
    {"field": "FPrice", "label": "单价", "type": "string", "describe": "单价", "value": "FPrice"},
    {"field": “FTaxPrice”, “label”: “含税单价”, “type”: “string”, “describe”: “含税单价”, “value”: “FTaxPrice”},
    {"field”: “FIsFree”, “label”: “是否赠品”, “type”: “string”, “describe”: “是否赠品”, “value”: “FIsFree”},
    {"field”: “FLot”, “label”: “批号”, “type”: “string”, “describe”: “批号”, “value”:“FLot”},
    {"field”:“FProduceDate”,“label”:“生产日期”,“type”:“string”,“describe”:”生产日期”,”value”:” FProduceDate”},
    {“field”:” FExpiryDate”,” label”:”有效期至”,” type”:” string”,” describe”:”有效期至”,” value”:” FExpiryDate”},
    {“ field ”:” FEntryTaxRate ”,” label ”:”税率%”,” type ”:” string ”,” describe ”:”税率%”,” value ”:” FEntryTaxRate ”},
    {“ field ”:” FEntryTaxAmount ”,” label ”:”税额”," type ":" string "," describe ":"税额"," value ":" FEntryTaxAmount "},
    {“ field ”:" FAmount "," label ":"金额"," type ":" string "," describe ":"金额"," value ":" FAmount "},
    {“ field ”:“ FAllAmount”,“ label ”:“价税合计”,“ type ”:“ string”,“ describe ”:“价税合计”,“ value ”:“ FAllAmount "},
    {“ field ”:“ FStockID_FNumber”,“ label ”:“仓库”,“ type ”:“ string”,“ describe :”“仓库”,“ value :”“ FStockID.F.Number "},
    {“ field :”“ FEntrynote”,“ label :”“备注”,“ type :”“ string”,“ describe :”“备注”,“ value :”“ FEntrynote "},
    {“ field :”“ FSrcType”,“ label :”“源单类型”,“ type :”“ string”,“ describe :”“源单类型”,“ value :”“ FSrcType "},
    {“ field :”“ FSrcBillNo”,“ label :”“源单编号”,“ type :”“ string”,“ describe :”“源单编号”,“ value :”“ FSrcBillNo "},
    {“ field :”“ FSoorDerno”,“ label :”“订单单号”,“ type :”“ string”,“ describe :”“订单单号”," value ":" FSoorDerno "},
    {“ field :"" FDiscountRate "," label ":"折扣率% "," type ":" string "," describe ":"折扣率% "," value ":" FDiscountRate "},
    {“ field :"" FDiscount "," label ":"折扣额 "," type ":" string "," describe ":"折扣额 "," value ":"" FDiscount "},
    {“ field :"" FPriceDiscount "," label ":"单价折扣 "," type ":"" string "," describe ":"" single price discount ", "" value ": "" PriceDiscount ""} ,
    {""字段"": ""材料名称"", ""标签"": ""材料名称"", ""类型"": ""字符串"", ""描述"": ""材料名称"", ""值"": ""材料名称""} ,
    {""字段"": ""FID"", ""标签"": ""主键 ID"", ""类型"": ""字符串"", ""描述"": ""主键 ID"", ""值"": ""FID""} ,
    {""字段"": ""实体 _ENTRYID "", 标签:"明细 id",类型:"字符串",描述:"明细 id",值:"实体_ENTRYID"} ,
    {"字段":"_TLWD_文本",标签:"平台订单号",类型:"字符串",值:"_TLWD_文本"}
 ],
其他请求:[{
   字段:限制,标签:最大行数,类型:字符串,描述:金蝶的查询分页参数,值:"{PAGINATION_PAGE_SIZE}" },
   字段: StartRow, 标签: 开始行索引, 类型: 字符串, 描述: 金蝶的查询分页参数, 值: "{PAGINATION_START_ROW}" },
   字段: TopRowCount, 标签: 返回总行数, 类型: 字符串, 描述: 金蝶的查询分页参数 },
   字段: FilterString, 标签: 过滤条件, 类型: 字符串, 描述: 示例写法 FSupplierId.F.Number = 'VEN00010' and ApproveDate>=," 值:" ApproveDate>='{{LAST_SYNC_TIME|datetime}}'" },
   字段: FieldKeys, 标签: 需查询的字段 key 集合, 类型: 字符串, 描述: 金蝶分录主键 ID 格式:FPOOrderEntry_FEntryId ,其它格式 PurchaseOrgId.Number },
   字段:FormId,标签:业务对象表单 Id,类型:字符串,描述:必须填写金蝶的表单 ID 如:PUR_PurchaseOrder,值:SAL_OUTSTOCK }
],
autoFillResponse:true
}

请求参数解析

在上述配置中,我们定义了多个请求参数,这些参数用于指定我们希望从金蝶云星空获取的数据字段。以下是几个关键字段及其作用:

  • FBillTypeID_FNumber: 单据类型编号,用于标识不同类型的销售出库单。
  • FBillNo: 单据编号,是每个销售出库单的唯一标识。
  • FDate: 日期,用于筛选特定时间范围内的销售出库单。
  • FSaleOrgId_FNumber: 销售组织编号,用于区分不同销售部门的数据。
  • FCustomerID_FNumberFCustomerID_FName: 客户编码和客户名称,用于标识和显示客户信息。
  • FMaterialID_FNumber: 物料编码,用于标识销售出库中的具体物料。
  • FMustQtyFRealQty: 应发数量和实发数量,用于记录计划与实际发货量。

此外,还有一些辅助参数如LimitStartRowFilterString等,用于控制查询结果的分页和过滤条件。

数据请求与清洗

在完成元数据配置后,我们可以通过轻易云平台发送POST请求来调用金蝶云星空接口。示例请求如下:

{
  "_apiName_": "/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc",
  "_method_": {
      "_post_":{
          "_url_":"",
          "_data_":{
              "_formid_":"",
              "_data_":{
                  "_FieldKeys_":"",
                  "_FilterString_":"",
                  "_TopRowCount_":"",
                  "_Limit_":"",
                  "_StartRow_" :""
              }
          }
      }
  }
}

在接收到响应后,我们需要对数据进行清洗和转换,以确保其符合目标系统或业务需求。例如,可以对日期格式进行标准化处理,对数值字段进行单位转换等。

数据转换与写入

清洗后的数据可以进一步转换为目标系统所需的数据格式,并通过轻易云平台写入到目标数据库或应用系统中。这一步通常包括将JSON格式的数据映射到关系数据库表结构中,并执行插入或更新操作。

通过上述步骤,我们实现了从金蝶云星空获取销售出库单数据并进行加工处理,为后续的数据分析和业务决策提供了可靠的数据支持。 如何开发用友BIP接口

使用轻易云数据集成平台进行ETL转换与写入的技术案例

在数据集成生命周期的第二步,我们重点关注将已经集成的源平台数据进行ETL转换,转为目标平台所能够接收的格式,并最终写入目标平台。本文将通过一个具体的技术案例来详细说明这一过程。

数据请求与清洗

首先,我们需要从源平台获取销售出库单的数据。假设我们已经完成了这一阶段,获取到了原始数据。接下来,我们将重点放在如何将这些数据进行转换,以符合轻易云集成平台API接口所需的格式。

数据转换与写入

在这个阶段,我们需要使用ETL(Extract, Transform, Load)工具对数据进行处理和转换。以下是一个具体的技术案例,展示如何配置和使用元数据,将数据转换并写入目标平台。

元数据配置

根据提供的元数据配置,我们可以看到以下关键信息:

{
  "api": "写入空操作",
  "effect": "EXECUTE",
  "method": "POST",
  "number": "number",
  "id": "id",
  "name": "编码",
  "idCheck": true
}

这些信息指示我们需要通过POST方法调用“写入空操作”API,将处理后的数据发送到目标平台。以下是具体步骤:

  1. 提取(Extract):从源平台提取销售出库单的数据。
  2. 转换(Transform):根据目标API接口要求,对提取的数据进行格式化和转换。
  3. 加载(Load):通过API接口将转换后的数据写入目标平台。
实际操作步骤
  1. 提取销售出库单数据

    假设我们从源系统中提取到了以下JSON格式的数据:

    [
     {
       "number": "SO12345",
       "id": 1001,
       "name": "产品A"
     },
     {
       "number": "SO12346",
       "id": 1002,
       "name": "产品B"
     }
    ]
  2. 数据清洗与验证

    在清洗过程中,我们需要确保每条记录都包含必要的字段,如numberidname。如果某些记录缺少这些字段,则需要进行补全或剔除。同时,根据元数据配置中的idCheck: true,我们需要确保每个ID都是唯一且有效的。

  3. 数据转换

    根据元数据配置,我们需要将上述JSON格式的数据转换为符合目标API接口要求的格式。假设目标API接口要求如下:

    {
     "operationType": "EXECUTE",
     "data": [
       {
         "number": "SO12345",
         "id": 1001,
         "codeName": "产品A"
       },
       {
         "number": "SO12346",
         "id": 1002,
         "codeName": "产品B"
       }
     ]
    }

    在这个过程中,我们将原始字段name重命名为codeName,并添加一个新的字段operationType,其值为"EXECUTE"。

  4. 加载到目标平台

    最后一步,通过POST方法调用“写入空操作”API,将处理后的数据发送到目标平台。以下是Python代码示例:

    import requests
    import json
    
    url = 'https://api.qingyiyun.com/write'
    headers = {'Content-Type': 'application/json'}
    
    data = {
     'operationType': 'EXECUTE',
     'data': [
       {'number': 'SO12345', 'id': 1001, 'codeName': '产品A'},
       {'number': 'SO12346', 'id': 1002, 'codeName': '产品B'}
     ]
    }
    
    response = requests.post(url, headers=headers, data=json.dumps(data))
    
    if response.status_code == 200:
       print('Data successfully written to the target platform.')
    else:
       print('Failed to write data:', response.text)

通过上述步骤,我们成功地将源平台的数据进行了ETL处理,并通过轻易云集成平台API接口将其写入到目标平台。这一过程不仅保证了数据的一致性和完整性,还提升了整体业务流程的效率和透明度。 打通金蝶云星空数据接口

更多系统对接方案