ETL实战:将数据转换并写入金蝶云星空API

  • 轻易云集成顾问-陈洁琳

新宝-产业链协同平台与金蝶云星空的数据集成案例分析

在新宝-产业链协同平台和金蝶云星空两大系统的对接实践中,采购订单到销售订单的数据转换无疑是最关键的一环。本文将详细解析这一数据集成过程中的技术细节,并分享实际操作中的经验教训。

首先,我们利用新宝-产业链协同平台提供的API接口 /order/orderList 获取所需的采购订单数据。为了确保所获取数据的完整性,我们设置了定时任务来可靠地抓取新增及变更的数据记录。这一过程中,需要特别注意接口分页和限流问题,以防止数据遗漏或超载现象。

获取到原始数据后,下一步则是将这些信息快速、高效地写入到金蝶云星空系统。我们使用其提供的 batchSave API 进行批量写入。在这一阶段,对两者之间的数据格式差异进行了相应的处理,通过自定义映射规则有效消除了不兼容的问题。例如,将新宝-产业链协同平台字段重新映射为符合金蝶云要求的格式,从而实现无缝对接。

整个流程还涉及实时监控与日志记录机制,一旦发现异常情况,如接口调用失败或者网络不稳定等问题,系统会自动触发错误重试机制,确保每一笔资料都能准确落地。此外,对于批量处理过程中可能出现的一些特例,还设计了相应的错误捕捉和手动干预功能,以减少人工参与度,提高自动化程度。

通过以上步骤,新宝-产业链协同平台到金蝶云星空的数据转换得到了高效、稳定保障,为企业各业务部门提供了精准及时的信息支持。 钉钉与WMS系统接口开发配置

调用新宝-产业链协同平台接口/order/orderList获取并加工数据

在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用新宝-产业链协同平台的/order/orderList接口获取采购订单数据,并进行初步加工。

接口调用配置

首先,我们需要配置元数据,以便正确调用新宝-产业链协同平台的接口。以下是元数据配置的详细说明:

{
  "api": "/order/orderList",
  "method": "POST",
  "number": "poNo",
  "id": "poNo",
  "idCheck": true,
  "sdk": "\\Adapter\\Donlim\\SDK\\DonlimSDK",
  "errorMsgKey": "msg",
  "dataListKey": "data",
  "autoPaging22": "page_no",
  "beatFlat": ["orderDetail"],
  "request": [
    {
      "field": "queryTime",
      "label": "queryTime",
      "type": "string",
      "describe": "查询大于时间范围内数据,只支持查询跨度1个月内的数据",
      "value": "{{LAST_SYNC_TIME|dateTime}}"
    }
  ]
}

请求参数设置

在请求参数中,queryTime字段用于指定查询的时间范围。该字段的值采用模板变量{{LAST_SYNC_TIME|dateTime}},表示上次同步时间点后的数据。这一设计确保了每次调用都能获取到最新的数据。

数据请求与清洗

通过上述配置,我们可以使用轻易云平台提供的SDK进行接口调用。以下是一个示例代码片段:

$sdk = new \Adapter\Donlim\SDK\DonlimSDK();
$response = $sdk->post('/order/orderList', [
    'queryTime' => date('Y-m-d H:i:s', strtotime('-1 month'))
]);

if ($response['msg'] !== 'success') {
    throw new Exception('API调用失败: ' . $response['msg']);
}

$dataList = $response['data'];

在这个示例中,我们首先实例化了DonlimSDK类,然后使用post方法发送请求,并传入查询时间参数。如果返回结果中的msg字段不为“success”,则抛出异常以提示API调用失败。

数据转换与写入

获取到原始数据后,需要对其进行初步清洗和转换。由于返回的数据结构中包含了嵌套的订单详情(即orderDetail),我们需要将其展开处理:

$processedData = [];
foreach ($dataList as $order) {
    foreach ($order['orderDetail'] as $detail) {
        $processedData[] = [
            'poNo' => $order['poNo'],
            'itemCode' => $detail['itemCode'],
            'quantity' => $detail['quantity'],
            // 添加更多需要的字段
        ];
    }
}

在这个步骤中,我们遍历每个订单及其对应的订单详情,将必要的信息提取并重新组织成新的数组结构,以便后续写入目标系统。

自动分页处理

为了处理大量数据,轻易云平台支持自动分页功能。在元数据配置中,通过设置autoPaging22: page_no实现自动分页。这样,当请求的数据量超过单页限制时,系统会自动进行分页请求,直到所有数据都被获取完毕。

$pageNo = 1;
do {
    $response = $sdk->post('/order/orderList', [
        'queryTime' => date('Y-m-d H:i:s', strtotime('-1 month')),
        'page_no' => $pageNo
    ]);

    if ($response['msg'] !== 'success') {
        throw new Exception('API调用失败: ' . $response['msg']);
    }

    $dataList = $response['data'];
    // 数据处理逻辑...

    $pageNo++;
} while (!empty($dataList));

通过这种方式,我们可以确保即使面对大规模的数据,也能高效地完成数据请求和处理工作。

综上所述,通过合理配置元数据和利用轻易云平台提供的强大功能,我们能够高效地从新宝-产业链协同平台获取采购订单数据,并进行必要的清洗和转换,为后续的数据写入和业务分析打下坚实基础。 金蝶与MES系统接口开发配置

使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例

在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台所能够接收的格式。本文将详细探讨如何使用轻易云数据集成平台,将采购订单数据转换为金蝶云星空API接口所能接收的销售订单格式,并最终写入目标平台。

API接口配置与元数据解析

根据提供的元数据配置,目标平台为金蝶云星空,其API接口为batchSave,请求方法为POST。以下是具体的配置细节:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "method": "batchArraySave",
    "rows": 20,
    "rowsKey": "array"
  },
  "request": [
    {"field": "FBillNo", "label": "单据编号", "type": "string"},
    {"field": "FSaleOrgId", "label": "销售组织", "type": "string", 
     "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, 
     "value": "100"},
    {"field": "FDate", "label": "日期", "type": "string", 
     "value": "{prepareDate}"},
    {"field": "FCustId", ...

数据转换与映射

在进行ETL转换时,我们需要将源平台的数据字段映射到目标平台所需的字段。以下是一些关键字段及其映射规则:

  1. 单据编号 (FBillNo)

    • 类型:字符串
    • 源数据字段直接映射,无需转换。
  2. 销售组织 (FSaleOrgId)

    • 类型:字符串
    • 使用ConvertObjectParser解析器,将源数据中的组织编号转换为金蝶系统中的编号。
  3. 日期 (FDate)

    • 类型:字符串
    • 使用占位符 {prepareDate} 从源数据中提取日期信息。
  4. 客户 (FCustId)

    • 类型:字符串
    • 使用ConvertObjectParser解析器,将源数据中的客户ID转换为金蝶系统中的客户编号。
  5. 订单明细 (FSaleOrderEntry)

    • 类型:数组
    • 包含多个子字段,如物料编码、销售数量、含税单价等,每个子字段都需要从源数据中提取并进行相应的转换。

子字段详细配置

以订单明细中的物料编码(FMaterialId)为例,配置如下:

{
  ...
  {
    "field":"FMaterialId",
    ...
    {
      ...
      {"field":"FMaterialId","label":"物料编码","type":"string","value":"{orderDetail_materialNo}","parent":"FSaleOrderEntry","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
      ...
    }
  }
}
  • 物料编码 (FMaterialId)
    • 类型:字符串
    • 使用ConvertObjectParser解析器,将源数据中的物料编码转换为金蝶系统中的物料编号。

请求参数组装

根据以上配置,我们需要组装请求参数,以符合金蝶云星空API接口的要求。以下是一个示例请求体:

{
  ...
  {
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...,
            {
              ...,
              {
                ...,
                {
                  ...,
                  [
                    {
                      ...,
                      {
                        ...,
                        [
                          {
                            ...,
                            {"FBillNo":"PO12345","FSaleOrgId":"100","FDate":"2023-10-01","FCustId":"CUST001","FBillTypeID":"XSDD01_SYS","FNote":"","FLinkMan":"","FLinkPhone":"","FSaleOrderEntry":[{"FMaterialId":"MAT001","FQty":"10","FTaxPrice":"100.00","FEntryTaxRate":"","FDeliveryDate":"","FEntryNote":"","F_GZHQ_Text_KHDDH":"","F_GZHQ_Text":"","F_GZHQ_Text1":"","parent":"FSaleOrderEntry"}],"FSalerId":"YG202009300027"}
                        ]
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
}

提交与审核

最后,我们需要设置一些其他请求参数,以确保提交并审核该销售订单。这些参数包括:

  • FormId: 金蝶业务对象表单ID,例如 SAL_SaleOrder
  • Operation: 执行操作,例如 BatchSave
  • IsAutoSubmitAndAudit: 是否自动提交并审核,布尔值 true
  • IsVerifyBaseDataField: 是否验证基础资料有效性,布尔值 false

这些参数确保了我们在提交销售订单时,能够自动完成审核流程,提高了效率。

通过以上步骤,我们成功地将采购订单的数据经过ETL转换后,写入到了金蝶云星空API接口,实现了不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也确保了每个环节的数据准确性和一致性。 金蝶与SCM系统接口开发配置

更多系统对接方案