小技巧——智能归档

分享  收藏
0 / 414

背景

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

方案

提取附件的名称,通过文件名称查找对应的数据,然后更新数据

实操

通过分析得出了三个解决方案

我们先建立两个表

【归档数据】

第一种

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

第二种

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


第三种

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

三种方法使用到的代码块

提取附件名

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}

附件转换为 Base64

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

通过代码块调取 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 };

[]: https://www.mingdao.com/apps/kcshare/65e5869ef57436afda97803d “效果图”