文/明道云实施顾问 周亮
编辑/邵可歆
说到对接,我想诸多企业的业务软件开发者都会摇摇头。因为对接财务系统的要求又多又严格。除了要做好应用表单的对接以外,还要对接基础资料表单。另外,对接的系统还需要遵循金蝶的业务流程体系、结构和参数类型等,充分考虑兼容性。有的传统业务软件需要通过 SQL 写上脚本,独立开通与金蝶的某些表单对接,开发成本高。
如果用明道云搭建应用,就可以非常快速、灵活、方便地与金蝶双向对接,大大降低开发成本。明道云也是开放型 API 应用平台,可以通过 API、Webhook 调取和推送数据,从而实现数据双向对接。为了让大家能够快速了解对接方式,我来举例说明。
案例解述
案例背景:业务员在明道云处理项目管理的业务,并将项目的采购合同同步推送给金蝶系统。
看似短短的两句话简约而不简单,我们来分析需要对接多少表单:
- 采购合同
- 采购合同明细
- 项目管理清单
- 采购部门
- 付款条件
- 供应商
- 物料
- 税码税率表
表单搭建完成之后,我们就正式开始对接配置了。
一、金蝶向明道同步基础数据
由金蝶请求明道 API 写入数据,这里可以设置字段别名。别名不是必须设置的,但在较为正规的数据传输同步中,使用别名可以减少后期维护的复杂程度。当金蝶发生数据的增、删、改时,相关数据都可以同步到明道云。
注意:为什么要将金蝶系统的基础资料推送到明道?因为基础表的数据必须双方同步,否则推送采购合同的时候无法识别基础信息,就会失败!
二、配置金蝶对接明道云的工作流
- 获取授权秘钥:通过 Webhook 获取最新授权秘钥。
- 组装采购合同的业务数据,通过代码块将不同的数据来源解析金蝶代码。
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 }
- 组装采购合同明细的业务数据。
// 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) }
- 将解析出来的采购合同的值更新到同步日志表单的同步数据字段中。
- 将解析出来的采购合同明细的值更新到“同步日志-明细表单”的同步数据字段暂存。(此时的采购合同明细组装字段中就包含了采购合同的组装数据)
- 再一次组装接口参数,此参数是为了推送 Webhook 请求。
// 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 发送数据请求,如果同步成功就会返回成功结果,如果失败也会返回失败结果。
- 最后解析返回结果。
// 当 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; }
三、录入数据
创建采购合同记录,主表录入项目信息、供应商、采购部门、付款条件、子表录入物料、税码税率、计价数量和含税单价。
四、开始同步
此时提示同步成功代表传值正确,如果传值错误或者丢失,则会显示同步失败。详情内容可以查看返回结果。
金蝶系统的对接表单都不是独立存在的,所以只要存在关联表的记录,就要将关联表进行对接,同步交互数据。基础数据同步之后才可以将业务数据进行对接和推送。
总结
明道云和金蝶对接的场景非常多,除了上述例子以外还有同步工时统计、应付款、应收款、采购合同、收入确认单、应付确认单、采购申请单等。通过明道云与金蝶庞大的数据链对接,更加彰显了零代码平台的韧性,不仅应用搭建灵活,对接也是游刃有余。感兴趣的伙伴们可以进入明道云亲自体验下。