标签:
附件字段、分录、批量下载
需求背景:
场景:单据分录有附件字段,下载比较繁琐,需要开发一键批量下载。
分析过程:
分录上的附件字段下载时,首先要按行点击打开上传界面。然后需要挨个点下载,此时我们可以利用FileService的batchDownload接口实现附件的批量下载。
实现方案:
public class batchdownload extends AbstractFormPlugin {
@Override
public void afterDoOperation(AfterDoOperationEventArgs args) {
// TODO Auto-generated method stub
super.afterDoOperation(args);
if("batchdownload".equals(args.getOperateKey())) {
//根据附件字段id 查询到附件name和url 构造list
List<File> attachments = new ArrayList<File>();
DynamicObjectCollection entry = this.getModel().getEntryEntity("kded_entryentity");
for (DynamicObject row : entry) {
DynamicObjectCollection atts = row.getDynamicObjectCollection("kded_attachmentfield");
for (DynamicObject att : atts) {
long attid = att.getLong("fbasedataid_id");
DynamicObject attachment = QueryServiceHelper.queryOne("bd_attachment","name,url", new QFilter("id", QCP.equals, attid).toArray());
File aFile =new File(attachment.getString("name"), attachment.getString("url"));
attachments.add(aFile);
}
}
FileService fs=FileServiceFactory.getAttachmentFileService();
//userAgent:浏览器用户代理
String userAgent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36";
//构造BatchDownloadRequest对象
Dir testDir = new Dir("test2");//zip文件里的文件夹
testDir.setFiles(attachments.toArray(new File[attachments.size()]));
BatchDownloadRequest bdr = new BatchDownloadRequest("test2");
bdr.setDirs(new Dir[]{testDir});
/**
* batchDownload by OutputStream 批量下载
*/
OutputStream out = null;
try {
out = new FileOutputStream("d:/test1.zip");//下载到本地的路径
} catch (FileNotFoundException e) {
e.printStackTrace();
}
fs.batchDownload(bdr, out, userAgent);
}
}
}
实现效果:
推荐阅读