背景需求
本人的需求是在节点后插入自定义接口,将该流程的所有附件的下载地址传输给第三方网站。
理论(不一定正确)
我是按照断点调试去一步一步跟踪,看到了他的sql语句
结论如下:
1 获取表名称及请求id
在接口的方法里面
我们可以通过 下面的方法 获取到 表单名称和requestid
//获取到该流程的表单名称
String billTableName = requestInfo.getRequestManager().getBillTableName();
//获取请求requestid
String requestid = requestInfo.getRequestid();
2 获取附件传输的docid
根据这两个参数我们可以得到这个请求的表单所有信息
select * from formtable_main_20 where requestid=33034
我这个流程没有几个字段所以信息就这么点
最主要的是得到fjcs这个字段里面的docid
3 根据docid获取到 imagefileid
docid与imagefileid关联是在这个表里面
select * FROM docimagefile
然后附件都是存储在这个表里面的
select * FROM imagefile
4 剩下的是根据 imagefile表里面的存放路径进行下载了
这里有两种方式:第一种自定义一个api进行代码编写。(记得把自定义的api添加到免登录路径)
**第二种是走他写好的下载api ddcode这个参数得传 不然就要登录 **
http://localhost:8080/weaver/weaver.file.FileDownload?fileid=1742&download=1&requestid=&ddcode=6432f8a6641823a6
代码
private String getfileurlByrequsetID(RequestInfo requestInfo) {
ArrayList result=new ArrayList();
//获取到该流程的表单名称
String billTableName = requestInfo.getRequestManager().getBillTableName();
//获取请求requestid
String requestid = requestInfo.getRequestid();
//通过 请求id+表名 获取 fjcs 的docid
RecordSet set =new RecordSet();
String sql="select fjcs from "+billTableName+" where requestid = ?";
set.executeQuery(sql,requestid);
ArrayList docids=new ArrayList();
//这个 不管是几个ids 都是放在[0]里面的 用逗号隔开的
while (set.next()){
docids.add( set.getString("fjcs"));
}
//通过docids 获取到 fileid 以及 名称
//拼接
sql ="select imagefileid AS ID , imagefilename as name FROM docimagefile WHERE docimagefile.docid IN ("+docids.get(0)+") ";
//执行
set.executeQuery(sql);
String id="";
String name="";
String url="";
while (set.next()){
id=set.getString("ID");
name=set.getString("name");
//对应id 和 name 进行 拼接
url=geturl(id);
HashMap t=new HashMap();
t.put("filename",name);
t.put("url",url);
result.add(t);
}
return JSONUtil.toJsonStr(result);
}
// 这个是拼接自己对应的ip+端口号
private String geturl(String fileid){
String ddcode=getFileDecode(new Integer(fileid));
//自己进行拼接端口号
String oAurlprefix = ZycUtil.getOAurlprefix();
String url=oAurlprefix+"weaver/weaver.file.FileDownload?fileid="+fileid+"&download=1&requestid=&ddcode="+ddcode;
return url;
}
//这是 泛微官方的GetReqResourceCmd 这个类下面的方法 不生成ddcode 的话 直接下载需要登录
private static String getFileDecode(int var0) {
DesUtils var1 = null;
try {
var1 = new DesUtils();
} catch (Exception var5) {
}
String var2 = "1_" + var0;
try {
var2 = var1.encrypt(var2);
} catch (Exception var4) {
}
return var2;
}