轻松实现金蝶云与泛微OA数据对接:技术详解

  • 轻易云集成顾问-曹润

金蝶云星空数据集成到泛微OA-Http:案例分享

在本文中,我们将聚焦于一个实际运行的系统对接集成案例,即金蝶云星空的数据如何成功集成到泛微OA-Http应用中。此次方案命名为“物料金蝶=>泛微物料应用--测试通过”,其中涉及多个关键技术环节和API接口,确保数据的无缝传输与高效处理。

为了准确获取金蝶云星空中的数据,我们使用了其提供的executeBillQuery API,通过此接口定时、可靠地抓取所需的数据。这要求我们精确处理分页和限流问题,以确保所有必需的信息都能够被正确获取并避免漏单。同时,为了满足特定业务需求,采用了自定义的数据转换逻辑,使得原始数据格式能够符合目标系统的结构化要求。

一旦完成初步的数据提取和转换,这些信息将快速批量写入到泛微OA-Http系统中。这里,我们利用/api/cube/new/card/doSubmit API进行大规模数据写入操作,并针对可能出现的对接异常情况,设计了错误重试机制。在整个过程中,还部署了集中监控和告警系统,实时跟踪任务状态与性能,以及时发现并解决潜在的问题,提高整体流程的可靠性。

通过可视化的数据流设计工具,对整个集成过程进行了直观管理,让参与项目团队成员可以轻松理解每个步骤,并有效协作。此外,该工具也显著降低了复杂操作实施的难度,从而提升开发效率。本篇文章开头部分主要介绍关键技术环节及API使用情况,下文将详细阐述具体操作流程及技术实现细节。 企业微信与OA系统接口开发配置

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

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

接口配置与请求参数

首先,我们需要配置调用金蝶云星空接口的元数据。以下是关键的元数据配置:

{
  "api": "executeBillQuery",
  "effect": "QUERY",
  "method": "POST",
  "number": "FNumber",
  "id": "FNumber",
  "name": "FNumber",
  "request": [
    {"field":"FMasterId","label":"id","type":"string","describe":"id","value":"FMasterId"},
    {"field":"FNumber","label":"编码","type":"string","describe":"编码","value":"FNumber"},
    {"field":"FName","label":"名称","type":"string","describe":"名称","value":"FName"},
    {"field":"FSpecification","label":"规格型号","type":"string","describe":"规格型号","value":"FSpecification"},
    {"field":"FOldNumber","label":"旧物料编码","type":"string","describe":"旧物料编码","value":"FOldNumber"},
    {"field":"FDescription","label":"描述","type":"string","describe":"描述","value":"FDescription"},
    {"field":"FMaterialGroup_FNumber","label":"物料分组","type":"string","describe":"物料分组","value":"FMaterialGroup.FNumber"},
    {"field":"FErpClsID","label":"物料属性","type":"string","describe":"物料属性","value":"FErpClsID"},
    {"field":"FForbidStatus","label":"禁用状态","type":"string","describe":"禁用状态","value":"FForbidStatus"},
    {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FForbidStatus='A' and FUseOrgId.FNumber='000'"}
  ],
  "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" : FieldKeys, label :需查询的字段key集合, type :array, describe :金蝶分录主键ID格式: FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber, parser :{name :ArrayToString, params :,}},
    {"field" : FormId, label :业务对象表单Id, type : string, describe : 必须填写金蝶的表单ID如:PUR_PurchaseOrder,value:BD_MATERIAL}
  ],
  autoFillResponse: true
}

请求示例

在实际操作中,我们需要构建一个POST请求,发送到金蝶云星空API。以下是一个请求示例:

{
  FormId: 'BD_MATERIAL',
  FilterString: 'FApproveDate>=\'2023-01-01\' and FForbidStatus=\'A\' and FUseOrgId.FNumber=\'000\'',
  FieldKeys: 'FMasterId,FNumber,FName,FSpecification,FOldNumber,FDescription,FMaterialGroup.FNumber,FErpClsID,FForbidStatus',
  Limit: '2000',
  StartRow: '0'
}

该请求将返回符合条件的物料信息,包括物料编码、名称、规格型号等字段。

数据处理与清洗

获取到原始数据后,我们需要对其进行清洗和初步加工。以下是一些常见的数据处理步骤:

  1. 字段映射:将API返回的数据字段映射到目标系统所需的字段。例如,将FMaterialGroup.FNumber映射为目标系统中的materialGroupCode
  2. 数据转换:根据业务需求,对某些字段进行转换。例如,将日期格式从YYYY-MM-DD转换为目标系统所需的格式。
  3. 过滤无效数据:去除不符合业务规则的数据,例如禁用状态为'A'的数据。

示例代码

以下是一个简单的数据处理示例代码:

import requests
import json

# 定义请求参数
payload = {
    'FormId': 'BD_MATERIAL',
    'FilterString': 'FApproveDate>=\'2023-01-01\' and FForbidStatus=\'A\' and FUseOrgId.FNumber=\'000\'',
    'FieldKeys': 'FMasterId,FNumber,FName,FSpecification,FOldNumber,FDescription,FMaterialGroup.FNumber,FErpClsID,FForbidStatus',
    'Limit': '2000',
    'StartRow': '0'
}

# 发起POST请求
response = requests.post('https://api.kingdee.com/executeBillQuery', data=json.dumps(payload))
data = response.json()

# 数据处理与清洗
processed_data = []
for item in data:
    processed_item = {
        'materialCode': item['FNumber'],
        'materialName': item['FName'],
        'specification': item['FSpecification'],
        # 更多字段映射...
        'materialGroupCode': item['FMaterialGroup.FNumber']
    }

    # 添加到处理后的数据列表中
    processed_data.append(processed_item)

# 输出处理后的数据
print(json.dumps(processed_data, indent=4))

通过上述步骤,我们可以高效地从金蝶云星空获取并加工所需的数据,为后续的数据集成和应用提供支持。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 轻易云数据集成平台金蝶集成接口配置

使用轻易云数据集成平台进行ETL转换并写入泛微OA-HttpAPI接口

在数据集成生命周期的第二步,我们将已经从源平台(金蝶)获取的数据进行ETL转换,并将其转为目标平台(泛微OA-HttpAPI接口)所能接收的格式,最终写入目标平台。以下是详细的技术实现步骤和相关元数据配置。

1. API接口配置

首先,我们需要配置泛微OA-HttpAPI接口的元数据。这些元数据定义了API的路径、请求方法、参数及其类型等信息。以下是具体的元数据配置:

{
    "api": "/api/cube/new/card/doSubmit",
    "method": "POST",
    "idCheck": true,
    "request": [
        {
            "field": "billid",
            "label": "参数ID",
            "type": "string",
            "describe": "打开泛微表单后可以在URL中获取该参数",
            "value": "{F_WMMX_OAId}"
        },
        {
            "field": "type",
            "label": "类型",
            "type": "string",
            "value": "_function case '{F_WMMX_OAId}' when '' then 1 else 2 end"
        },
        {
            "field": "modeId",
            "label": "modeId",
            "type": "string",
            "describe": "//0 正常,1重要,2紧急",
            "value": 37
        },
        {
            "field": "formId",
            "label": "formId",
            "type": "string",
            "value": -186
        },
        {
            "field": "JSONStr",
            "label": "JSONStr",
            "type": "object",
            ...

2. 数据转换逻辑

在ETL过程中,我们需要对源平台的数据进行清洗和转换,以符合目标平台的要求。以下是关键字段的转换逻辑:

  • billid: 从URL中获取泛微表单的参数ID。
  • type: 根据{F_WMMX_OAId}是否为空来决定类型值,若为空则为1,否则为2。
  • JSONStr: 包含多个子字段,这些字段将源平台的数据映射到目标平台所需的格式。

以下是JSONStr对象内字段的具体映射:

{
    ...
    {
        // 物料编码
        field: 'field11645',
        label: '物料编码',
        type: 'string',
        value: '{FNumber}'
    },
    {
        // 物料名称
        field: 'field11646',
        label: '物料名称',
        type: 'string',
        value: '{FName}'
    },
    {
        // 换算方向
        field: 'field11653',
        label: '换算方向',
        type: 'string',
        value: "_function case '{FUnitConvertDir}' when '1' then '库存单位-->辅助单位i' when '2' then '辅助单位-->库存单位' else '' end"
    },
    ...
}

3. 数据写入

完成数据转换后,我们使用HTTP POST方法将数据提交到泛微OA接口。以下是一个完整的请求示例:

{
    billid: '12345',
    type: 1,
    modeId: 37,
    formId: -186,
    JSONStr: {
        field11645: 'MAT001',
        field11646: '材料A',
        field11653: '库存单位-->辅助单位i',
        ...
    },
    guid: 'card',
    layoutid: 239,
    iscreate: 1,
    token: '<your_token>',
    user_id: 22
}

4. 实施效果

通过上述配置和转换逻辑,我们可以确保从金蝶系统获取的数据经过ETL处理后,能够无缝地写入到泛微OA系统中。这不仅提升了系统间的数据一致性,还简化了业务流程,提高了工作效率。

以上就是使用轻易云数据集成平台进行ETL转换并写入泛微OA-HttpAPI接口的详细技术实现过程。通过合理配置元数据和精确的数据映射,我们能够高效地完成跨系统的数据集成任务。 泛微OA与ERP系统接口开发配置

更多系统对接方案