FBL5N权限检查增强

根据销售组和销售办事处检查用户权限。

思路:如果用户在选择屏幕上选择了客户账户(客户编号),就通过客户编号找到对应的销售组和销售办事处,如果用户没有选择客户账户,那就等同于选择了全部销售组和销售办事处,然后循环检查是否有权限。

SE38:RFITEMAR,   FORM sel_account_check 隐式增强

FORM sel_account_check.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form SEL_ACCOUNT_CHECK, Anfang                                                                                                                    A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 2  ZFBL5N_1.    "active version
  TYPES:BEGIN OF TY_TAB01,
          VKBUR TYPE TVKBT-VKBUR,
        END OF TY_TAB01.
  DATA:LW_TAB01 TYPE TY_TAB01,
       LT_TAB01 TYPE TABLE OF TY_TAB01.

  TYPES:BEGIN OF TY_TAB02,
          VKGRP TYPE TVKGR-VKGRP,
        END OF TY_TAB02.
  DATA:LW_TAB02 TYPE TY_TAB02,
       LT_TAB02 TYPE TABLE OF TY_TAB02.

  DATA:GF_MESSAGE TYPE STRING.

  DATA:LW_KNVV TYPE KNVV,
       LT_KNVV TYPE TABLE OF KNVV.

    DATA:LW_VKGRP TYPE KNVV,
         LT_VKGRP TYPE TABLE OF KNVV.

     DATA:LW_VKBUR TYPE KNVV,
          LT_VKBUR TYPE TABLE OF KNVV.


   READ TABLE DD_KUNNR INDEX 1.
   IF SY-SUBRC = 0.
     SELECT KUNNR VKORG VTWEG SPART VKGRP VKBUR FROM KNVV INTO CORRESPONDING FIELDS OF TABLE LT_KNVV WHERE KUNNR IN DD_KUNNR.

     LT_VKGRP = LT_KNVV.
     SORT LT_VKGRP BY VKGRP.
     DELETE ADJACENT DUPLICATES FROM LT_VKGRP COMPARING VKGRP.
     LOOP AT LT_VKGRP INTO LW_VKGRP.
        LW_TAB02-VKGRP = LW_VKGRP-VKGRP.
        APPEND LW_TAB02 TO LT_TAB02.
     ENDLOOP.

     LT_VKBUR = LT_KNVV.
     SORT LT_VKBUR BY VKBUR.
     DELETE ADJACENT DUPLICATES FROM LT_VKBUR COMPARING VKBUR.
     LOOP AT LT_VKBUR INTO LW_VKBUR.
        LW_TAB01-VKBUR = LW_VKGRP-VKBUR.
        APPEND LW_TAB01 TO LT_TAB01.
     ENDLOOP.
   ELSE.
*    SELECT A~VKORG
*      INTO CORRESPONDING FIELDS OF TABLE LT_TAB01
*    FROM TVKO AS A
*    WHERE A~VKORG IN S_VKORG.

    SELECT A~VKGRP
      INTO CORRESPONDING FIELDS OF TABLE LT_TAB02
    FROM TVKGR AS A .


    SELECT VKBUR INTO CORRESPONDING FIELDS OF TABLE LT_TAB01
      FROM TVKBT
      WHERE SPRAS = '1'.
   ENDIF.


*  LOOP AT LT_TAB01 INTO LW_TAB01.
*    AUTHORITY-CHECK OBJECT 'V_VBAK_VKO'
*             ID 'VKORG' FIELD LW_TAB01-VKORG.
*    IF SY-SUBRC <> 0.
*      CONCATENATE '您没有销售组织' LW_TAB01-VKORG  '的权限' INTO GF_MESSAGE.
*      MESSAGE GF_MESSAGE TYPE 'E'.
*    ENDIF.
*  ENDLOOP.

  LOOP AT LT_TAB02 INTO LW_TAB02.
    AUTHORITY-CHECK OBJECT 'Z_VBAK_Z1'
             ID 'VKGRP' FIELD LW_TAB02-VKGRP.
    IF SY-SUBRC <> 0.
      CONCATENATE '您没有销售组' LW_TAB02-VKGRP  '的权限' INTO GF_MESSAGE.
      MESSAGE GF_MESSAGE TYPE 'E'.
    ENDIF.
  ENDLOOP.


   LOOP AT LT_TAB01 INTO LW_TAB01.
    AUTHORITY-CHECK OBJECT 'Z_VBAK_Z1'
             ID 'VKBUR' FIELD LW_TAB01-VKBUR.
    IF SY-SUBRC <> 0.
      CONCATENATE '您没有销售办事处' LW_TAB01-VKBUR  '的权限' INTO GF_MESSAGE.
      MESSAGE GF_MESSAGE TYPE 'E'.
    ENDIF.
  ENDLOOP.
ENDENHANCEMENT.
*$*$-End:   (1)---------------------------------------------------------------------------------$*$*

  DATA: ld_lines LIKE sy-index,
        ld_single_account TYPE c,
        ld_single_bukrs   TYPE c.

  READ TABLE dd_kunnr INDEX 1.
  IF sy-subrc NE 0.
    READ TABLE dd_bukrs INDEX 1.
    IF sy-subrc NE 0.
      MESSAGE w019.
    ENDIF.
  ENDIF.
  READ TABLE dd_kunnr INDEX 1.
  IF sy-subrc EQ 0.
    LOOP AT dd_kunnr TRANSPORTING NO FIELDS
                     WHERE option NE 'EQ' OR
                           sign   NE 'I'.
      EXIT.
    ENDLOOP.
    subrc = sy-subrc.                  "Arbeitsvorrat: subrc ne 0
  ELSE.
    subrc = 0.
  ENDIF.
  IF subrc EQ 0.
    SELECT SINGLE kunnr FROM knb1 INTO knb1-kunnr
           WHERE kunnr IN dd_kunnr
             AND bukrs IN dd_bukrs.
  ELSE.
    SELECT kunnr FROM knb1 INTO knb1-kunnr
           UP TO 1 ROWS
           FOR ALL ENTRIES IN dd_kunnr
           WHERE kunnr EQ dd_kunnr-low
             AND bukrs IN dd_bukrs.
    ENDSELECT.
  ENDIF.
  IF sy-subrc NE 0.
    READ TABLE dd_bukrs INDEX  1 INTO dd_bukrs.             "1569654
    MESSAGE e030(msitem).
  ENDIF.
  CLEAR knb1.

*...write dd_kunnr und dd_bukrs into memory
*...(important later for Dispute-Management).

  EXPORT dd_kunnr TO MEMORY ID 'FILITEXTS_KUNNR'.
  EXPORT dd_bukrs TO MEMORY ID 'FILITEXTS_BUKRS'.

*...find out, if single accounts and company codes have been selected..*
*...(important for header display).....................................*

  CLEAR ld_single_account.
  DESCRIBE TABLE dd_kunnr LINES ld_lines.
  IF ld_lines EQ 1.
    READ TABLE dd_kunnr INDEX 1.
    IF ( dd_kunnr-sign EQ 'I' AND dd_kunnr-option EQ 'EQ' ) OR
       ( dd_kunnr-sign EQ 'I' AND dd_kunnr-option EQ 'BT' AND
         dd_kunnr-low  EQ dd_kunnr-high ).
      ld_single_account = 'X'.
    ENDIF.
  ENDIF.
  CLEAR ld_single_bukrs.
  DESCRIBE TABLE dd_bukrs LINES ld_lines.
  IF ld_lines EQ 1.
    READ TABLE dd_bukrs INDEX 1.
    IF ( dd_bukrs-sign EQ 'I' AND dd_bukrs-option EQ 'EQ' ) OR
       ( dd_bukrs-sign EQ 'I' AND dd_bukrs-option EQ 'BT' AND
         dd_bukrs-low  EQ dd_bukrs-high ).
      ld_single_bukrs = 'X'.
    ENDIF.
  ENDIF.
  EXPORT ld_single_bukrs ld_single_account TO MEMORY ID
                                      'FILITEXTS_SINGLE'.

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(2) Form SEL_ACCOUNT_CHECK, Ende                                                                                                                      A
*$*$-Start: (2)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  ZFBL5N_1.    "active version

ENDENHANCEMENT.
*$*$-End:   (2)---------------------------------------------------------------------------------$*$*
ENDFORM.                    "sel_account_check

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值