Abap 复杂选择字段的权限检查(如SELECT-OPTIONS)

Abap 复杂选择字段的权限检查(如SELECT-OPTIONS),abap,Abap,我有一个带有以下选择屏幕的自定义报告。它允许用户在执行报告时输入值范围 我想对用户输入的输入执行授权检查 为此,我对用户和选择字段使用AUTHORITY-CHECK对象 AUTHORITY-CHECK OBJECT 'P_PYEVDOC' FOR USER sy-uname ID 'BUKRS' FIELD pnpbukrs-low . 其中pnpbukrs是用户输入的选择字段 如何正确检查用户可能给出的所有可能的组合 当我提供direct pnpbukrs字段时,选择字段中的

我有一个带有以下选择屏幕的自定义报告。它允许用户在执行报告时输入值范围

我想对用户输入的输入执行授权检查

为此,我对用户和选择字段使用AUTHORITY-CHECK对象

  AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
  FOR USER sy-uname
  ID 'BUKRS' FIELD pnpbukrs-low
  .
其中pnpbukrs是用户输入的选择字段

如何正确检查用户可能给出的所有可能的组合

当我提供direct pnpbukrs字段时,选择字段中的选项将在auth中考虑。检查给出的错误

当I user pnpbukrs low时,在auth中只使用一个值。进行检查旁路。

查看包含任何数据的范围

追求

仅适用于填充低成分的范围:

尝试在“选择选项”字段上循环,并对每次迭代进行权限检查:

LOOP AT pnpbukrs ASSIGNING FIELD-SYMBOL(<line>).
    AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
                    FOR USER sy-uname
                    ID 'BUKRS'
                    FIELD <line>-low.
ENDLOOP.

如果选择表包含一般条目、区间、排除条目或排除区间,则应首先获得与选择表对应的公司列表,其中。。。在选择表中;我们将处理所有这些类型的过滤器,然后对每一家真正的公司进行权威检查

例如,我假设公司将取自表T001:

PS 1:如果目标只是从给定表中选择授权数据,则可以使用>=7.50


PS 2:对于权限检查,用户sy uname没有必要提及,因为这是默认设置。

低位循环将不起作用,因为高位和区间的字段将不被检查。@Isuru您可以再添加一行检查高位value@Binh在这种情况下也可以检查范围,比如2000到3000之间的值?在这种情况下如何检查排除的间隔?就像给定范围以外的公司代码一样。@Isuru在pnpbukrs中使用bukrs进行选择时,它已经根据范围表pnpbukrs进行了筛选,所以您不必担心。很好的一个Sandra。我认为IN子句中的值应该是pnpbukrs[],而不是pnpbukrs,因为它是一个带有标题行的内部表。@Binh和Sandra;这是genius,获取了值并将其循环到auth中。检查后,它就工作了。@Dorad,不需要在不可能出现混淆的位置添加[]:只允许在后面添加一个选择表,因此语法检查器/编译器将忽略标题行。它只需要在参数、清除、。。。
SELECT bukrs FROM t001 WHERE bukrs IN pnpbukrs INTO TABLE @DATA(companies).

LOOP AT companies ASSIGNING FIELD-SYMBOL(<company>).
  AUTHORITY-CHECK OBJECT 'P_PYEVDOC'
                ID 'BUKRS' FIELD <company>.
  IF sy-subrc <> 0.
    " this company is not authorized, do something
  ENDIF.
ENDLOOP.