背景
某大型企业归档处理数据比较多,因此在搭建应用时提出一个这样的需求:期望能提供一个智能归档的功能,也就是给客户提供一个地方上传附件,而明道云可以根据客户上传的附件名称自动匹配相应的数据,进行文件自动归档的操作。
方案
提取附件的名称,通过文件名称查找对应的数据,然后更新数据
实操
通过分析得出了三个解决方案
我们先建立两个表
【归档数据】
第一种
使用代码块提取文件名,工作流匹配工作表数据,然后通过链接更新数据
第二种
使用代码块提取文件名,工作流匹配工作表数据,将附件转换成 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 “效果图”