收款单:旺店通·企业奇门数据集成到金蝶云星空的技术实践
在本案例中,我们探讨了如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据高效、可靠地集成到金蝶云星空。目标是实现收款单的即时同步,使得两个系统之间的数据流动更加顺畅、透明。
首先,我们需要处理的是从旺店通·企业奇门系统获取数据的问题。我们使用了其提供的 wdt.fa.api.account.detail.query
API接口,通过定时抓取机制确保稳定性和覆盖率。在此过程中,为了避免漏单情况,实施了一系列措施,包括分页抓取和限流设置。这些手段有效地保证了接口调用不超时、不丢失数据,并能快速处理大量请求。
接着,在将数据写入金蝶云星空时,同样面临高效传输和格式转换的问题。我们采用了批量处理的方式,将大规模收款单详尽无误地插入到金蝶云星空数据库中,主要借助其 Save
接口进行。这一过程中的关键点在于对两者不同数据格式的映射与转换,如字段名称差异、日期格式等。通过自定义脚本进行映射调整,再结合重试机制,对写入阻碍及异常信息做出迅速反应,确保最终的一致性。
此外,为进一步提高透明度与运维效率,我们还引入实时监控与日志记录功能,能够随时掌握每一次任务执行状况,有助于提前发现潜在问题并及时解决。同时,通过设计合理的数据映射规则和可靠的错误重试策略,大幅提升整个对接流程的鲁棒性。
本文后续内容将详细介绍具体方案配置步骤及各个环节遇到挑战的解决方案,以及相关代码示例,以期为类似需求提供技术参考和借鉴经验。
调用旺店通·企业奇门接口wdt.fa.api.account.detail.query获取并加工数据
在数据集成的生命周期中,调用源系统API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台配置元数据,调用旺店通·企业奇门接口wdt.fa.api.account.detail.query
来获取和加工收款单数据。
接口配置与请求参数
首先,我们需要理解接口的基本配置和请求参数。根据提供的元数据配置,wdt.fa.api.account.detail.query
接口采用POST方法进行调用,其主要用于查询收款单的详细信息。以下是关键的请求参数及其说明:
- start_time: 开始时间,格式为
YYYY-MM-DD HH:MM:SS
,用于按下载时间增量获取数据。 - end_time: 结束时间,格式为
YYYY-MM-DD HH:MM:SS
,同样用于按下载时间增量获取数据。 - page_no: 页号,不传值默认从0页开始。
- page_size: 分页大小,每页返回的数据条数,范围为1~100,不传本参数时默认为40。
- shop_no: 店铺编号,用于区分不同店铺。
- post_status: 状态,此处固定值为4。
这些参数需要根据实际业务需求进行动态填充。例如,start_time
和end_time
可以分别使用上次同步时间和当前时间来设置,以实现增量数据获取。
请求示例
以下是一个具体的请求示例:
{
"start_time": "{{LAST_SYNC_TIME|datetime}}",
"end_time": "{{CURRENT_TIME|datetime}}",
"page_no": "{PAGINATION_START_PAGE}",
"page_size": "{PAGINATION_PAGE_SIZE}",
"shop_no": "your_shop_no",
"post_status": "4"
}
在实际操作中,需要将占位符替换为实际值。例如,可以通过编程方式动态生成这些值。
数据清洗与转换
在成功调用API并获取到原始数据后,需要对数据进行清洗和转换,以便后续处理。根据元数据配置中的条件,我们需要过滤出符合以下条件的数据:
shop_no
不等于010
order_no
不为空in_amount
不等于0
这些条件可以通过编写相应的过滤逻辑来实现。例如,可以使用Python脚本对返回的数据进行过滤:
def filter_data(data):
filtered_data = []
for item in data:
if item['shop_no'] != '010' and item['order_no'] and item['in_amount'] != 0:
filtered_data.append(item)
return filtered_data
数据写入
经过清洗和转换后的数据,需要写入到目标系统中。这一步通常涉及到将处理后的数据格式化为目标系统所需的格式,并通过相应的API或数据库连接进行写入操作。
例如,可以将处理后的数据转换为JSON格式,并通过HTTP POST请求写入到目标系统:
import requests
def write_data_to_target_system(filtered_data, target_url):
headers = {'Content-Type': 'application/json'}
response = requests.post(target_url, json=filtered_data, headers=headers)
if response.status_code == 200:
print("Data written successfully")
else:
print("Failed to write data", response.text)
自动填充响应
元数据配置中提到自动填充响应(autoFillResponse),这意味着在调用API并获取响应后,可以自动将响应中的某些字段填充到指定位置。这一步可以极大简化后续的数据处理工作,提高效率。
小结
通过轻易云数据集成平台,我们能够高效地调用旺店通·企业奇门接口获取收款单详细信息,并对其进行清洗、转换和写入操作。本文详细介绍了如何配置请求参数、进行数据过滤以及最终的数据写入过程,为实现不同系统间的数据无缝对接提供了技术参考。
将源平台数据转换为金蝶云星空API接口格式并写入目标平台
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细解析如何通过元数据配置,实现这一过程。
1. 数据请求与清洗
首先,我们需要从源平台获取原始数据,并进行必要的清洗和预处理。假设我们已经完成了这一阶段,接下来我们关注如何将清洗后的数据转换为目标平台所需的格式。
2. 数据转换与写入
为了将数据转换并写入金蝶云星空,我们需要遵循其API接口规范。以下是关键步骤和配置细节:
元数据配置解析
{
"api": "Save",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"},
{"field":"FSETTLEORGID","label":"结算组织","type":"string","describe":"结算组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
{"field":"FEXCHANGETYPE","label":"汇率类型","type":"string","describe":"汇率类型","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FCURRENCYID","label":"币别","type":"string","describe":"币别","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"PRE001"},
{"field":"FDATE","label":"业务日期","type":"string","describe":"业务日期","value":"{created}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":
"单据类型\n销售收款单-SKDLX01_SYS\n其他业务收款单-SKDLX02_SYS\n资金下拨收款单-SKDLX03 SYS\n内部利息收款单-SKDLX04 SYS\n资金调拨收款单-SKDLX05 SYS\n保证金收款单-SKDLX06 SYS",
"parser":{"name":"ConvertObjectParser","params":"FNumber"},"value": "SKDLX01_SYS"
},
{"field": "FSALEORGID", "label": "销售组织", "type": "string", "describe": "销售组织",
"parser":{"name": "ConvertObjectParser", "params": "FNumber"},
"value": "100"
},
{"field": "FCONTACTUNITTYPE", "label": "往来单位类型",
"type": "string",
"describe": "往来单位类型",
"value": "BD_Customer"
},
{"field": "FCONTACTUNIT",
"label": "往来单位",
...
在上面的元数据配置中,主要字段包括:
FBillNo
:单据编号,对应源平台中的{order_no}
。FSETTLEORGID
:结算组织,固定值100
。FCURRENCYID
:币别,固定值PRE001
。FDATE
:业务日期,对应源平台中的{created}
。FBillTypeID
:单据类型,固定值SKDLX01_SYS
。
这些字段通过不同的解析器(如 ConvertObjectParser
)进行解析和转换,以确保符合金蝶云星空的API要求。
收款单明细配置
{
...
{
field: 'FRECEIVEBILLENTRY',
label: '收款单明细',
type: 'array',
describe: '收款单明细',
value: 'details',
children: [
{ field: 'FSETTLETYPEID', label: '结算方式', type: 'string', describe: '结算方式', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: 'JSFS32_SYS' },
{ field: 'FPURPOSEID', label: '收款用途', type: 'string', describe: '收款用途', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: 'SFKYT01_SYS' },
{ field: 'FRECTOTALAMOUNTFOR', label: '表体-应收金额', type: 'string', describe: '表体-应收金额', value:'{in_amount}' },
{ field:'FACCOUNTID','label':'我方银行账号','type':'string','describe':'我方银行账号','parser':{'name':'ConvertObjectParser','params':'FNumber'},'value':'{shop_name}','mapping':{'target':'66d125b9866be15ab77c8e5f','direction':'positive'}},
{ field:'FCOMMENT','label':'备注','type':'string','describe':'备注','value':'{remark}'}
]
}
}
在这里,我们定义了一个数组字段 FRECEIVEBILLENTRY
,用于存储多个收款明细条目。每个条目包含以下字段:
FSETTLETYPEID
:结算方式,固定值JSFS32_SYS
。FPURPOSEID
:收款用途,固定值SFKYT01_SYS
。FRECTOTALAMOUNTFOR
:表体应收金额,对应源平台中的{in_amount}
。FACCOUNTID
:我方银行账号,对应源平台中的{shop_name}
。FCOMMENT
:备注,对应源平台中的{remark}
。
其他请求参数
{
...
{
field:'FormId',
label:'业务对象表单Id',
type:'string',
describe:'必须填写金蝶的表单ID如:PUR_PurchaseOrder',
value:'AR_RECEIVEBILL'
},
{
field:'Operation',
label:'执行的操作',
type:'string',
describe:'执行的操作',
value:'save'
},
{
field:'IsAutoSubmitAndAudit',
label:'提交并审核',
type:'bool',
describe:'提交并审核',
value:true
},
{
field:'IsVerifyBaseDataField',
label:'验证基础资料',
type:'bool',
describe:'是否验证所有的基础资料有效性,布尔类,默认false(非必录)',
value:true
}
}
这些参数用于指定操作行为,例如:
FormId
: 业务对象表单Id,为固定值AR_RECEIVEBILL
Operation
: 执行的操作,为固定值save
IsAutoSubmitAndAudit
: 提交并审核,为布尔值true
IsVerifyBaseDataField
: 验证基础资料,为布尔值true
API 调用示例
通过上述元数据配置,我们可以构建出符合金蝶云星空API要求的数据结构,并使用HTTP POST方法将其发送到指定API端点。以下是一个简化的调用示例:
import requests
url = "<金蝶云星空API端点>"
headers = {
'Content-Type': 'application/json'
}
data = {
# 根据元数据配置生成的数据结构
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("数据成功写入金蝶云星空")
else:
print(f"请求失败,状态码:{response.status_code}")
通过这种方式,我们实现了从源平台到目标平台的数据无缝对接,并确保每个环节都透明、可控、高效。