如何在单据退出时,跳过单据中某个分录特定几个字段信息的数据变更校验?原创
1人赞赏了该文章
199次浏览
未经作者许可,禁止转载编辑于2023年12月28日 14:47:22
在单据设计上,有很多页面数据是动态加载,如不绑定实体表字段,这类在afterBindData中动态渲染的数据,在页面【退出】时,会默认弹出相关编辑校验的提示信息,但想过滤特定的分录字段校验,如:取消【采购名称】和【主办人】两个字段的校验:
public void beforeClosed(BeforeClosedEvent e) { super.beforeClosed(e); DynamicObject dataEntity = this.getModel().getDataEntity(Boolean.TRUE); DynamicObjectCollection mockentry = dataEntity.getDynamicObjectCollection("mockentry"); if (mockentry == null || mockentry.isEmpty()) { return; } setEntryPropsChanged(mockentry); } private static void setEntryPropsChanged(DynamicObjectCollection mockentry) { DataEntityPropertyCollection entryProps = mockentry.getDynamicObjectType().getProperties(); IDataEntityProperty ebillName = entryProps.get("ebill_name"); IDataEntityProperty ebillCreator = entryProps.get("ebill_creator"); for (DynamicObject dynamicObject : mockentry) { DataEntityState entityState = dynamicObject.getDataEntityState(); entityState.setBizChanged(ebillName.getOrdinal(), Boolean.FALSE); entityState.setBizChanged(ebillCreator.getOrdinal(), Boolean.FALSE); if (ebillCreator instanceof BasedataProp) { IDataEntityProperty baseDataProp = entryProps.get("ebill_creator" + "_id"); entityState.setBizChanged(baseDataProp.getOrdinal(), Boolean.FALSE); } } }
通过上述在beforeClosed方法控制,设置属性元素setBizChanged,在页面初始化afterBindData中对页面分录数据进行动态渲染后,在【退出】时,确实跳过上述代码中两个分录字段的变更校验,其他字段校验依然生效保留,但实际使用中对元数据setBizChanged,是否会对后续页面加载/元数据层面有影响,建议和平台老师确认后在使用,如果帮助到您,请点赞双击收藏。