### 案例分享:金蝶云星空数据集成方案解析
在本技术案例中,我们将深入探讨如何通过系统对接,实现从“采购入库单”到“成本调整单(委外材料)”的数据集成。该案例的主要目标是在两个金蝶云星空系统之间高效、可靠地传输和处理大量业务数据。
#### 数据获取与写入接口
首先,利用金蝶云星空提供的`executeBillQuery` API实现对采购入库单数据的抓取。该API允许我们根据特定参数查询并批量获取所需业务数据,这是整个流程中的关键一步。成功获取原始数据后,需要经过一定的数据转换逻辑,以适应下一步的数据写入操作。
为了保证高吞吐量和低延迟的数据写入,采用了`batchSave` API将处理后的成本调整单推送至目标金蝶云星空系统。这个API支持大批量数据的一次性写入,可显著提升整体效率,同时也减少了接口调用次数,提高稳定性。
#### 实时监控与告警机制
整个集成过程中,通过平台提供的集中监控和告警系统,对所有任务状态及性能进行实时跟踪。一旦检测到异常情况,如接口请求失败、超时或返回错误信息等,都能及时生成告警,并触发相应的重试机制,以确保最终不会出现漏单或漏传现象。这种全面而细致的监控措施,是保障全链路稳定运行的重要手段之一。
#### 数据质量与异常检测
此外,为了避免在流程中产生任何潜在的数据问题,我们部署了严格的数据质量监控和异常检测模块。这些模块会自动检验每一条待写入记录,包括字段完整性校验、格式一致性检查等,一旦发现不符合预期标准,将会暂停后续操作并即时通知相关人员进行纠正处理,从而保证持久性的高质量数据流动。
通过上述技术点实施,本案例成功地实现了一套可靠、高效且符合业务需求的跨系统集成解决方案。在接下来的部分,我们将详细介绍具体配置步骤及其背后的实现逻辑,帮助你更好地掌握这一过程中的各个环节。
![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/D30.png~tplv-syqr462i7n-qeasy.image)
### 调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取采购入库单和成本调整单(委外材料)的数据,并进行初步加工。
#### 接口配置与调用
首先,我们需要配置`executeBillQuery`接口的元数据。以下是该接口的配置细节:
- **API**: `executeBillQuery`
- **请求方法**: `POST`
- **分页参数**: 每页500条记录
- **主键字段**: `FInStockEntry_FEntryId`
- **请求字段**:
- `FInStockEntry_FEntryId`: 分录主键ID
- `FID`: 实体主键
- `FBillNo`: 单据编号
- `FDocumentStatus`: 单据状态
- `FStockOrgId_FNumber`: 收料组织
- `FDate`: 入库日期
- `FBillTypeID_FNumber`: 单据类型
- 更多字段详见元数据配置...
#### 请求参数构建
在构建请求参数时,需要特别注意分页和过滤条件。以下是一个示例请求参数:
```json
{
"FormId": "STK_InStock",
"FieldKeys": "FInStockEntry_FEntryId,FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID.FNumber,...",
"FilterString": "FDate>='2023-01-01' and ( FBillTypeID.FNumber = 'RKD03_SYS' or FBillTypeID.FNumber ='RKD17_SYS' ) and FMaterialCosts > '0' and FDate<='2024-04-30 23:59:59'",
"Limit": 500,
"StartRow": 0,
"TopRowCount": true
}
```
#### 数据清洗与转换
获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是一些常见的数据清洗和转换操作:
1. **字段映射与重命名**:
将原始字段名映射为目标系统所需的字段名。例如,将`FInStockEntry_FEntryId`映射为`entry_id`,将`FBillNo`映射为`bill_no`。
2. **数据类型转换**:
确保所有字段的数据类型符合目标系统的要求。例如,将日期字符串转换为标准日期格式,将数值字段转换为浮点数或整数。
3. **过滤无效数据**:
根据业务规则过滤掉无效或不完整的数据。例如,过滤掉单据状态为“作废”的记录。
4. **计算衍生字段**:
根据现有字段计算出新的衍生字段。例如,根据入库数量和单价计算总金额。
#### 实际案例
假设我们从金蝶云星空获取了以下几条采购入库单记录:
```json
[
{
"FInStockEntry_FEntryId": "1001",
"FID": "2001",
"FBillNo": "PO20230101",
"FDocumentStatus": "A",
"FStockOrgId.FNumber": "ORG001",
"FDate": "2023-01-01",
...
},
{
"FInStockEntry_FEntryId": "1002",
...
}
]
```
经过清洗和转换后,得到的数据可能如下:
```json
[
{
"entry_id": "1001",
"entity_id": "2001",
"bill_no": "PO20230101",
"document_status": "A",
"stock_org_number": "ORG001",
"date": "2023-01-01T00:00:00Z",
...
},
{
...
}
]
```
#### 小结
通过上述步骤,我们成功地从金蝶云星空获取了采购入库单和成本调整单的数据,并进行了必要的清洗和转换。这些操作确保了数据在进入下一个生命周期阶段时已经准备就绪,可以顺利进行进一步处理和分析。
![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S18.png~tplv-syqr462i7n-qeasy.image)
### 数据集成:ETL转换与写入金蝶云星空API接口
在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一环。本文将详细探讨如何使用轻易云数据集成平台,将采购入库单-成本调整单(委外材料)的数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。
#### 元数据配置解析
首先,我们需要理解元数据配置中的各个字段和参数,以便准确进行ETL转换。
```json
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo,FDate",
"bodyName": "details",
"bodySum": ["FRealQty"],
"header": ["FBillNo", "FDate", "FPurchaseOrgId_FNumber", "FOwnerIdHead_FNumber"],
"body": ["FMaterialId_FNumber", "FRealQty", "FMaterialCosts", "FPurchaseOrgId_FNumber", "FOwnerIdHead_FNumber"]
},
...
}
```
在这个配置中,`api`字段指定了调用的API接口名称为`batchSave`,请求方法为`POST`。`idCheck`表示是否进行ID检查,而`operation`字段则定义了具体的操作方法和相关字段。
#### 请求参数与映射
请求参数部分定义了每个字段的映射关系和转换规则:
```json
{
...
"request": [
{"label":"FID","field":"FID","type":"string"},
{"label":"单据类型","field":"FBillTypeID","type":"string","value":"CGRKTZD01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"label":"单据编号","field":"FBillNo","type":"string","value":"{FBillNo}"},
{"label":"业务类型","field":"FBusinessType","type":"string","value":"1"},
{"label":"日期","field":"FDate","type":"string","value":"{FDate}"},
...
],
...
}
```
这些请求参数通过`parser`和`mapping`等属性,实现了从源数据到目标平台数据格式的转换。例如,`FBillTypeID`字段通过 `ConvertObjectParser` 转换为金蝶系统中的编码 `CGRKTZD01_SYS`。
#### 明细信息处理
明细信息部分是整个ETL过程中的关键,它涉及到多个子字段的映射和转换:
```json
{
...
{"label":"明细信息","field":"FEntity","type":"array","value":"details","children":[
{"parent":"FEntity","label":"库存组织","field":"FStockOrgID","type":"string","value":"{FOwnerIdHead_FNumber}"},
{"parent":"FEntity","label":"物料编码","field":"FMaterialID","type":"string","value":"{FMaterialId_FNumber}"},
{"parent":"FEntity","label":"调整金额","field":"FAdjustmentAMOUNT","type":"string","value":"{FMaterialCosts}"},
...
]}
}
```
在这个配置中,明细信息被定义为一个数组,每个子字段都进行了详细的映射。例如,库存组织 `FStockOrgID` 被映射为 `{FOwnerIdHead_FNumber}`,并通过 `ConvertObjectParser` 转换为目标系统所需格式。
#### 操作执行与提交
最后,我们需要配置操作执行和提交相关的信息:
```json
{
...
"otherRequest":[
{"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "HS_AdjustmentBill"},
{"field": "Operation", "label": "执行的操作", "type": "string", "value": "BatchSave"},
{"field": "IsAutoSubmitAndAudit", "label": "提交并审核", "type": bool, value: true},
...
]
}
```
在这里,我们指定了业务对象表单ID `HS_AdjustmentBill` 和操作类型 `BatchSave`,并设置自动提交和审核为 `true`。
#### 实际案例应用
假设我们有一条采购入库单-成本调整单(委外材料)的源数据如下:
```json
{
FBillNo: 'PO12345',
FDate: '2023-10-01',
FOwnerIdHead_FNumber: 'ORG001',
details: [
{
FMaterialId_FNumber: 'MAT001',
FRealQty: '100',
FMaterialCosts: '5000'
}
// 更多明细项...
]
}
```
根据上述元数据配置,该源数据将被转换为如下目标格式,并通过 `batchSave` API 接口写入金蝶云星空:
```json
{
FormId: 'HS_AdjustmentBill',
Operation: 'BatchSave',
IsAutoSubmitAndAudit: true,
Model: {
FBillNo: 'PO12345',
FDate: '2023-10-01',
FOwnerIdHead_FNumber: 'ORG001',
FEntity: [
{
FStockOrgID: 'ORG001',
FMaterialID: 'MAT001',
FAdjustmentAMOUNT: '5000'
}
// 更多明细项...
]
}
}
```
通过上述步骤,我们实现了从源平台到目标平台的数据无缝对接,并确保了数据的一致性和准确性。
![如何对接用友BIP接口](https://pic.qeasy.cloud/T11.png~tplv-syqr462i7n-qeasy.image)