用明道云实现智能归档的三种解决方法

文/李纪磊 陈涛

编辑/杜逸敏

背景

某大型企业归档处理数据比较多,因此在搭建应用时提出一个这样的需求:期望能提供一个智能归档的功能,也就是给客户提供一个地方上传附件,而明道云可以根据客户上传的附件名称自动匹配相应的数据,进行文件自动归档的操作。

难点与解决思路

根据客户的需求,我们需要解决三个问题。

  1. 附件名称

明道云中提取附件的名称有两种方式,一种是通过附件链接提取,另一种就是通过明道云自动生成的API接口获取。

  1. 通过文件名查找对应的数据

可以通过工作流获取到,也可以通过明道云自动生成的API接口获取到。

  1. 更新附件的数据

可以通过更新节点,将获取的链接更新到附件上,也可以通过明道云自动生成的API接口进行更新,二者各有优劣。前者操作简便快捷,但是文件名称不受我们控制;后者可以控制附件名称,但是操作比较麻烦。具体流程逻辑见下方的两张流程图。

实操

通过分析我总结出三个解决方案。三个方法都需要先建立两张基础表,表结构分别如下。

归档数据

字段名

字段类型

字段配置

自动编号

自动编号

固定值(MDY)+创建时间(YYYY)+六位自动编号

状态

单选

选项:待归档、已归档

归档文件

附件

智能归档

字段名

字段类型

字段配

创建人

人员

默认值为当前用户,只读

创建时间

日期

默认值为此刻,只读

附件

附件

建成工作表后,我们一起来看看三个解决方法。

1.工作流直接匹配更新数据

使用代码块提取文件名,工作流匹配工作表数据,然后通过链接更新数据

2.通过API请求节点更新数据

使用代码块提取文件名,工作流匹配工作表数据将附件转换成Base64后,通过API请求节点调取数据的接口,更新数据。

3.代码块节点调取接口更新数据。

通过事件触发后,直接使用代码块节点在里面写代码调取明道云的工作表接口,获取附件根据附件名查询【归档数据】的数据,然后进行进行归档。

代码块共享

上面解决方案中所用到的代码块都在下面列出来了,可供大家直接复制使用。

1.提取附件名

var filelist=JSON.parse(input.filelist?input.filelist:'[]');
//正则匹配文件名
var backgroundImageRegex=/(?<=attname=).+(?=&e)/;
var arr=[];
var file_path="";
for( var key in filelist){
  var ming={};
  ming.url=filelist[key];
  file_path=decodeURI(filelist[key].match(backgroundImageRegex))
  ming.name=file_path.replace(/(.*\/)*([^.]+).*/ig,"$2");
  arr.push(ming);
}
output={arr:arr}

2.附件转换为Base64

var fetch=require('node-fetch');
var data= await fetch(input.imgurl).then(r => r.buffer()).then(buf => buf.toString('base64'));
output={data:data}

3.调取API获取附件名称,并根据名称查询数据归档

智能归档,根据附件的名称,自动进行查询合同编号并进行归档操纵

const fetch = require('node-fetch');
// 智能归档信息
var rowId=input.rowId;
var appKey="a711ac208151a185";
var sign="ZjlkMTM0NjIwZjM0ZDFlYzg4NDBiZWM2M2QwZTQ4YzVjMDdjMWFhYTUyNjU1YzAxMjI1MjAwYTE5ZDMwMmY0Mg==";
var worksheetId="zngd";
var url='https://api.mingdao.com/v2/open/worksheet/getRowByIdPost';
var data={
    "appKey": appKey,
    "sign": sign,
    "worksheetId": worksheetId,
    "rowId": rowId
};
var token={};
var wei=[];
var yi=[];


const res = await   fetch(url,{
    method:"post",
    headers:{
       'Content-Type':'application/json; charset=UTF-8',
        'Authorization':token
    },
    body:JSON.stringify(data)
}).then(function(response){
    if(response.ok){
 return  response.json();   
    }else{
  return   {"error":"无数据"};
}
}).catch(function(err){
   return   {"error":"Fetch错误:"+err};
});
var result = await   res;
var fujian= JSON.parse(result.data["gdwj"]);
// 法律文本数据
var url_hetong='https://api.mingdao.com/v2/open/worksheet/getFilterRows';
var result_hetong={};
var data_hetong={};
var token_hetong='';
// 更改数据链接
var url_hetong_edit="https://api.mingdao.com/v2/open/worksheet/editRow";
var data_hetong_edit={};
var fileBase64="";
for (let index = 0; index < fujian.length; index++) {
    const element = fujian[index];
    //将附件
    fileBase64= await fetch(element['DownloadUrl']).then(r => r.buffer()).then(buf => buf.toString('base64'));
   
    // 获取法律文本
    data_hetong={ 
        "appKey": appKey,
        "sign": sign,
        "worksheetId": "dgdsj",
        "pageSize": "100",
        "pageIndex": "1",
        "viewId":"",
        "filters":[
            {
                "controlId": "zdbh",
                "dataType": 33,
                "spliceType": 2,
                "filterType": 2,
                "value": element['file_name'].replace(/(.*\/)*([^.]+).*/ig,"$2")
            }
        ]
    };
    const res_hetong = await   fetch(url_hetong,{
        method:"post",
        headers:{
           'Content-Type':'application/json; charset=UTF-8',
            'Authorization':token_hetong
        },
        body:JSON.stringify(data_hetong)
    }).then(function(response){
        if(response.ok){
     return  response.json();   
        }else{
      return   {"error":"无数据"};
    }
    }).catch(function(err){
       return   {"error":"Fetch错误:"+err};
    });
    result_hetong = await   res_hetong;
    if(result_hetong.data.total==0){
        wei.push(element['file_name']);
        continue;
    }
    yi.push(element['file_name']);
    // 修改数据
    data_hetong_edit={
        "appKey": appKey,
        "sign": sign,
        "worksheetId": "dgdsj",
        "rowId": result_hetong["data"]["rows"][0]["rowid"],
        "controls": [
          {
            "controlId": "fujian",
            "editType": "1",
            "valueType": "2",
            "controlFiles": [
                {
                  "baseFile": fileBase64,
                  "fileName": element['file_name']
                }
              ]
           
          }
        ],
        "triggerWorkflow": true
      };
      const res_hetong_edit = await   fetch(url_hetong_edit,{
        method:"post",
        headers:{
           'Content-Type':'application/json; charset=UTF-8',
            'Authorization':token_hetong
        },
        body:JSON.stringify(data_hetong_edit)
    }).then(function(response){
        if(response.ok){
     return  response.json();   
        }else{
      return   {"error":"无数据"};
    }
    }).catch(function(err){
       return   {"error":"Fetch错误:"+err};
    });
}
var guidangString="";
if(wei.length>0){
  guidangString="未匹配到归档文件:"+wei.toString();
}
if(wei.length>0&&yi.length>0){
  guidangString+=",";
}
if(yi.length>0){
  guidangString+="已匹配到归档文件:"+yi.toString();
}
output = {output:guidangString };

关于HAP

HAP(Hyper Application Platform)超级应用平台可以帮助用户零代码构建企业应用,用户不需要代码开发就能够搭建出用户体验上佳的销售、运营、人事、采购等核心业务应用,打通企业内部数据。HAP还具备超自动化引擎,可以全面自动化复杂和重复的业务流程。运用HAP的集成中心与完整的API对接能力,用户可以轻松地将HAP与外部系统集成。除此之外,HAP还具备很高的可组合性,国际化支持,并支持云原生架构,实现了多云部署能力。通过插件架构,HAP正在逐步建立起繁荣的实施与开发生态。

HAP可以帮助企业大大节省软件费用、降低定制开发的成本和时间,拥有一个极度灵活和易用的数字化平台,是企业数字化建设的重要工具。目前已有上百万用户使用,付费企业超过4000家,包括可口可乐、复星集团、广汽本田、赛力斯汽车、中国移动、中石化、中铁集团、银鹭食品、民生银行、迪卡侬、艾默生电气、泰科电子、四川航空、东方证券、洲际酒店、科大讯飞、柳工集团、沃尔玛、中国烟草、三菱银行等知名客户。

2021年5月,明道云获得海纳亚洲近亿元投资。公司目前有超过130名员工,产品研发团队过半,总部位于上海漕河泾开发区,在北京、广州、深圳、成都、郑州、武汉、西安和宁波设有分支机构。公司为高新技术企业,上海市专新特精认定企业。