YS采购订单对接帆软MongoDB的系统集成案例
在本次技术分享中,我们将探讨如何高效地实现用友BIP(Business Intelligence Platform)中的YS采购订单数据与MongoDB数据库的无缝对接。通过轻易云数据集成平台,我们不仅能够确保数据不漏单,而且在大量数据处理和实时监控方面也有显著优势。
首先,整个集成流程开始于用友BIP的数据抓取。我们调用了其提供的API接口/yonbip/scm/purchaseorder/list
,该接口允许批量获取采购订单的数据。在实际操作过程中,需要重点关注分页和限流问题,以防止因请求频繁导致服务端压力过大或者超出API调用限制。
为了确保及时、可靠地抓取到最新的采购订单信息,我们使用了定时任务调度,每隔一定时间触发一次接口调用。这种机制不仅保证了数据的新鲜度,还能有效规避因网络波动或服务器负载造成的数据丢失问题。一旦获取到采购订单数据后,通过轻易云平台内置的数据转换工具,对原始JSON结构进行必要格式调整,以符合MongoDB插入文档要求。
针对大量采购订单快速写入MongoDB的问题,通过优化批量写入操作来提升效率。我们采用了MongoDB官方推荐的Insert API,该API支持一次性插入多个文档,在性能上有明显优势。此外,为应对可能出现的网络异常或其他不可预见情况,我们设计了一套完善的异常处理与错误重试机制,确保每条记录最终都被成功存储至数据库中,不会漏单。
最后,在整个流程运行期间及之后,可以利用轻易云平台提供的实时监控和日志功能,对各个环节进行细致跟踪。从初始数据提取,到格式转化,再到最终写入,每一步都有明确可视化展示,使得维护人员可以迅速定位和解决潜在问题,提高整体业务透明度与运维效率。
调用源系统用友BIP接口/yonbip/scm/purchaseorder/list获取并加工数据
在数据集成的生命周期中,第一步是调用源系统接口获取数据,并对其进行初步加工。本文将详细探讨如何通过轻易云数据集成平台调用用友BIP的采购订单接口/yonbip/scm/purchaseorder/list
,并对返回的数据进行处理。
接口调用配置
首先,我们需要配置API接口的请求参数。根据元数据配置,接口使用POST方法,以下是具体的请求参数:
- pageIndex: 页码,默认值为1。
- pageSize: 每页记录数,默认值为500。
- isSum: 是否查询表头,默认值为false。
- simpleVOs: 查询条件,这里我们设置了一个过滤条件:
- field1:
- field: 查询字段,这里设置为
pubts
。 - op: 比较符,这里设置为
egt
(大于等于)。 - value1: 值,这里使用占位符
{{LAST_SYNC_TIME|datetime}}
表示上次同步时间。
- queryOrders: 排序字段,这里我们按id进行升序排序。
以下是请求参数的JSON格式:
{
"pageIndex": "1",
"pageSize": "500",
"isSum": "false",
"simpleVOs": [
{
"field1": {
"field": "pubts",
"op": "egt",
"value1": "{{LAST_SYNC_TIME|datetime}}"
}
}
],
"queryOrders": [
{
"field": "id",
"order": "asc"
}
]
}
数据格式化与转换
在获取到原始数据后,我们需要对其进行格式化和转换。根据元数据配置,我们需要将返回的数据字段进行重命名和类型转换:
- 将字段
id
重命名为new_id
,类型为字符串。 - 将字段
purchaseOrders_id
重命名为new_purchaseOrders_id
,类型为字符串。 - 将字段
headFreeItem.define1
重命名为new_headFreeItem
,类型为字符串。 - 将字段
vendor
重命名为new_vendor
,类型为字符串。 - 将字段
warehouse
重命名为new_warehouse
,类型为字符串。
以下是一个示例响应数据及其转换后的结果:
原始响应数据:
{
"id": 123,
"purchaseOrders_id": 456,
"headFreeItem.define1": "item123",
"vendor": "vendorABC",
"warehouse": "warehouseXYZ"
}
转换后的结果:
{
"new_id": "123",
"new_purchaseOrders_id": "456",
"new_headFreeItem": "item123",
"new_vendor": "vendorABC",
"new_warehouse": "warehouseXYZ"
}
实践案例
假设我们需要将上述配置应用到实际项目中,如YS采购订单对接帆软MongDB。在轻易云平台上,我们可以通过以下步骤实现:
-
创建API连接器:在轻易云平台上创建一个新的API连接器,并填写上述请求参数和URL。
-
配置请求参数:在连接器中添加请求参数,并设置默认值和描述信息。
-
定义响应格式化规则:根据元数据配置,在连接器中定义响应格式化规则,将原始字段映射到新的字段名称,并指定类型转换。
-
测试连接器:执行测试调用,确保返回的数据符合预期,并正确应用了格式化规则。
-
部署与监控:将连接器部署到生产环境,并通过轻易云平台的实时监控功能跟踪数据流动和处理状态。
通过以上步骤,我们可以高效地实现用友BIP采购订单接口的数据获取与加工,为后续的数据处理和分析奠定基础。
使用轻易云数据集成平台将采购订单数据转换并写入MongoDB
在数据集成的生命周期中,ETL(Extract, Transform, Load)过程是至关重要的一环。本文将详细介绍如何使用轻易云数据集成平台,将YS采购订单的数据进行转换,并通过MongoDB API接口写入目标数据库。
数据请求与清洗
首先,我们需要确保从源系统获取的数据是干净且结构化的。在此阶段,我们可以利用轻易云平台提供的可视化工具,对数据进行初步清洗和预处理。通过定义合适的规则和过滤条件,确保数据质量符合要求。
数据转换与写入
接下来,我们进入数据生命周期的第二步:将已经清洗好的数据进行转换,并写入目标平台MongoDB。以下是具体的操作步骤和技术细节。
1. 定义API接口配置
根据提供的元数据配置,我们需要定义一个POST请求,用于将采购订单数据插入到MongoDB中。以下是API接口配置的关键参数:
{
"api": "Insert",
"effect": "EXECUTE",
"method": "POST",
"number": "id",
"id": "id",
"name": "id",
"idCheck": true,
"request": [
{"field":"subQty","label":"采购数量","type":"float","describe":"采购数量","value":"{subQty}"},
{"field":"code","label":"单据编码","type":"string","describe":"单据编码","value":"{code}"},
{"field":"currency_priceDigit","label":"币种单价精度","type":"string","describe":"币种单价精度","value":"{currency_priceDigit}"},
// ...更多字段配置
{"field":"qeasydataid","label":"Mong主键id","type":"string","value":"{purchaseOrders_id}"}
],
"otherRequest": [
{"field":"collectionName","label":"集合名字","type":"string","describe":"集合名字","value":"PurchaseOrder"}
],
"buildModel": true
}
2. 数据映射与转换
在元数据配置中,每个字段都有明确的映射关系。例如,subQty
对应的是采购数量,code
对应的是单据编码等。我们需要确保这些字段在转换过程中正确映射,并且类型匹配。
{
"subQty": "{subQty}",
"code": "{code}",
// ...更多字段映射
}
3. 构建请求体
根据上述映射关系,构建最终的请求体。确保所有必需字段都已包含,并且值已经正确填充。
{
"subQty": 100,
"code": "PO123456",
// ...更多字段值
}
4. 执行API请求
使用轻易云平台内置的HTTP客户端功能,发送POST请求到MongoDB API接口。以下是示例代码:
import requests
url = 'http://your-mongodb-api-endpoint/insert'
headers = {'Content-Type': 'application/json'}
data = {
"subQty": 100,
"code": "PO123456",
// ...更多字段值
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("Data inserted successfully")
else:
print("Failed to insert data:", response.text)
5. 错误处理与日志记录
在实际操作中,可能会遇到各种错误,如网络问题、数据格式不匹配等。因此,需要添加错误处理机制和日志记录,以便及时发现和解决问题。
try:
response = requests.post(url, headers=headers, json=data)
response.raise_for_status()
except requests.exceptions.HTTPError as errh:
print ("Http Error:",errh)
except requests.exceptions.ConnectionError as errc:
print ("Error Connecting:",errc)
except requests.exceptions.Timeout as errt:
print ("Timeout Error:",errt)
except requests.exceptions.RequestException as err:
print ("OOps: Something Else",err)
小结
通过以上步骤,我们成功地将YS采购订单的数据进行了ETL转换,并通过MongoDB API接口写入了目标数据库。在整个过程中,轻易云数据集成平台提供了强大的工具和灵活的配置选项,使得复杂的数据集成任务变得更加简单高效。