电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

手把手教你“分享附件”

来源:金蝶云社区作者:金蝶2024-09-232

手把手教你“分享附件”


想要显示“附件下载次数”,看这里发布后,很多小伙伴强烈要求小编出一个续集,讲讲如何实现附件分享功能的开发。因此,小编又带着沉甸甸的干货走来了。




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格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信