通过阿里云工业互联网平台集成的工业应用在项目交付过程中,经常会遇到需要与企业已有的(ERP)系统进行数据集成,本篇最佳实践介绍了怎么用使用平台的边缘数据集成功能通过最少改造工作,来快速集成。

场景一:部署在企业内部的ERP数据集成

场景描述

安装在企业内网的传统ERP系统(例如用友T6/U8,金蝶K3等),在不改造现有的ERP系统的前提下,将基础数据和业务数据同步到数据工厂以及数字工厂上运行的工业应用。

架构示意图
架构示意图
配置数据集成任务

第一步:数据源定义

参考文档定义数据库类型数据源。数据源启用增量监控,并且按照指引文档配置数据库。

第二步:同步基础数据到数字工厂主数据

一般从ERP中同步到数字工厂的主数据包括:人员、供应商、客户、物料、物料类型、计量单位。以人员主数据为例,边缘数据集成中新建一个边缘数据集群任务,任务的输入节点选择数据库增量类型,任务的转换节点把数据转换成人员主数据要求的格式,任务的输出节点选择主数据类型。人员主数据
(1)输入节点:数据库增量测试
(2)配置转换节点
/**
 * 客户实现: transform()转换函数
 * 这是脚本转换器的第一个转换函数,负责将 数据来源(如数据库变换的数据) 转换成 目标数据格式,如主数据,服务模型数据,物联网数据等
 * 示例代码是数据源的数据转换成iot工业数字工厂的人员主数据格式
 * @param eventType为事件类型,对于数据库事件有 insert,update,delete
 * @param msgPayload 为需要转换的目标数据,注意其格式是一个Map,对应Java的格式为Map<String, Object>
 * @context 系统上下文参数
 * @return 返回转换后的数据格式,必须也为一个Map,即数据输入为Map,转换格式后还是为Map,如果返回值是null,这条数据将被忽略。
 */
function transform(eventType, msgPayload, context) {
   let masterData = new iotPluginApi.newMap();
   masterData["name"]=msgPayload["FName"];
   masterData["id"]=msgPayload["FItemID"];
   masterData["phone"]=msgPayload["FMobilePhone"];
   masterData["postcode"]=msgPayload["cPersonEmail"];

   return masterData;
}
(3)输出节点:主数据人员

完成以上三个节点的配置后,保存当前编辑中的边缘数据集成并完成下载配置就可以生效了,系统将监控边缘端的数据库中t_Base_Emp表中数据变化,然后同步到数字工厂中的人员主数据中,并推送给实现主数据集成的工业应用。

第三步:同步ERP的数据到数字工厂中MES应用

同步ERP的生产工单到MES为例,边缘数据集成中新建一个边缘数据集群任务,任务的输入节点选择数据库增量类型,任务的转换节点把数据转换成服务模型要求的格式,任务的输出节点选择服务依赖类型。服务依赖
(1)输入节点:数据库增量icmo
(2)配置转换节点
/**
 * 客户实现: transform()转换函数
 * 这是脚本转换器的第一个转换函数,负责将 数据来源(如数据库变换的数据) 转换成 目标数据格式,如主数据,服务模型数据,物联网数据等
 * 如下的代码是一个示例:仅供参考,需要根据您的实际业务场景转换逻辑进行编写
 * 示例代码是数据源的数据转换成iot工业数字工厂的人员主数据格式
 * @param eventType为事件类型,对于数据库事件有 insert,update,delete
 * @param msgPayload 为需要转换的目标数据,注意其格式是一个Map,对应Java的格式为Map<String, Object>
 * @context 系统上下文参数
 * @return 返回转换后的数据格式,必须也为一个Map,即数据输入为Map,转换格式后还是为Map
 */
function transform(eventType, msgPayload, context) {
   let masterData = new iotPluginApi.newMap();
   let fstatus = msgPayload["FStatus"];
   let checkDate= msgPayload["FCheckDate"];//制定时间
   if(checkDate > 1590940800000) {
      if(fstatus == 1){
        let planCommitDate = msgPayload["FPlanCommitDate"];
         masterData["workorderCode"] = msgPayload["FBillNo"];
         masterData["planStartTime"] = planCommitDate;//计划开工日期
         masterData["planEndTime"] = msgPayload["FPlanFinishDate"];//计划完工日期
         masterData["departmentCode"] =msgPayload["FWorkShop"];//生产部门
         masterData["quantity"] = msgPayload["FAuxQty"];//生产数量
         masterData["eventType"] =eventType;
         let fItemID = msgPayload["FItemID"];//存货编码
         if(eventType === 'delete'){
            masterData["materialCode"] = fItemID;
         } else {
         var invCode = fItemID;
         var sql = "SELECT * FROM t_ICItem where FItemID=" + invCode;
         //查询数据库关联数据
         var result = iotPluginApi.iotSqlSelect(sql);
         console.log("获取到存货数据: "+ result);
         if (result.code == 200 && result.data.length > 0) {//获取存货编码
            let materialCode = (result.data)[0].FNumber;
            masterData["materialCode"] = materialCode;
         } 
      }
      return masterData;
   }
   //过期的数据丢掉不上报,直接return null
   return null;
}
(3)输出节点:服务依赖服务依赖

完成以上三个节点的配置后,保存当前编辑中的边缘数据集成并完成下载配置就可以生效了。

(4)定义服务集成

对于服务依赖的节点,需要定义服务集成确认服务的提供方和服务依赖方。新建一个集成配置,服务依赖方选择工业八爪鱼,服务选择生产执行服务服务提供方选择数字工厂上开通的MES应用。集成

系统将监控边缘端的数据库中ICMO表中数据变化,转换后调用MES提供的getWorkorder接口。

场景二:部署公有云上的SaaS化的ERP数据集成

场景描述

ERP系统为公有云的SaaS应用服务端(例如金蝶云),企业购买开通以后没办法直接访问到数据库,这种往往通过开放OpenAPI的方式进行数据集成,一般采用定时访问API(不需要修改ERP代码)和实现一个HTTP接口由ERP的代理应用来调用上报数据。

架构示意图
云架构示意图
配置数据集成任务

第一步:数据源定义

参考文档定义API类型数据源

第二步:同步基础数据到数字工厂主数据

一般从ERP中同步到数字工厂的主数据包括:人员、供应商、客户、物料、物料类型、计量单位。以人员主数据为例,边缘数据集成中新建一个边缘数据集群任务,任务的输入节点选择API上报类型,任务的转换节点把数据转换成人员主数据要求的格式,任务的输出节点选择主数据类型,ERP的代理应用调用数字工厂发布的API上报人员主数据。人员主数据同步
(1)输入节点:API上报,选择API类型的数据源,定义一个API的路径,比如取名/reportDataAPI上报

ERP的代理应用就可以调用http://192.168.1.102:8089/reportData,上报人员主数据;

(2)配置转换节点,把接口上传的参数结构体数据结构转换成数字工厂定义的人员主数据结构;

(3)输出节点:主数据人员

完成以上三个节点的配置后,保存当前编辑中的边缘数据集成并完成下载配置就可以生效了,系统将把ERP代理应用上报的数据,然后同步到数字工厂中的人员主数据中,并推送给实现主数据集成的工业应用。

第三步:同步ERP的数据到数字工厂中MES应用

同步ERP的生产工单到MES为例,边缘数据集成中新建一个边缘数据集群任务,任务的输入节点选择API查询类型,任务的转换节点把数据转换成服务模型要求的格式,任务的输出节点选择服务依赖类型。同步工单
(1)输入节点:API查询,设置定时查询的周期,比如每10分钟查询一次(0 */1 * * * ?),选择API类型的数据源以及API的接口访问路径定时

(2)配置转换节点

(3)输出节点:服务依赖服务依赖

完成以上三个节点的配置后,保存当前编辑中的边缘数据集成并完成下载配置就可以生效了。

(4)定义服务集成

对于服务依赖的节点,需要定义服务集成确认服务的提供方和服务依赖方。新建一个集成配置,服务依赖方选择工业八爪鱼,服务选择生产执行服务服务提供方选择数字工厂上开通的MES应用。集成

系统将每10分钟调用ERP开放的接口把查询的数据结果转换后调用MES提供的getWorkorder接口。