如何在单据退出时,跳过单据中某个分录特定几个字段信息的数据变更校验?原创
金蝶云社区-集成服务云_孙文
集成服务云_孙文
1人赞赏了该文章 199次浏览 未经作者许可,禁止转载编辑于2023年12月28日 14:47:22

在单据设计上,有很多页面数据是动态加载,如不绑定实体表字段,这类在afterBindData中动态渲染的数据,在页面【退出】时,会默认弹出相关编辑校验的提示信息,但想过滤特定的分录字段校验,如:取消【采购名称】和【主办人】两个字段的校验: 

111.png

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);
        }
    }
}

222.png

通过上述在beforeClosed方法控制,设置属性元素setBizChanged,在页面初始化afterBindData中对页面分录数据进行动态渲染后,在【退出】时,确实跳过上述代码中两个分录字段的变更校验,其他字段校验依然生效保留,但实际使用中对元数据setBizChanged,是否会对后续页面加载/元数据层面有影响,建议和平台老师确认后在使用,如果帮助到您,请点赞双击收藏


赞 1