允许当前用户查看的BUKRS列表



有没有办法获得允许当前用户查看的所有BUKRS的列表?

我想在opensql中使用这个列表作为过滤器。想象一下,我搜索的方法的结果将结果存储在bk_list中。然后我可以像这样使用bk_list

SELECT * FROM some_table WHERE bukrs IN bk_list

另一种方法是,基于类别CL_AUTH_OBJECTS_TO_SQL(官方支持,从ABAP 7.50开始,如AUTHORITY-CHECK的文档中所述(,在这里,程序读取来自读取的授权航空公司的航班:

DATA(authsql) = cl_auth_objects_to_sql=>create_for_open_sql( ).
authsql->add_authorization_object( EXPORTING
iv_authorization_object = 'S_CARRID'
it_activities = VALUE #( ( auth_field = 'ACTVT' value = '03' ) )
it_field_mapping = VALUE #(
( auth_field = 'CARRID'
view_field = VALUE #( table_ddic_name = 'SFLIGHT' field_name = 'CARRID' ) ) ) ).
DATA(where) = authsql->get_sql_condition( ).
SELECT * FROM sflight INTO TABLE @data(sflights) WHERE (where).

恐怕你只能一个接一个地做。大致:

SELECT bukrs
INTO TABLE @DATA(lt_t001)
FROM t001
WHERE ... . "Selection critera, if necessary
LOOP AT lt_t001
ASSIGNING FIELD-SYMBOL(<ls_t001>).
DATA(lv_tabix) = sy-tabix.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD <ls_t001>-bukrs
ID 'ACTVT' FIELD '03'. "Here you need the proper activity (display '03' /change '02' / etc.)
IF sy-subrc <> 0. "Auth check failed
DELETE lt_t001 INDEX lv_tabix.
ENDIF.
ENDLOOP.

最后,lt_t001只包含公司代码,用户有权对其进行授权。

相关内容

  • 没有找到相关文章

最新更新