多选基础资料-从后端赋值并保存原创
金蝶云社区-Mrchen
Mrchen
5人赞赏了该文章 3,256次浏览 未经作者许可,禁止转载编辑于2022年12月16日 13:54:14

一、需求阐明

上传图片

image.png

四大名著为多选基础资料。从页面上可以看出四大名著(多选基础资料)不可编辑。所以当提交数据并且提交成功后,在后端为四大名著赋值、在后端保存数据记录、并且展示出完整的页面数据。

二、分析实现

    针对此需求使用表单基类(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");
            }
        }
    }
}

三、效果预览

image.png

有更佳方案分享在评论区。

多选基础资料前端控件赋值

赞 5