利用轻易云跨平台数据集成:易快报到金蝶云星空

  • 轻易云集成顾问-何语琴
### 易快报采购订单对接金蝶应付单(非月结)技术案例分享 在现代企业的业务运营中,数据的准确性和及时性至关重要。在本技术案例中,我们将深入探讨如何通过轻易云数据集成平台,实现“易快报”采购订单与“金蝶云星空”应付单(非月结)的无缝对接。 首先,我们需要确保从易快报获取的数据完整且不漏单。为此,通过调用易快报接口`/api/openapi/v1.1/docs/getApplyList`,可以定时抓取最新的采购订单数据。为了避免因网络波动或接口限流导致的数据丢失问题,会采用分页请求,并结合重试机制来处理可能发生的异常情况。 在成功获取到所有所需数据后,需要将这些信息批量写入到金蝶云星空系统内。考虑到大量数据传输过程中可能产生的性能瓶颈,我们利用批量处理和并发写入策略,加速了记录提交过程。同时,为确保每条记录都被正确写入,系统会实时监控每个步骤并提供详细日志记录。如果遇到异常情况,还可触发错误重试机制以保证稳定性。 另一个关键挑战是如何高效地进行两套系统间的数据格式转换。例如,易快报中的字段名称、类型可能与金蝶云星空存在差异,这就要求我们在映射配置上做出精准调整。此外,为适配不同业务需求,还支持对接自定义规则,以便灵活应对复杂场景。 总结来说,通过以上方法有效实现了从易快报到金蝶云星空的数据集成,不仅提高了操作效率,也显著降低了人工干预带来的风险。在下一部分内容中,将深入介绍具体实现方案及其代码示例。 --- 通过这种方式直面主题,从实际应用场景出发,使得整篇文章更具专业性和实用价值。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image) ### 调用易快报接口获取并加工数据的技术实现 在数据集成生命周期的第一步中,我们需要调用易快报的接口`/api/openapi/v1.1/docs/getApplyList`来获取采购订单数据,并进行必要的数据清洗和转换。以下是具体的技术实现步骤和细节。 #### 接口调用配置 首先,我们需要配置API调用的元数据。这些元数据定义了API请求的各个参数及其含义: ```json { "api": "/api/openapi/v1.1/docs/getApplyList", "effect": "QUERY", "method": "GET", "number": "form.code", "id": "id", "idCheck": true, "otherRequest": [ { "field": "type", "label": "type", "type": "string", "describe": "expense : 报销单\nloan : 借款单\nrepayment : 还款记录\npayment : 付款单\nrequisition : 申请单\ncustom : 通用审批单\nreceipt : 收款单", "value": "expense" }, { "field": "start", "label": "分页查询起始值", "type": "string" }, { "field": "count", "label": "count", "type": "string", "describe": "最大不能超过 100", "value": "100" }, { ... } ], ... } ``` #### 参数详解 - **type**: 指定要查询的单据类型,这里设置为`expense`,即报销单。 - **start**: 分页查询的起始值,用于控制数据分页。 - **count**: 每次查询返回的数据条数,最大不能超过100。 - **orderBy**: 查询字段,这里设置为`updateTime`,表示按更新时间排序。 - **startDate**和**endDate**: 查询时间范围,分别表示起始时间和结束时间。 - **specificationId**: 单据模板ID,用于筛选特定模板的数据。 - **active**: 是否已删除,设置为`true`表示只查询未删除的数据。 - **state**: 单据状态,多个状态用逗号分隔。 #### 数据请求与清洗 在调用接口获取数据后,需要对返回的数据进行清洗。清洗过程包括过滤无效数据、标准化字段格式等操作。以下是一个示例代码片段: ```python import requests import datetime # 定义API URL url = 'https://api.yikuaibao.com/api/openapi/v1.1/docs/getApplyList' # 定义请求参数 params = { 'type': 'expense', 'start': '0', 'count': '100', 'orderBy': 'updateTime', 'startDate': (datetime.datetime.now() - datetime.timedelta(days=30)).strftime('%Y-%m-%d %H:%M:%S'), 'endDate': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'specificationId': 'ID01nExzdQyBs3', 'active': 'true', 'state': 'paying,PROCESSING,paid,archived' } # 发起GET请求 response = requests.get(url, params=params) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗 cleaned_data = [] for item in data['data']: if item['details']['_amount_standard'] > 0: cleaned_data.append(item) else: print(f"Error: {response.status_code}") ``` #### 数据转换与写入 在完成数据清洗后,需要将数据转换为目标系统所需的格式,并写入目标系统。以下是一个示例代码片段: ```python def transform_and_write(data): transformed_data = [] for item in data: transformed_item = { 'order_id': item['form']['code'], 'amount': item['details']['_amount_standard'], ... } transformed_data.append(transformed_item) # 假设目标系统有一个API用于接收转换后的数据 target_url = 'https://target-system.com/api/receiveData' for item in transformed_data: response = requests.post(target_url, json=item) if response.status_code != 200: print(f"Failed to write data for order_id {item['order_id']}") ``` 通过上述步骤,我们实现了从易快报接口获取采购订单数据,并对其进行清洗、转换和写入目标系统的全过程。这一过程不仅确保了数据的一致性和准确性,还提高了业务处理效率。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/S6.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行金蝶云星空API接口数据转换与写入 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现细节。 #### 1. API接口配置 我们使用的是金蝶云星空的`batchSave` API接口,采用POST请求方法。该接口支持批量保存操作,并且每次请求可以处理多条记录。配置如下: ```json { "api": "batchSave", "method": "POST", "pagination": { "pageSize": 100 }, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "idCheck": true } ``` #### 2. 请求参数配置 根据元数据配置,我们需要构建请求参数,包括单据类型、结算组织、单据编号、业务类型等字段。以下是关键字段及其解析方式: - **FBillTypeID**: 单据类型,固定值`YFD02_SYS` - **FSETTLEORGID**: 结算组织,固定值`102` - **FBillNo**: 单据编号,动态值`{code}` - **FBUSINESSTYPE**: 业务类型,固定值`FY` - **FDATE**: 业务日期,通过预先节点审批时间转换得到`{{preNodeApprovedTime|datetime}}` - **FSUPPLIERID**: 供应商编码,通过变量`{{u_供应商编码}}`并使用解析器`ConvertObjectParser` - **FCURRENCYID**: 币别,通过变量映射得到 - **FAP_Remark**: 易快报付款条件,通过变量`{{u_付款条件说明}}` - **F_VRKB_Remarks**: 费用详情,通过变量`{title}` 示例配置如下: ```json [ {"field":"FBillTypeID","value":"YFD02_SYS"}, {"field":"FSETTLEORGID","value":"102"}, {"field":"FBillNo","value":"{code}"}, {"field":"FBUSINESSTYPE","value":"FY"}, {"field":"FDATE","value":"{{preNodeApprovedTime|datetime}}"}, {"field":"FSUPPLIERID","value":"{{u_供应商编码}}","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FCURRENCYID","value":"{FCURRENCYID}","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FAP_Remark","value":"{{u_付款条件说明}}"}, {"field":"F_VRKB_Remarks","value":"{title}"} ] ``` #### 3. 明细字段配置 对于明细字段,我们需要处理费用项目、含税单价、计价数量等多个字段。每个字段都需要进行相应的转换和解析,例如: - **FCOSTID**: 固定值`FYXM14_SYS` - **FTaxPrice**: 含税单价,根据币种不同选择不同的单价 - **FPriceQty**: 动态值,通过变量获取`{{details.u_订单数量}}` - **FCOSTDEPARTMENTID**: 根据部门编码通过MongoDB查询获取并解析 示例配置如下: ```json [ {"field":"FCOSTID","value":"FYXM14_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FTaxPrice","value":"'function case when '{FCURRENCYID}'='CNY' then '{{details._unitPrice_standard}}' else '{{details._unitPrice_foreign}}' end'"}, {"field":"FPriceQty","value":"{{details.u_订单数量}}"}, {"field":"FCOSTDEPARTMENTID","value":"'mongoQuery findField=content.code where={\"id\":{\"$eq\":\"{{details.u_申请部门}}\"}}'"}, ] ``` #### 4. 表头财务和其他配置 表头财务信息和其他必要的配置信息也需要一并处理。例如,本位币和汇率类型等: ```json [ { "field": "FsubHeadFinc", "children": [ { "field": "FMAINBOOKSTDCURRID", "value": "PRE001", "parser":{"name":"ConvertObjectParser","params":"FNumber"} }, { "field": "FEXCHANGETYPE", "value": "HLTX01_SYS", "parser":{"name":"ConvertObjectParser","params":"FNumber"} } ] } ] ``` #### 最终请求示例 将所有字段整合后,形成最终请求体: ```json { "FormId": "AP_Payable", "Operation": "BatchSave", "IsAutoSubmitAndAudit": false, "IsVerifyBaseDataField": false, ... } ``` 通过以上步骤,我们成功将源平台的数据转换为金蝶云星空API接口所能接受的格式,并完成数据写入。这不仅确保了数据的一致性和准确性,也提高了系统间的数据传输效率。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)