
文/明道云实施顾问 周亮
编辑/邵可歆
说到对接,我想诸多企业的业务软件开发者都会摇摇头。因为对接财务系统的要求又多又严格。除了要做好应用表单的对接以外,还要对接基础资料表单。另外,对接的系统还需要遵循金蝶的业务流程体系、结构和参数类型等,充分考虑兼容性。有的传统业务软件需要通过 SQL 写上脚本,独立开通与金蝶的某些表单对接,开发成本高。
如果用明道云搭建应用,就可以非常快速、灵活、方便地与金蝶双向对接,大大降低开发成本。明道云也是开放型 API 应用平台,可以通过 API、Webhook 调取和推送数据,从而实现数据双向对接。为了让大家能够快速了解对接方式,我来举例说明。
案例解述
案例背景:业务员在明道云处理项目管理的业务,并将项目的采购合同同步推送给金蝶系统。
看似短短的两句话简约而不简单,我们来分析需要对接多少表单:
- 采购合同
- 采购合同明细
- 项目管理清单
- 采购部门
- 付款条件
- 供应商
- 物料
- 税码税率表
表单搭建完成之后,我们就正式开始对接配置了。
一、金蝶向明道同步基础数据
由金蝶请求明道 API 写入数据,这里可以设置字段别名。别名不是必须设置的,但在较为正规的数据传输同步中,使用别名可以减少后期维护的复杂程度。当金蝶发生数据的增、删、改时,相关数据都可以同步到明道云。
注意:为什么要将金蝶系统的基础资料推送到明道?因为基础表的数据必须双方同步,否则推送采购合同的时候无法识别基础信息,就会失败!



二、配置金蝶对接明道云的工作流
- 获取授权秘钥:通过 Webhook 获取最新授权秘钥。
![5.png]()
- 组装采购合同的业务数据,通过代码块将不同的数据来源解析金蝶代码。
![6.png]()
In = input
Id = Number(In.FID)
if (isNaN(Id)) Id = 0
In.FID = Id
var model = {
"FID": 0,
"FBillNo": In.FBillNo,
"FCONTRACTNAME": In.合同名称,
"FBillTypeID": {
"FNUMBER": In.单据类型
},
"FEndDate": In.有效截止日期,
"FBeginDate": In.有效起始日期,
"FDate": In.日期,
"FSupplierId": {
"FNumber": In.供应商
},
"FPurchaseOrgId": {
"FNumber": In.采购组织
},
"FPurchaseDeptId": {
"FNumber": In.采购部门
},
"FPurchaserGroupId": {
"FNumber": In.采购组
},
"FPurchaserId": {
"FNumber": In.采购员
},
"FISINPUTDETAIL": "true",
"F_tayi_MDID": In.明道ID,
"F_tayi_Assistant1": {
"FNumber": In.合同号
},
"F_tayi_Proj": {
"FNUMBER": In.项目号
},
"FContractFin": {
"FEntryId": 0,
"FPayConditionId": {
"FNumber": In.付款条件
}
},
"FContractEntry": []
}
output = {
model: JSON.stringify(model),
FBillNo: model.FBillNo,
FID: model.FID
}
- 组装采购合同明细的业务数据。
![7.png]()
// input.MainModel = "{}" // for tests
In = input
if (In.FEntryID == "") In.FEntryID = 0;
var item = {
"FEntryID": 0,
"FMaterialId": {
"FNumber": In.物料
},
"FQty": In.数量,
"FTaxPrice": In.含税单价,
"FEntryTaxRate": In.税率,
"F_tayi_FMDID": In.明道Id,
"FEntryNote": In.备注
}
var model = JSON.parse(input.MainModel);
if (model.FContractEntry == null)
model.FContractEntry = [];
model.FContractEntry.push(item);
output = { model: JSON.stringify(model) }
- 将解析出来的采购合同的值更新到同步日志表单的同步数据字段中。
![8.png]()
- 将解析出来的采购合同明细的值更新到“同步日志-明细表单”的同步数据字段暂存。(此时的采购合同明细组装字段中就包含了采购合同的组装数据)
![9.png]()
- 再一次组装接口参数,此参数是为了推送 Webhook 请求。
![10.png]()
// input.MainModel= "{}"
var model = JSON.parse(input.MainModel)
var HasFID = Number(input.FID) > 0
var IsAudit = HasFID == false
var ValidateFlag = HasFID == false
var JsonData = {
"NeedUpDateFields": [],
"NeedReturnFields": [],
"IsDeleteEntry": "true",
"SubSystemId": "",
"IsVerifyBaseDataField": "false",
"IsEntryBatchFill": "true",
"ValidateFlag": ValidateFlag,
"NumberSearch": "true",
"InterationFlags": "",
"IsAutoSubmitAndAudit": IsAudit,
"Model": model
}
var Data = JSON.stringify(JsonData).replace(/\"/g, "\\\"");
output = { JsonData: Data, FormId: input.FormId }
- Webhook 发送数据请求,如果同步成功就会返回成功结果,如果失败也会返回失败结果。
![11.png]()
- 最后解析返回结果。

// 当 code != 100,则 IsSuccess 肯定为 false
// 当 code == 100, 且 ResponseStatus.IsSuccess == true
// 则 IsSuccess 才为 false
// IsRepeatedNumber = true 时 IsSuccess 必定是 false
In = input
R = JSON.parse(In.Data).Result
Res = R.ResponseStatus
Out = {
"IsSuccess": false,
"IsRepeatedNumber": false,
"Id": "0",
"ErrorMsgs": ""
}
output = ToOut()
/* 公用方法 */
function ToOut() {
if (In.Code != "100" && In.Code != 100) {
Out.IsSuccess = false;
Out.ErrorMsgs = "服务器异常"
} else if (Res.IsSuccess == true) {
Out.IsSuccess = true;
Out.Id = R.Id.toString();
} else if (Res.IsSuccess == false) {
errors = Res.Errors;
for (i = 0; i < errors.length; i++) {
item = errors[i];
Out.ErrorMsgs += item.Message + "\r\n"
if (item.Message.indexOf("已经被使用") != -1 || item.Message.indexOf("已经存在") != -1) {
Out.IsRepeatedNumber = true
}
}
}
return Out;
}
三、录入数据
创建采购合同记录,主表录入项目信息、供应商、采购部门、付款条件、子表录入物料、税码税率、计价数量和含税单价。

四、开始同步
此时提示同步成功代表传值正确,如果传值错误或者丢失,则会显示同步失败。详情内容可以查看返回结果。


金蝶系统的对接表单都不是独立存在的,所以只要存在关联表的记录,就要将关联表进行对接,同步交互数据。基础数据同步之后才可以将业务数据进行对接和推送。
总结
明道云和金蝶对接的场景非常多,除了上述例子以外还有同步工时统计、应付款、应收款、采购合同、收入确认单、应付确认单、采购申请单等。通过明道云与金蝶庞大的数据链对接,更加彰显了零代码平台的韧性,不仅应用搭建灵活,对接也是游刃有余。感兴趣的伙伴们可以进入明道云亲自体验下。






