手把手教你“分享附件”

自“想要显示“附件下载次数”,看这里”发布后,很多小伙伴强烈要求小编出一个续集,讲讲如何实现附件分享功能的开发。因此,小编又带着沉甸甸的干货走来了。
1 需求背景
在A单据的附件面板上,对于已上传的附件,可以实现分享附件到其他单据面板上。例如,采购申请单在生成采购订单之后,可以选择是否把附件分享给对应单号的采购申请单。
2 实现方案
针对上述需求,实现方案的整体思路为:通过给附件面板添加自定义按钮,点击自定义按钮,弹出一个动态表单,动态表单上显示主实体对象,以及主实体对象对应的业务单据,可以选择需要分享的目标单据,选择完之后点击确认分享按钮实现附件分享的功能,具体的实现步骤如下:
1、为附件面板添加自定义按钮(如上传、下载)。
实现代码如下:
1public class ShareAttementPlugin extends AbstractBillPlugIn implements AttachmentOperaClickListener {
2private static final String KEY_ATTACHMENTPENAL = "attachmentpanel";
3@Override
4public void afterBindData(EventObject e) {
5 AttachmentPanel panel = this.getControl(KEY_ATTACHMENTPENAL);
6 List<AttachBtnOption> btns = new ArrayList<AttachBtnOption>();
7 btns.add(new AttachBtnOption("attoption_share", new LocaleString("附件分享")));
8 panel.addAttachOperaBtn(btns);
9 super.afterBindData(e);
10}效果图如下所示:

按钮添加示例
2、创建动态表单,作为选择分享的目标单页面,包括主实体对象列表和业务点单据列表。
在动态表单中添加两个flex面板。往上面的flex面板中插入单据列表控件并绑定主实体对象,下面的flex面板是用代码显示对应主实体对象业务单据列表的位置,如下图:

flex面板设置示例
3、监听附件分享按钮,并实现页面跳转到分享附件→选择实体(即上面创建的动态表单),实现代码如下:
1@Override
2 public void registerListener(EventObject e) {
3 //监听附件面板的自定义按钮
4 AttachmentPanel att = this.getView().getControl(KEY_ATTACHMENTPENAL);
5 att.addOperaClickListener(this);
6 super.registerListener(e);
7 } 1@Override
2 public void attachmentOperaClick(AttachmentOperaClickEvent e) {
3 AttachmentPanel att = (AttachmentPanel) e.getSource();
4 Map<String, String> attinfo = (Map<String, String>) e.getAttachmentInfo();
5 List<Map<String, Object>> atts = att.getAttachmentData();
6 if (e.getOperaKey().equals("attoption_share")) {
7 for (Map<String, Object> map : atts) {
8 String uid = (String) map.get("uid");
9 if (uid.equals(attinfo.get("uid"))) {
10 FormShowParameter fsp = new FormShowParameter();
11 // 设置弹出页面的编码
12 fsp.setFormId("kded_shareattchment");
13 fsp.setCustomParams(map);
14 // 设置弹出页面标题
15 fsp.setCaption("附件分享-选择实体对象");
16 // 设置弹出页面打开方式,支持模态,新标签等
17 fsp.getOpenStyle().setShowType(ShowType.MainNewTabPage);
18 // 弹出页面对象赋值给父页面
19 this.getView().showForm(fsp);
20 break;
21 }
22 }
23 }
24 AttachmentOperaClickListener.super.attachmentOperaClick(e);
25 }4、根据选择的实体对象,选择指定单号的单据进行附件分享,具体分为以下三步:
第一步,添加监听事件,实现代码如下:
1public void registerListener(EventObject e) {
2 // 添加实体对象列表控件选择行操作的监听
3 BillList billList = this.getView().getControl("kded_billlistap");
4 billList.addListRowClickListener(this);
5 // 添加“确认分享”按钮的监听事件
6 Button btnok = this.getView().getControl("btnok");
7 btnok.addClickListener(this);
8 super.registerListener(e);
9 }第二步,选择主实体对象(例如采购申请单、采购订单),并根据主实体对象,在本页面显示对应实体的业务单据列表,实现代码如下:
1@Override
2 public void listRowClick(ListRowClickEvent evt) {
3 //获取选择行
4 ListSelectedRowCollection listSelectedRowCollection = evt.getListSelectedRowCollection();
5 int size = listSelectedRowCollection.size();
6 if (size > 1) {
7 this.getView().showMessage("只能选择一个实体对象");
8 evt.setCancel(true);
9 return;
10 } else if (size == 0) {
11 return;
12 }
13 ListSelectedRow currentListSelectedRow = evt.getCurrentListSelectedRow();
14 String entityNumber = currentListSelectedRow.getNumber();
15 ListShowParameter listShowParameter = new ListShowParameter();
16 // 保存子页面id到缓存,方便后面获取子页面
17 this.getPageCache().put("childPageId", listShowParameter.getPag手把手教你“分享附件”
自“想要显示“附件下载次数”,看这里”发布后,很多小伙伴强烈要求小编出一个续集,讲讲如何实现附件分享功能的开发。因此,小编又带着沉...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



