案例分享:小满OKKICRM数据集成到金蝶云星空
在处理企业级系统对接时,如何确保高效、准确地将客户关系管理系统(如小满OKKICRM)的数据无缝集成到ERP平台(金蝶云星空)是一个关键课题。本技术案例将详细讲解“小满客户=>金蝶客户--ok”的实际运行方案,实现了两大系统间的数据流通。
首先,我们需要从小满OKKICRM中获取相关数据。针对这个需求,我们使用了其提供的API接口 /v1/company/list
来抓取公司的客户信息。为确保不漏单和及时性,我们设计了一套定时任务,通过可靠的调度策略实现周期性的数据拉取,并处理分页及限流问题。在每次调度过程中,轻易云平台会记录日志并实时监控整个流程,使得任何异常情况都可以被快速识别和处理。
其次,在获得源数据后,需要对接入目标系统——金蝶云星空。在这里,我们利用其批量写入接口 batchSave
将大量数据迅速且平稳地导入金蝶数据库。这一过程中,特别注意不同系统间的数据格式差异,通过自定义映射规则进行适配转换。同时,为提高操作过程中的稳定性和成功率,还引入了错误重试机制,即便在网络波动或其他意外情况下,也能保障最终的数据完整与一致。
这种基于API接口驱动的双向同步模式,不仅提升了工作效率,还保证了业务上的连续性与稳定性,从而为企业带来更大的价值。在下一部分内容中,将进一步深入探讨具体实现步骤及代码示例,包括分页处理、限流设置以及错误重试逻辑等技术细节。
调用小满OKKICRM接口/v1/company/list获取并加工数据的技术案例
在数据集成生命周期的第一步,我们需要从源系统获取数据,并对其进行初步处理和清洗。本文将详细探讨如何通过调用小满OKKICRM接口/v1/company/list
来获取公司列表数据,并对这些数据进行加工。
API接口调用配置
首先,我们需要配置API接口的调用参数。根据提供的元数据配置,以下是具体的API调用参数:
- API路径:
/v1/company/list
- 请求方法:
GET
- 主要字段:
number
: 基本信息公司名称id
: company_ididCheck
: true
- 查询条件:
管理信息客户分组
字段值在指定范围内(如0星、VIP四星级等)
请求参数详解
在请求参数部分,我们需要设置分页、查询条件以及时间范围等信息。以下是具体的请求参数配置:
-
分页参数:
start_index
: 第几页,默认值为1count
: 每页记录数,默认值为20
-
查询控制参数:
removed
: 是否查询已删除数据,默认值为0(不查询已删除的数据)all
: 查询所有客户,默认值为1(查询所有客户)
-
过滤条件:
group_id
: 客户分组ID,用于过滤特定分组的客户date
: 查询从此日期到今天为止有更新的客户列表start_time
: 开始日期,使用变量{{LAST_SYNC_TIME|datetime}}
end_time
: 结束日期,使用变量{{CURRENT_TIME|datetime}}
time_type
: 时间类型,默认值为1(更新时间)
数据请求与清洗
在获取到原始数据后,我们需要对其进行清洗和初步处理。这一步骤包括但不限于:
- 数据验证: 确保每条记录包含必要的字段,如
company_id
和公司名称。 - 去重处理: 根据
company_id
去重,确保没有重复记录。 - 格式转换: 将日期和时间字段转换为统一格式,以便后续处理。
以下是一个示例代码片段,用于调用API并进行初步的数据清洗:
import requests
import datetime
# 设置请求参数
params = {
"start_index": "1",
"count": "20",
"removed": "0",
"all": "1",
"start_time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
"end_time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
"time_type": "1"
}
# 调用API获取数据
response = requests.get("https://api.okkicrm.com/v1/company/list", params=params)
data = response.json()
# 数据清洗与验证
cleaned_data = []
for record in data['results']:
if 'company_id' in record and '基本信息公司名称' in record:
cleaned_data.append(record)
# 去重处理
unique_data = {record['company_id']: record for record in cleaned_data}.values()
# 格式转换(示例)
for record in unique_data:
record['start_time'] = datetime.datetime.strptime(record['start_time'], '%Y-%m-%d %H:%M:%S')
数据转换与写入
在完成初步的数据清洗后,我们可以将这些数据转换为目标系统所需的格式,并写入目标数据库或系统。在这一步中,可以利用轻易云平台提供的数据转换工具,将清洗后的数据映射到目标系统所需的字段格式。
例如,如果目标系统是金蝶ERP,我们可能需要将公司名称、ID等字段映射到金蝶ERP对应的表结构中,并通过API或数据库连接将数据写入。
# 示例:将清洗后的数据写入金蝶ERP系统
def write_to_kingdee(data):
for record in data:
# 构建金蝶ERP API请求体
payload = {
"CompanyName": record['基本信息公司名称'],
"CompanyID": record['company_id'],
# 更多字段映射...
}
# 调用金蝶ERP API写入数据
response = requests.post("https://api.kingdee.com/v1/company/create", json=payload)
if response.status_code != 200:
print(f"Failed to write record {record['company_id']} to Kingdee ERP")
write_to_kingdee(unique_data)
通过以上步骤,我们实现了从小满OKKICRM获取公司列表数据,并对其进行清洗、转换和写入目标系统的全过程。这不仅提高了数据集成效率,还确保了数据的一致性和准确性。
使用轻易云数据集成平台实现金蝶云星空客户数据写入
在轻易云数据集成平台的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,转为目标平台所能够接收的格式,并最终写入目标平台。本文将详细介绍如何通过ETL转换,将小满客户的数据转化为金蝶云星空API接口所能接收的格式,并成功写入金蝶云星空系统。
API接口配置
在进行数据写入之前,需要根据金蝶云星空API接口的要求进行元数据配置。以下是具体的元数据配置细节:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field":"FCUSTID","label":"FCUSTID","type":"string"},
{"field":"FNumber","label":"客户编码","type":"string","describe":"客户编码","value":"{serial_id}"},
{"field":"FName","label":"客户名称","type":"string","describe":"客户名称","value":"{name}"},
{"field":"FShortName","label":"简称","type":"string","describe":"简称","value":"{short_name}"},
{"field":"FGroup","label":"客户分组","type":"string","describe":"客户分组","value":"{{管理信息客户分组}}", "parser":{"name":"ConvertObjectParser", "params": "FNumber"}, "mapping":{"target": "6557741ab62d667a3c3ae851", "direction": "positive"}},
{"field":"FTEL","label":"联系电话","type":"string", "describe": "联系电话"},
{"field": "FUseOrgId", "label": "使用组织", "type": "string", "describe": "使用组织", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "100"},
{"field": "FCreateOrgId", "label": "创建组织", "type": "string", "describe": "创建组织", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "100"},
{"field": "FTRADINGCURRID", "label": "结算币别", "type": "string", "describe": "结算币别", "value": "PRE001", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}},
{"field":"FADDRESS","label":"地址","type":"string","describe":"地址","value":"{{联系信息详细地址}}"},
{"field":"FCOUNTRY","label":"国家","type":"string","value":"{{特征信息国家地区}}", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}},
{"field":"","label":"","type":"","value":"","parser":{"name":"","params":"","mapping":{"target":"","direction"}}},
{"field":"","label":"","type":"","value":"","parser":{"name":"","params":"","mapping":{"target":"","direction"}}},
...
],
...
}
数据字段解析与转换
在上述元数据配置中,每个字段都有其特定的解析和转换规则。例如,FCUSTID
、FNumber
、FName
等字段直接从源数据中提取并赋值,而一些复杂字段如FGroup
、FTRADINGCURRID
等则需要通过特定的解析器(如 ConvertObjectParser
)进行转换。
示例字段解析
-
客户编码(FNumber)
- 描述:客户编码
- 值:从源数据中的
serial_id
字段获取 - 示例:如果源数据中的
serial_id
为C12345
,则FNumber
的值为C12345
-
客户名称(FName)
- 描述:客户名称
- 值:从源数据中的
name
字段获取 - 示例:如果源数据中的
name
为张三公司
,则FName
的值为张三公司
-
客户分组(FGroup)
- 描述:客户分组
- 值:从源数据中的
管理信息客户分组
- 解析器:使用
ConvertObjectParser
- 映射关系:目标系统中的 ID 为
6557741ab62d667a3c3ae851
- 示例:如果源数据中的
管理信息客户分组
为VIP客户
, 则通过解析器和映射关系将其转换为目标系统中对应的 ID 值
数据写入操作
在完成所有字段的解析和转换后,通过调用金蝶云星空API接口将处理后的数据批量写入目标系统。以下是具体的请求配置:
{
...
{
field: 'FormId',
label: '业务对象表单Id',
type: 'string',
describe: '必须填写金蝶的表单ID如:PUR_PurchaseOrder',
value: 'BD_Customer'
},
{
field: 'Operation',
label: '执行的操作',
type: 'string',
describe: '执行的操作',
value: 'BatchSave'
},
{
field: 'IsAutoSubmitAndAudit',
label: '提交并审核',
type: 'bool',
describe: '提交并审核',
value: false
},
{
field: 'IsVerifyBaseDataField',
label: '验证基础资料',
type: 'bool',
describe: '是否验证所有的基础资料有效性,布尔类,默认false(非必录)',
value: true
},
{
field: 'StepBySubmitAndAudit',
label: '分步审核',
type: 'string',
value: true
}
}
通过上述配置,我们可以确保所有必要的数据都已正确转换并准备好写入金蝶云星空系统。执行批量保存操作时,可以选择是否自动提交和审核,以及是否验证基础资料有效性等选项,以满足不同业务场景下的数据处理需求。
总结
通过以上步骤,我们成功实现了从小满客户到金蝶云星空系统的数据ETL转换与写入。在这个过程中,我们利用了轻易云数据集成平台提供的丰富功能,包括全异步、多种异构系统集成以及灵活的数据解析与转换能力,从而确保了不同系统间的数据无缝对接和高效处理。