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









