明道云对接金蝶,感受零代码的灵活韧性

分享 零代码  收藏
0 / 814

1.png

文/明道云实施顾问 周亮

编辑/邵可歆

说到对接,我想诸多企业的业务软件开发者都会摇摇头。因为对接财务系统的要求又多又严格。除了要做好应用表单的对接以外,还要对接基础资料表单。另外,对接的系统还需要遵循金蝶的业务流程体系、结构和参数类型等,充分考虑兼容性。有的传统业务软件需要通过 SQL 写上脚本,独立开通与金蝶的某些表单对接,开发成本高。

如果用明道云搭建应用,就可以非常快速、灵活、方便地与金蝶双向对接,大大降低开发成本。明道云也是开放型 API 应用平台,可以通过 API、Webhook 调取和推送数据,从而实现数据双向对接。为了让大家能够快速了解对接方式,我来举例说明。

案例解述

案例背景:业务员在明道云处理项目管理的业务,并将项目的采购合同同步推送给金蝶系统。

看似短短的两句话简约而不简单,我们来分析需要对接多少表单:

  • 采购合同
  • 采购合同明细
  • 项目管理清单
  • 采购部门
  • 付款条件
  • 供应商
  • 物料
  • 税码税率表

表单搭建完成之后,我们就正式开始对接配置了。

一、金蝶向明道同步基础数据

由金蝶请求明道 API 写入数据,这里可以设置字段别名。别名不是必须设置的,但在较为正规的数据传输同步中,使用别名可以减少后期维护的复杂程度。当金蝶发生数据的增、删、改时,相关数据都可以同步到明道云。

注意:为什么要将金蝶系统的基础资料推送到明道?因为基础表的数据必须双方同步,否则推送采购合同的时候无法识别基础信息,就会失败!
2.png

3.png

4.png

二、配置金蝶对接明道云的工作流

  1. 获取授权秘钥:通过 Webhook 获取最新授权秘钥。
    5.png
  2. 组装采购合同的业务数据,通过代码块将不同的数据来源解析金蝶代码。
    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
}
  1. 组装采购合同明细的业务数据。
    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) }
  1. 将解析出来的采购合同的值更新到同步日志表单的同步数据字段中。
    8.png
  2. 将解析出来的采购合同明细的值更新到“同步日志-明细表单”的同步数据字段暂存。(此时的采购合同明细组装字段中就包含了采购合同的组装数据)
    9.png
  3. 再一次组装接口参数,此参数是为了推送 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 }
  1. Webhook 发送数据请求,如果同步成功就会返回成功结果,如果失败也会返回失败结果。
    11.png
  2. 最后解析返回结果。

12.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;
}

三、录入数据

创建采购合同记录,主表录入项目信息、供应商、采购部门、付款条件、子表录入物料、税码税率、计价数量和含税单价。
13.png

四、开始同步

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

15.png

金蝶系统的对接表单都不是独立存在的,所以只要存在关联表的记录,就要将关联表进行对接,同步交互数据。基础数据同步之后才可以将业务数据进行对接和推送。

总结

明道云和金蝶对接的场景非常多,除了上述例子以外还有同步工时统计、应付款、应收款、采购合同、收入确认单、应付确认单、采购申请单等。通过明道云与金蝶庞大的数据链对接,更加彰显了零代码平台的韧性,不仅应用搭建灵活,对接也是游刃有余。感兴趣的伙伴们可以进入明道云亲自体验下。