标签:
文件模板、模板上传
需求背景:
系统需要提供统一的文档管理功能,对于需要提供报告、证明文件,如差旅报销单需上传出差报告、付款报账单需上传垫付证明等业务场景,以供管理员上传维护Excel、Word等类型文件模板,让用户填单时可以下载文件模板进行填写。
实现方案:
维护一份基础资料,用于存储单据实体对象与文件模板附件的数据。
在业务单据上提供模板下载按钮,点击按钮即根据单据实体获取对应的文件模板附件供用户选择下载。(可根据实际业务需要调整)
实现步骤如下:
1. 新建基础资料【模板】,添加基础资料字段[单据类型]绑定基础资料类型【主实体对象(bos_entityobject)】,添加附件面板,布局如图。基本信息面板的字段均设置为提交锁定,附件面板设置为查看锁定。
[取消]按钮绑定“关闭”操作;
[保存]按钮绑定“提交”操作或者“保存”操作(需将操作后状态改为“已提交”),并把“查看可见”去掉,在下载文件模板界面不显示。
保存后基本信息面板的字段锁定不可编辑,文件模板附件管理员仍可进行编辑,删除或者上传等,维护文件模板附件。
2. 业务单据上添加模板下载按钮,如“下载出差报告模板”,标识(kded_downtemplate)。
维护模板下载逻辑插件,监听该按钮的itemClick事件,在itemClick事件获取当前业务单据的实体标识,通过该实体标识匹配步骤1【模板】的[单据类型]的主实体对象编码以获取符合条件的基础资料数据,通过弹窗展示给用户,【模板】的附件面板即可选择下载模板。
实现代码:
public class TripReimburseBillEdit extends AbstractBillPlugIn implements TipsListener { @Override public void registerListener(EventObject e) { super.registerListener(e); this.addItemClickListeners("kded_downtemplate"); } @Override public void itemClick(ItemClickEvent evt) { super.itemClick(evt); String itemKey = evt.getItemKey(); switch(itemKey) { case "kded_downtemplate": QFilter filter = new QFilter("kded_billentity.number", QCP.equals, getView().getEntityId()); //根据当前表单实体ID=模板配置的主实体对象查询文件模板附件 DynamicObject fileTemplate = QueryServiceHelper.queryOne("kded_filetemplate", "id", filter.toArray()); if(fileTemplate != null) { BaseShowParameter showParameter = new BaseShowParameter(); showParameter.setFormId("kded_filetemplate"); showParameter.setPkId(fileTemplate.getLong("id")); showParameter.getOpenStyle().setShowType(ShowType.Modal); //设置表单操作状态为查看 showParameter.setStatus(OperationStatus.VIEW); getView().showForm(showParameter); } else { getView().showMessage(String.format("单据类型[%s]的相关模板为空,请先配置!", getModel().getDataEntityType().getDisplayName())); } break; default: break; } } }
实现效果:
1. 维护【模板】文件模板附件
2.点击“下载出差报告模板”打开模板下载界面即可进行下载。
文件模板维护-元数据.rar(15.73KB)
文件模板维护-代码.rar(1.02KB)
推荐阅读