类 F7 方式弹出表单原创
1人赞赏了该文章
68次浏览
编辑于2024年09月19日 15:43:10
需求
业务需要根据不同类型弹出对应的配置动态表单页面进行操作,配置数据不进行单独存储
思路方案
利用 DynamicObject 序列化将配置数据转成字符串存储在大文本字段
实现步骤
新建测试配置动态表单页面
编写配置表单插件
public void createNewData(BizDataEventArgs e) { String data =(String)this.getView().getFormShowParameter().getCustomParams().get("data"); if (!StringUtils.isBlank(data)) { MainEntityType entityType = this.getModel().getDataEntityType(); DynamicObject dataSource = toDynamicObject(data, entityType); e.setDataEntity(dataSource); } }
【确定】按钮事件
@Override public void afterDoOperation(AfterDoOperationEventArgs args) { super.afterDoOperation(args); String operateKey = args.getOperateKey(); if ("ok".equals(operateKey)) { OperationResult operationResult = args.getOperationResult(); if (!operationResult.isSuccess()) { this.getView().showOperationResult(operationResult); return; } MainEntityType entityType = this.getModel().getDataEntityType(); DynamicObject dataEntity = this.getModel().getDataEntity(true); String data = dynamicObjectToString(dataEntity); Map<String,Object> returnData = new HashMap<>(); returnData.put("entity",entityType.getName()); returnData.put("data", data); this.getView().returnDataToParent(returnData); this.getView().close(); }
DynamicObject 序列化
private static DynamicObject toDynamicObject(String value, MainEntityType entityType) { DynamicObjectSerializationBinder binder = new DynamicObjectSerializationBinder(entityType); DcJsonSerializer jser = new DcJsonSerializer(binder); return (DynamicObject)jser.deserializeFromString(value, (Object)null); } private static String dynamicObjectToString(DynamicObject obj) { DynamicObjectType type = obj.getDynamicObjectType(); DynamicObjectSerializationBinder binder = new DynamicObjectSerializationBinder(type); DcJsonSerializer jser = new DcJsonSerializer(binder); jser.setIsLocaleValueFull(true); binder.setOnlyDbProperty(false); return jser.serializeToString(obj, (Object)null); }
新建测试表单页面
【类型】下拉列表字段,值填写的是对应的配置页面标识
【配置】大文本字段,存储配置信息
【文本 1】文本点按编辑,测试弹出配置表单页面
编写测试表单页面插件
showForm 弹出页面标识直接取【类型】字段的值
@Override public void click(EventObject evt) { super.click(evt); FormShowParameter showParameter=new FormShowParameter(); String type=(String)getModel().getValue("soi_combofield"); showParameter.setFormId(type); showParameter.getOpenStyle().setShowType(ShowType.Modal); String data=(String)getModel().getValue("soi_config_tag"); showParameter.setCustomParam("data",data); showParameter.setCloseCallBack(new CloseCallBack(this,"f7_form")); this.getView().showForm(showParameter); }
closeCallBack 事件存储配置信息
配置页面标识和数据存储到大文本字段
@Override public void closedCallBack(ClosedCallBackEvent event) { super.closedCallBack(event); if("f7_form".equals(event.getActionId())){ Map<String,Object> returnData=(Map<String,Object>)event.getReturnData(); if(returnData!=null){ String entity=(String)returnData.get("entity"); getModel().setValue("soi_config",entity); String data=(String)returnData.get("data"); getModel().setValue("soi_config_tag",data); } } }
实现效果
开发环境版本
v6.0
注意事项
推荐阅读