在sm30界面校验用户是否有公司代码权限,对于用户没有公司代码权限的所在行不显示,在创建时报错。
1.对于显示和修改 ,没有权限的行不显示
MODULE exclude_auth_bukrs OUTPUT.
DATA lv_tabix TYPE sy-tabix.
LOOP AT extract.
lv_tabix = sy-tabix.
PERFORM auth_bukrs USING view_action.
IF sy-subrc <> 0.
DELETE extract INDEX lv_tabix.
ENDIF.
ENDLOOP.
DESCRIBE TABLE extract LINES maxlines.
ENDMODULE. " EXCLUDE_AUTH_BUKRS OUTPUT
FORM auth_bukrs USING iv_action TYPE c.
DATA lv_actvt TYPE tact-actvt.
DATA lv_sellist TYPE vimsellist.
CONSTANTS lc_bukrs TYPE dd03p_d-fieldname VALUE 'BUKRS'.
CONSTANTS: lc_actvt_display TYPE tact-actvt VALUE '03',
lc_actvt_change TYPE tact-actvt VALUE '02',
lc_actvt_create TYPE tact-actvt VALUE '01'.
FIELD-SYMBOLS: <fs> TYPE any,
<fs_bukrs> TYPE bukrs.
sy-subrc = 0.
CASE iv_action.
WHEN aendern." Change
lv_actvt = lc_actvt_change.
WHEN anzeigen." Display
lv_actvt = lc_actvt_display.
WHEN neuer_eintrag." New entry
lv_actvt = lc_actvt_create.
WHEN OTHERS.
RETURN.
ENDCASE.
IF lv_actvt = lc_actvt_create.
CHECK NOT vim_object IS INITIAL.
ASSIGN (vim_object) TO <fs> CASTING TYPE (vim_object).
ELSE.
ASSIGN extract TO <fs> CASTING TYPE (vim_object).
ENDIF.
ASSIGN COMPONENT lc_bukrs OF STRUCTURE <fs> TO <fs_bukrs>.
IF sy-subrc <> 0 OR <fs_bukrs> IS INITIAL.
RETURN.
ENDIF.
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD <fs_bukrs>
ID 'ACTVT' FIELD lv_actvt.
IF sy-subrc <> 0 AND lv_actvt = lc_actvt_create.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " AUTH_BUKRS
2.创建,当新建没有权限的公司代码行时,在保存时报错。
创建时需给视图创建一个事件
添加事件后创建form 即可
FORM auth_bukrs_create_entry.
PERFORM auth_bukrs USING neuer_eintrag.
ENDFORM. " AUTH_BUKRS_CREATE_ENTRY