多选基础资料-从后端赋值并保存原创
5人赞赏了该文章
3,256次浏览
编辑于2022年12月16日 13:54:14
一、需求阐明
四大名著为多选基础资料。从页面上可以看出四大名著(多选基础资料)不可编辑。所以当提交数据并且提交成功后,在后端为四大名著赋值、在后端保存数据记录、并且展示出完整的页面数据。
二、分析实现
针对此需求使用表单基类(AbstractFormPlugin)的afterDoOperation事件。代码如下:
/** * 多选基础资料后端赋值并保存 */ @Override public void afterDoOperation(AfterDoOperationEventArgs e) { super.afterDoOperation(e); // 1.获取事件源 Object source = e.getSource(); if (source instanceof Submit) { // 2.获取操作结果 OperationResult operationResult = e.getOperationResult(); List<IOperateInfo> allErrorOrValidateInfo = operationResult.getAllErrorOrValidateInfo(); // 3.判断提交是否成功 if (allErrorOrValidateInfo.size() == 0) { /** * 为四大名著多选基础资料赋值并保存 */ // 4.从四大名著引用的基础资料加载出四大名著 List<String> bookNames = Arrays.asList(new String[]{"西游记", "水浒传", "红楼梦", "三国演义"}); DynamicObject[] fourBooks = BusinessDataServiceHelper.load("kaen_book", "id", new QFilter[]{new QFilter("name", QCP.in, bookNames)}); // 5.获取页面的表单数据包 DynamicObject dataEntity = this.getModel().getDataEntity(true); DynamicObjectCollection fourgreatclassicsColl = dataEntity.getDynamicObjectCollection("fourgreatclassics"); // 6.四大名著是多选基础资料类型,数据库使用的中间表存,所以我们要将四大名著单个对象依次添加到四大名著所在的数据表 DynamicObjectCollection fourBookColl = new DynamicObjectCollection(); for (DynamicObject bookDyObj : fourBooks) { DynamicObject tempDyObj = new DynamicObject(fourgreatclassicsColl.getDynamicObjectType()); tempDyObj.set("fbasedataid", bookDyObj); fourBookColl.add(tempDyObj); } dataEntity.set("fourgreatclassics",fourBookColl); // 7.保存 OperationResult saveOperationResult = SaveServiceHelper.saveOperate(this.getView().getFormShowParameter().getFormId(), new DynamicObject[]{dataEntity}, null); if (saveOperationResult.isSuccess()) { this.getView().invokeOperation("refresh"); } } } }
三、效果预览
有更佳方案分享在评论区。
多选基础资料前端控件赋值
推荐阅读