BOPF中动态控制字段属性

上一文中,介绍了动态控制字段属性的两个方法,在这里主要介绍在BOPF中的实现。这里动态控制,主要为控制字段的只读(R),可编辑(C),隐藏(H),强制输入(M),

1.CDS添加注释

要在BOPF的CDS,或者最终显示 的CDS中为每个一个需要控制的字段添加自定义控制注释,如下:

如上面的代码为YHZH字段增加了可控制注释。其中的mandatory,readOnly,enabled,在实际使用中发现,只要定义一行就可以了,暂时未发现异常。

2.BOPF添加Determinations

我的是有草稿的BOPF,自动生成了一个名为ACTION_AND_FIELD_CONTROL的Determination,如不是草稿的,或者没有此Determination,可手动添加一下,来定入代码。

BOPF中动态控制字段属性 - 第1张  | 优通SAP

在类方法ZCL_D_TRD_I_ACC_APPLY_ACTION_1->/BOBF/IF_FRW_DETERMINATION~EXECUTE中写入代码调用方法SET_FIELD_CTRL,此方法是自定义的一个方法,可查看此类方法。控制字段的必输入性,也可以在此直接写入SET_FIELD_CTRL方法的的控制,

在代码中,我从自定义表ZTRT_BOPF_FUCT_F中取出要控制字段的配置属性,然后分别按只读(R),可编辑(C),隐藏(H),强制输入(M)来进行字段控制。

BOPF中动态控制字段属性 - 第2张  | 优通SAP

3.强制输入问题

如上代码后,当设置了强制输入(M)的字段时,在SAP Fiori Elements开发的APP中,此字段名上会加入一个红色的*,以代码此字段必输。

BOPF中动态控制字段属性 - 第3张  | 优通SAP
但使用发现此字段为空时依然能正常保存,并且不会报错,查询资料后发现ODATA的这个强制输入报错,还需要我们在BOPF的Validations中写入一个检查。并且可以直接使用标准的类/BOBF/CL_LIB_V_MANDATORY_ATTR。

所以创建一个Validations:CHCK_VALUE_MANDATORY。如图

BOPF中动态控制字段属性 - 第4张  | 优通SAP

此时当在页面上字段变化 时,如此字段是强制 输入的,而此字段是空时就会所错,并提示些字段 不能为空了。