案例分享:用友BIP数据集成到吉客云
在实际业务中,如何高效、准确地将源系统的数据集成到目标系统一直是个重要课题。本文将介绍一个具体的系统对接案例,即通过轻易云数据集成平台实现用友BIP与吉客云之间的数据联通。本次案例实施方案为"2B-YS-销售订单--->吉客云-销售单-成功",重点探讨API接口调用、分页处理、异常监控等技术要点。
为了实现这一目标,我们首先利用用友BIP的获取数据API(/yonbip/sd/voucherorder/list)定时抓取销售订单数据。这个过程中需特别关注接口的分页和限流问题,以确保不漏单。同时,通过自定义的数据转换逻辑,将获取到的原始数据映射为符合吉客云标准格式的数据,并使用吉客云写入数据API(oms.trade.ordercreate)进行批量写入。
核心步骤包括:
-
高吞吐量支持:轻易云平台提供了强大的并行处理和批量操作能力,使得大量订单能够快速、高效地传输至目标系统,提高了整体处理速度。
-
实时监控与告警:通过集中式监控和告警系统,实时跟踪每一笔交易状态,从而及时发现并解决可能出现的问题。这不仅提高了任务完成率,同时更保障了业务连续性。
-
异常处理与重试机制:为了应对突发问题,如网络波动或服务不稳定,在遇到失败情况时可自动触发重试策略,确保最终所有有效数据都能顺利完成迁移。
-
翻译与映射:针对两大系统间存在的数据格式差异,自定义设置转换规则,将复杂字段按需拆分或合并,保证最终导入的数据准确无误。
-
日志记录及归档: 实施过程中详细记录每一步操作日志,包括请求参数、响应结果以及错误信息,以便日后回溯分析,实现全流程透明化管理。
以上步骤展示出我们团队如何巧妙地运用轻易云平台特性,高效且精准地完成此次数据集成任务。从而使企业能够实现从原始订单至最终生成销售单的一体化管理,为后续运营决策提供坚实基础。在接下来的文章部分,我们将进一步深入探讨具体配置过程及代码示例。
调用用友BIP接口获取并加工数据的技术案例
在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用用友BIP接口/yonbip/sd/voucherorder/list
,并对获取的数据进行加工处理。
接口配置与请求参数
首先,我们需要配置API接口的元数据,以便正确地调用和处理数据。以下是该接口的元数据配置:
{
"api": "/yonbip/sd/voucherorder/list",
"effect": "QUERY",
"method": "POST",
"number": "code",
"id": "orderDetailId",
"idCheck": true,
"formatResponse": [
{"old": "stockId", "new": "new_stockId", "format": "string"},
{"old": "pubuts", "new": "date_pubuts", "format": "date"}
],
"request": [
{"field": "pageIndex", "label": "页码", "type": "string", "describe": "页号 示例:1 默认值:1", "value":"1"},
{"field": "pageSize", "label": "每页行数", "type": "string", "describe":"每页行数 示例:10 默认值:10","value":"50"},
{"field":"code","label":"单据编码","type":"string","describe":"单据编号 示例:UO-20220513000001"},
{"field":"nextStatusName","label":"订单状态","type":"string","describe":"订单状态, CONFIRMORDER:开立、DELIVERY_PART:部分发货、DELIVERY_TAKE_PART:部分发货待收货、DELIVERGOODS:待发货、TAKEDELIVERY:待收货、ENDORDER:已完成、OPPOSE:已取消、APPROVING:审批中 示例:CONFIRMORDER","value":"DELIVERGOODS"},
{"field":"open_orderDate_begin","label":"制单日期开始时间","type":"string","describe":"制单日期开始时间,格式为:yyyy-MM-dd HH:mm:ss 示例:2022-05-13 00:00:00"},
{"field":"open_orderDate_end","label":"制单结束时间","type":"string","describe":"制单结束时间,格式为:yyyy-MM-dd HH:mm:ss 示例:2022-05-13 00:00:00"},
{"field":"open_hopeReceiveDate_begin","label":"期望收货开始时间","type":"string","describe":"期望收货开始时间,格式为:yyyy-MM-dd HH:mm:ss 示例:2022-05-13 00:00:00"},
{"field":"open_hopeReceiveDate_end","label":"期望收货截止","type":"string","describe":"期望收货截止,格式为:yyyy-MM-dd HH:mm:ss 示例:2022-05-13 00:00:00"},
{"field":"open_vouchdate_begin","label":"单据开始时间","type":"string","describe":"单据开始时间,格式为:yyyy-MM-dd HH:mm:ss 示例:2022-05-13 00:00:00",
"value": "{{DAYS_AGO_s30|date}}"
},
{"field":"open_vouchdate_end","label":"单据截止时间","type":"string","describe":"单据截止时间,格式为:yyyy-MM-dd HH:mm:ss 示例:2022-05-13 00:00:00",
"value": "{{CURRENT_TIME|date}}"
},
{"field":"isSum","label":"查询表头","type":"string","describe":"查询表头 示例:false 默认值:false",
"value": false
},
{
"field": "simpleVOs",
"label": "查询条件",
"type": ["object"],
"children":[
{
"field2":{
"label" :过滤条件2,
"type" : object,
"children":[
{
"field" : 查询字段,
"type" : string,
"value" : auditTime
},
{
"op" : 比较符,
"type" : string,
"value" : between
},
{
"value1":{
label:"值1",
type:"string",
describe:"“and” | “or” | “and not” | “or\nnot”,若设置,必填expr1和expr2属性,忽略\ncolumn和condition。",
value:"{{DAYS_AGO_s10|datetime}}"
}
},
{
value2:{
label:"值2",
type:"string",
value:"{{CURRENT_TIME|datetime}}"
}
}
]
}
},
{
field3:{
label:"过滤条件3",
type:"object",
children:[
{
field:"查询字段",
type:"string",
value:"transactionTypeId"
},
{
op:{
label:"比较符",
type:"string",
value:"eq"
}
},
{
value1:{
label:"值1",
type:"string",
value:"1654615828039467012"
}
}
]
}
}
]
},
{
field :"queryOrders",
label :"排序字段",
type :"array",
children:[
{
field :"排序条件字段",
type :"string",
value :"vouchdate"
},
{
order:{
label :"顺序",
type :"string",
value :"desc"
}
}
]
}
],
autoFillResponse:true
}
请求参数详解
在请求参数中,我们设置了分页信息(pageIndex
和 pageSize
),以控制每次请求的数据量。此外,还包括了多个过滤条件,如订单状态(nextStatusName
)、制单日期范围(open_orderDate_begin
和 open_orderDate_end
)、期望收货日期范围(open_hopeReceiveDate_begin
和 open_hopeReceiveDate_end
)等。这些参数可以帮助我们精确地筛选出所需的数据。
特别值得注意的是,我们使用了动态参数,如 {{DAYS_AGO_s30|date}}
和 {{CURRENT_TIME|date}}
,分别表示30天前的日期和当前日期。这些动态参数使得我们的请求更加灵活,可以根据实际需求自动调整。
数据格式化与转换
在获取到原始数据后,我们需要对其进行一定的加工处理。元数据配置中的 formatResponse
字段定义了需要转换的字段及其新名称和格式。例如:
[
{"old": "stockId", "new": "new_stockId", "format": "string"},
{"old": "pubuts", "new": "date_pubuts", "format": ["date"]}
]
这里,我们将 stockId
转换为字符串类型,并重命名为 new_stockId
; 将 pubuts
转换为日期类型,并重命名为 date_pubuts
.
实际操作步骤
-
配置API接口: 在轻易云平台上,根据上述元数据配置创建一个新的API接口。
-
设置请求参数: 根据业务需求填写或调整请求参数。例如,可以根据实际情况修改分页信息或过滤条件。
-
发送请求并获取数据: 使用POST方法发送请求,获取返回的数据。
-
数据转换与写入: 根据
formatResponse
中定义的规则,对返回的数据进行转换。然后,将处理后的数据写入目标系统或数据库。
通过以上步骤,我们可以高效地从用友BIP系统中获取所需的数据,并进行必要的加工处理,为后续的数据分析和业务决策提供支持。这一过程充分体现了轻易云平台在异构系统集成中的强大能力和灵活性。
使用轻易云数据集成平台进行ETL转换并写入吉客云API接口
在数据集成的生命周期中,ETL(提取、转换、加载)过程是至关重要的一环。本文将详细介绍如何使用轻易云数据集成平台将已经集成的源平台数据进行ETL转换,最终写入目标平台吉客云API接口。
元数据配置解析
在本次集成任务中,我们的目标是将2B-YS-销售订单的数据转换为吉客云所需的销售单格式,并通过API接口写入吉客云。以下是我们使用的元数据配置:
{
"api": "oms.trade.ordercreate",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "code",
"bodyName": "list",
"header": ["code", "createTime", "payMoney", ...],
"body": ["formula_userDefine_1873070938617020424", ...]
},
...
}
数据请求与清洗
首先,我们从源平台获取销售订单数据,并进行必要的清洗和标准化处理。以下是部分关键字段及其处理逻辑:
warehouseCode
:根据agentId_name
字段值进行条件判断,映射到相应的仓库编码。tradeTime
和payTime
:直接使用源数据中的date_pubuts
字段值。shopName
:映射到自定义字段formula_userDefine_1908587096934187016
。totalFee
和payment
:均映射到源数据中的payMoney
字段。
这些字段通过函数或直接映射实现了从源数据到目标格式的转换。
数据转换与写入
在完成初步的数据清洗后,我们需要将这些数据按照吉客云API接口要求的格式进行组织,并通过POST方法发送到指定接口。以下是具体的数据结构和对应字段:
{
"tradeOrder": {
"warehouseCode": "_function case '{agentId_name}' when '聚好看科技股份有限公司(海信)' then '04' ... end",
...
"tradeOrderDetails": [
{
"goodsNo": "{{list.skuCode}}",
...
}
],
...
}
}
订单头信息
订单头信息包含了订单的基本信息,如仓库编码、下单时间、支付时间、店铺名称等。这些信息通过元数据配置中的字段映射和函数处理逻辑自动生成。例如:
{
"warehouseCode": "_function case '{agentId_name}' when '聚好看科技股份有限公司(海信)' then '04' else '000017' end",
...
}
订单明细信息
订单明细部分则包含了每个商品的信息,如货品编号、规格名称、条码、单价、数量等。这些信息同样通过元数据配置中的字段映射来生成。例如:
{
"goodsNo": "{{list.skuCode}}",
...
}
API请求示例
最终,我们将组织好的JSON结构通过HTTP POST方法发送到吉客云API接口。以下是一个示例请求:
POST /oms.trade.ordercreate HTTP/1.1
Host: api.jikecloud.com
Content-Type: application/json
Authorization: Bearer <access_token>
{
"tradeOrder": {
...
"tradeOrderDetails": [
{
...
}
],
...
}
}
在实际操作中,我们会使用轻易云平台提供的工具和功能来自动化这一过程,确保每个步骤都能高效且准确地执行。
总结
通过上述步骤,我们成功地将2B-YS-销售订单的数据转换为吉客云所需的销售单格式,并通过API接口写入目标平台。这一过程充分利用了轻易云数据集成平台强大的ETL功能,实现了不同系统间的数据无缝对接。