如何实现在单据界面打开操作生成的其他单据原创
4人赞赏了该文章
1,097次浏览
编辑于2022年10月31日 22:52:57
关键字:操作、界面、参数传递
一、需求
在一个单据(A单据,比如办公用品登记单)的界面点击某个操作时会在操作插件生成另一个单据(B单,比如入库日志单),希望生成B单后可以直接在A单据打开B单的查看界面。
二、思路与方案
操作插件是无法打开界面的,需要将生成的B单据的单据id传递给A单据的界面插件,在界面插件去打开B单。操作的参数OperateOption有接口可以传递参数。
三、实现过程
1.在操作插件生成入库日志单,并将id传给操作的参数OperateOption;
@Override public void afterExecuteOperationTransaction(AfterOperationArgs e) { // TODO Auto-generated method stub super.afterExecuteOperationTransaction(e); DynamicObject offsupregisterbill = e.getDataEntities()[0]; //当前操作的单据数据包 DynamicObject purinlog = BusinessDataServiceHelper.newDynamicObject("kded_purinlog"); purinlog.set("billno","100000"); purinlog.set("kded_log",offsupregisterbill.get("billno")); purinlog.set("createtime", new Date()); purinlog.set("creator", RequestContext.get().getCurrUserId()); OperationResult operationResult = SaveServiceHelper.saveOperate("kded_purinlog", new DynamicObject[]{purinlog}, OperateOption.create()); if(operationResult.getSuccessPkIds()!=null){ //只能在前台打开一个单据的界面,将该单据id给操作参数OperateOption this.getOption().setVariableValue("pk",operationResult.getSuccessPkIds().get(0).toString()); } }
2.在操作执行后触发的afterDoOperation方法去取操作参数里的单据id来打开界面。
@Override public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) { super.afterDoOperation(afterDoOperationEventArgs); //取表单操作,表单操作里有OperateOption FormOperate formoperate = (FormOperate) afterDoOperationEventArgs.getSource(); if("purin".equals(formoperate.getOperateKey())&&!afterDoOperationEventArgs.getOperationResult().getSuccessPkIds().isEmpty()) { String billPk = formoperate.getOption().getVariableValue("pk"); if(billPk!=null){ //取出来的单据id不为空则打开该单据 BillShowParameter billShowParameter = new BillShowParameter(); billShowParameter.setFormId("kded_purinlog"); billShowParameter.setPkId(Long.valueOf(billPk)); billShowParameter.getOpenStyle().setShowType(ShowType.Modal); this.getView().showForm(billShowParameter); } } }
四、效果图
点击入库操作可以打开操作插件生成的入库日志单
五、开发环境版本
V5.0.0.2
六、参考资料
赞 4
4人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读