测试方案--金蝶-仓库=>轻易云-仓库(指掌天下)技术案例分享
在本次技术案例中,我们详细剖析了如何将金蝶云星空系统的数据集成到轻易云平台,确保数据的高效传递与准确处理。具体实施步骤和关键点如下:
首先,我们利用金蝶云星空提供的executeBillQuery
API接口进行数据抓取。此接口能够定时可靠地获取所需数据,从而保证原始信息的全面性与实时性。在执行这一操作时,需要重点关注分页和限流问题,以防止因请求过于频繁导致的数据漏单或访问失败。
为了适应特定业务需求,在获取到原始数据后,我们采用自定义的数据转换逻辑对其进行预处理。这一步骤不仅是必要的,它有效地解决了金蝶云星空与轻易云集成平台之间的数据格式差异,为后续写入工作奠定基础。
接下来,通过调用轻易云平台的RewriteStrategyData
API接口,将预处理后的数据批量写入至目标数据库。得益于该平台强大的高吞吐量支持能力,大量数据能够快速无误地完成传输,进一步提高了整体效率。此外,基于集中监控和告警系统,实现了对整个集成任务状态和性能的实时跟踪,有助于及时发现并应对潜在的问题,例如:异常检测和错误重试机制等,这显著提升了系统对接过程中的稳定性与可靠性。
通过上述方法,不仅实现了从金蝶云星空到轻易云平台的大规模稳定集成,还确保每个环节都能得到精准控制和即时反馈。下一步我们将深入探讨具体配置细节及代码实现。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的过程中,调用源系统的API接口是关键的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取并加工数据。
接口配置与元数据解析
首先,我们需要理解元数据配置中的各个字段及其作用。以下是元数据配置的具体内容:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FNumber",
"id": "FStockId",
"name": "FName",
"request": [
{"field": "FStockId", "label": "FStockId", "type": "string", "describe": "111", "value": "FStockId"},
{"field": "FNumber", "label": "FNumber", "type": "string", "describe": "111", "value": "FNumber"},
{"field": "FName", "label": "FName", "type": "string", "describe": "111", "value": "FName"},
{"field": "FGroup_FNumber", "label": "FGroup", "type": "string", "describe": 111, 111, value: FGroup.FNumber},
{"field":"FCreateOrgId_FNumber","label":"创建组织","type":"string","value":"FCreateOrgId.FNumber"}
],
...
}
请求参数解析
- api:
executeBillQuery
,表示我们要调用的金蝶云星空接口。 - effect:
QUERY
,表示这是一个查询操作。 - method:
POST
,请求方法为POST。 - number:
FNumber
,表示编号字段。 - id:
FStockId
,表示主键ID字段。 - name:
FName
,表示名称字段。
请求体参数
请求体参数包含了具体需要查询的字段和条件:
[
{"field":"FStockId","label":"FStockId","type":"string","describe":"111","value":"FStockId"},
{"field":"FNumber","label":"FNumber","type":"string","describe":"111","value":"FNumber"},
{"field":"FName","label":"FName","type":"string","describe":"111","value":"FName"},
{"field":"FGroup_FNumber","label":"FGroup","type":"string","describe":"111","value":"FGroup.FNumber"},
{"field":"FCreateOrgId_FNumber","label":"创建组织","type":"string","value":"FCreateOrgId.FNumber"}
]
这些字段定义了我们从金蝶云星空系统中需要提取的数据,包括仓库ID、编号、名称、组编号和创建组织编号等。
分页与过滤参数
为了优化查询性能和结果管理,我们还可以使用分页和过滤参数:
[
{"field":"Limit","label":"Limit","type":"string","describe":"金蝶的查询分页参数","value":"2000"},
{"field":"StartRow","label":"StartRow","type":"string","describe":"","value":"","defaultValue":"","requiredFlag":"","defaultFlag":"","hiddenFlag":"","readonlyFlag":"","isKeyFieldFlag":"","isUniqueFieldFlag":"","isPrimaryKeyFlag":"","isForeignKeyFieldFlag":"","isIndexFieldFlag":"","isRequiredFieldFlag":"","isNullableFieldFlag":"","isReadOnlyFieldFlag":"","isHiddenFieldFlag":"","isDefaultValueFieldFlag":"","isAutoIncrementFieldFlag":"","isAutoGenerateValueFieldFlag":"","isAutoGenerateOnInsertFieldFlag","","defaultValueType","","defaultValueExpression","","defaultValueExpressionType","","defaultValueExpressionLanguage","","defaultValueExpressionScriptEngine","","defaultValueExpressionScriptLanguage","","defaultValueExpressionScriptCode","","defaultValueExpressionScriptFilePath","","defaultValueExpressionScriptFileType","","defaultValueExpressionScriptFileEncoding","","defaultValueExpressionScriptFileCharset","","defaultValueExpressionScriptFileLineSeparator","","defaultValueExpressionScriptFileCommentPrefix","","defaultValueExpressionScriptFileCommentSuffix","","defaultValueExpressionScriptFileCommentDelimiter","","defaultValueExpressionScriptFileCommentEscapeCharacter","","defaultValueExpressionScriptFileCommentEscapeSequenceDelimiter","","defaultValueExpressionScriptFileCommentEscapeSequenceEscapeCharacter"}
]
这些参数包括:
- Limit:每次查询返回的最大记录数,这里设置为2000条。
- StartRow:起始行,用于分页查询。
- FilterString:过滤条件,例如:
FAuditDate>='{{LAST_SYNC_TIME|dateTime}}' and FCreateOrgId.FNumber!='100'
。
实际调用示例
结合上述配置,我们可以构建实际的API调用请求体。假设我们需要查询最近同步时间之后创建且不属于组织编号为100的数据,可以构建如下请求体:
{
![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image)
### 数据集成生命周期第二步:ETL转换与写入目标平台
在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一步。本文将重点探讨如何将已经集成的源平台数据进行ETL转换,转为目标平台API接口所能够接收的格式,并最终写入目标平台。
#### API接口配置与元数据解析
在本案例中,我们将使用轻易云数据集成平台提供的API接口`RewriteStrategyData`来实现数据写入。该API接口采用POST方法,支持对仓库相关数据进行操作。以下是元数据配置的详细解析:
```json
{
"api": "RewriteStrategyData",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field": "WarehouseKey", "label": "仓库key", "type": "string", "value": "{FNumber}"},
{"field": "WarehouseName", "label": "仓库名称", "type": "string", "value": "{FName}"},
{"field": "WarehouseId", "label": "仓库id", "type": "string", "value": "{FStockId}"},
{"field": "WarehouseCode", "label": "仓库code", "type": "string", "value": "{FNumber}"}
],
"otherRequest": [
{"field": "Fshowsource", "label": "是否保留源数据", "type": "string", "value":"false"}
]
}
数据请求与清洗
首先,我们需要从源平台(金蝶-仓库)提取原始数据。在提取过程中,需要对数据进行初步清洗,以确保其符合目标平台的要求。例如,对于字段FNumber
、FName
、FStockId
等,需要确保它们的数据类型和内容格式正确无误。
数据转换
在数据转换阶段,我们需要根据元数据配置,将源平台的数据字段映射到目标平台所需的字段。例如:
WarehouseKey
对应FNumber
WarehouseName
对应FName
WarehouseId
对应FStockId
WarehouseCode
对应FNumber
这种映射关系确保了源平台的数据能够被目标平台正确识别和处理。
数据写入
完成数据转换后,我们需要将处理后的数据通过API接口写入目标平台。以下是一个具体的请求示例:
{
"WarehouseKey": "<source_data.FNumber>",
"WarehouseName": "<source_data.FName>",
"WarehouseId": "<source_data.FStockId>",
"WarehouseCode": "<source_data.FNumber>",
"Fshowsource":"false"
}
在这个请求示例中,<source_data.FNumber>
、<source_data.FName>
、<source_data.FStockId>
分别代表从源平台提取并清洗后的实际值。
接口调用与错误处理
通过HTTP POST方法调用API接口时,需要注意以下几点:
- 身份验证:确保请求头中包含必要的身份验证信息,如API密钥或Token。
- 错误处理:捕获并处理可能出现的错误,如网络异常、身份验证失败、字段校验错误等。可以通过日志记录和告警机制及时发现并解决问题。
- 幂等性:对于重复请求,应确保API接口具有幂等性,即多次相同请求不会导致重复的数据创建或修改。
以下是一个Python示例代码,用于演示如何调用该API接口:
import requests
import json
url = 'https://api.targetplatform.com/RewriteStrategyData'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <your_token>'
}
data = {
'WarehouseKey': source_data['FNumber'],
'WarehouseName': source_data['FName'],
'WarehouseId': source_data['FStockId'],
'WarehouseCode': source_data['FNumber'],
'Fshowsource':'false'
}
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
print('Data successfully written to target platform.')
else:
print(f'Failed to write data: {response.status_code}, {response.text}')
上述代码展示了如何构建并发送HTTP POST请求,同时处理响应结果。如果响应状态码为200,则表示数据成功写入;否则,需要根据返回的状态码和错误信息进行相应处理。
通过以上步骤,我们完成了从源平台到目标平台的数据ETL转换与写入过程。这不仅保证了数据的一致性和完整性,也为后续的数据分析和业务决策提供了可靠的数据基础。