글
권한 check & is supplied
FUNCTION z_cm_auth_check.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(P_BUKRS) TYPE BUKRS OPTIONAL
*" VALUE(P_WERKS) TYPE WERKS_D OPTIONAL
*" VALUE(P_KOKRS) TYPE KOKRS OPTIONAL
*" VALUE(P_MODULE) TYPE CHAR5 OPTIONAL
*" EXPORTING
*" VALUE(E_CODE) TYPE CHAR1
*" VALUE(E_MSG) TYPE CHAR100
*" TABLES
*" S_BUKRS STRUCTURE BUKRS_RAN OPTIONAL
*" S_WERKS STRUCTURE RANGE_WERKS OPTIONAL
*" S_KOKRS STRUCTURE TYPE_KOKRS_RANGE OPTIONAL
*"----------------------------------------------------------------------
DATA : BEGIN OF lt_bukrs OCCURS 0,
bukrs TYPE t001-bukrs,
END OF lt_bukrs.
DATA : BEGIN OF lt_werks OCCURS 0,
werks TYPE t001w-werks,
END OF lt_werks.
DATA : BEGIN OF lt_kokrs OCCURS 0,
kokrs TYPE tka01-kokrs,
END OF lt_kokrs.
DATA: p_chk_bukrs TYPE char1,
p_chk_werks TYPE char1,
p_chk_kokrs TYPE char1.
DATA: lv_plant_obj TYPE xuobject.
e_code = 'S'.
"batch mode에서는 권한 check 하지 않음.
CHECK sy-batch IS INITIAL.
IF p_bukrs IS NOT INITIAL.
p_chk_bukrs = 'X'.
s_bukrs-sign = 'I'.
s_bukrs-option = 'EQ'.
s_bukrs-low = p_bukrs.
APPEND s_bukrs.
ENDIF.
IF p_werks IS NOT INITIAL.
p_chk_werks = 'X'.
s_werks-sign = 'I'.
s_werks-option = 'EQ'.
s_werks-low = p_werks.
APPEND s_werks.
ENDIF.
IF p_kokrs IS NOT INITIAL.
p_chk_kokrs = 'X'.
s_kokrs-sign = 'I'.
s_kokrs-option = 'EQ'.
s_kokrs-low = p_kokrs.
APPEND s_kokrs.
ENDIF.
IF s_bukrs IS SUPPLIED OR
s_bukrs[] IS NOT INITIAL.
p_chk_bukrs = 'X'.
SELECT bukrs
INTO TABLE lt_bukrs
FROM t001
WHERE bukrs IN s_bukrs.
IF sy-subrc <> 0.
e_code = 'E'.
"Company code is not available.
MESSAGE s004(zmc_comm) INTO e_msg.
EXIT.
ENDIF.
ENDIF.
IF s_werks IS SUPPLIED OR
s_werks[] IS NOT INITIAL.
p_chk_werks = 'X'.
SELECT werks
INTO TABLE lt_werks
FROM t001w
WHERE werks IN s_werks.
IF sy-subrc <> 0.
e_code = 'E'.
"Plant code is not available.
MESSAGE s005(zmc_comm) INTO e_msg.
EXIT.
ENDIF.
ENDIF.
IF s_kokrs IS SUPPLIED OR
s_kokrs[] IS NOT INITIAL.
p_chk_kokrs = 'X'.
SELECT kokrs
INTO TABLE lt_kokrs
FROM tka01
WHERE kokrs IN s_kokrs.
IF sy-subrc <> 0.
e_code = 'E'.
"Controlling Area code is not available.
MESSAGE s006(zmc_comm) INTO e_msg.
EXIT.
ENDIF.
ENDIF.
IF lt_werks[] IS NOT INITIAL.
SELECT tk~bukrs
APPENDING TABLE lt_bukrs
FROM t001w AS tw
INNER JOIN t001k AS tk
ON tk~bwkey = tw~bwkey
FOR ALL ENTRIES IN lt_werks
WHERE tw~werks = lt_werks-werks.
ENDIF.
CASE p_module.
WHEN 'PP'.
CLEAR lv_plant_obj.
* lv_plant_obj = 'Z_PP_WRK'.
WHEN OTHERS.
CLEAR lv_plant_obj.
ENDCASE.
"Plnat code check 시에는 Bukrs 권한도 check 한다.
IF p_chk_werks = 'X'.
p_chk_bukrs = 'X'.
ENDIF.
IF p_chk_bukrs IS NOT INITIAL AND
lt_bukrs[] IS INITIAL.
e_code = 'E'.
"회사코드 값이 없습니다.
e_msg = TEXT-t01.
EXIT.
ENDIF.
IF p_chk_werks IS NOT INITIAL AND
lt_werks[] IS INITIAL.
e_code = 'E'.
"플랜트 값이 없습니다.
e_msg = TEXT-t02.
EXIT.
ENDIF.
IF p_chk_kokrs IS NOT INITIAL AND
lt_kokrs[] IS INITIAL.
e_code = 'E'.
"관리회계 영역 값이 없습니다.
e_msg = TEXT-t03.
EXIT.
ENDIF.
IF lt_werks[] IS NOT INITIAL AND
lv_plant_obj IS NOT INITIAL.
LOOP AT lt_werks.
"권한 Object 결정되면 수정 필요
AUTHORITY-CHECK OBJECT lv_plant_obj
ID 'WERKS' FIELD lt_werks-werks.
IF sy-subrc <> 0.
e_code = 'E'.
"플랜트 & 에 대한 사용권한이 없습니다.
MESSAGE s002(zmc_comm) WITH lt_werks INTO e_msg.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
IF lt_bukrs[] IS NOT INITIAL.
LOOP AT lt_bukrs.
AUTHORITY-CHECK OBJECT 'Z_COM_BUK'
ID 'BUKRS' FIELD lt_bukrs-bukrs.
IF sy-subrc <> 0.
e_code = 'E'.
"회사코드 & 에 대한 사용권한이 없습니다.
MESSAGE s001(zmc_comm) WITH lt_bukrs INTO e_msg.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
IF lt_kokrs[] IS NOT INITIAL.
LOOP AT lt_kokrs.
"권한 Object 결정되면 수정 필요
* AUTHORITY-CHECK OBJECT 'Z_COM_BUK'
* ID 'KOKRS' FIELD lt_kokrs-kokrs.
*
* IF sy-subrc <> 0.
* e_code = 'E'.
* "관리회계 영역 & 에 대한 사용권한이 없습니다.
* MESSAGE s003(zmc_comm) WITH lt_kokrs INTO e_msg.
*
* EXIT.
* ENDIF.
ENDLOOP.
ENDIF.
ENDFUNCTION.
'SAP Program > ABAP' 카테고리의 다른 글
DLL 사용하기 (0) | 2018.04.20 |
---|---|
병렬처리 예제 (0) | 2018.04.18 |
sorted table 선언 (0) | 2018.03.23 |
amount를 currency에 맞게 conversion input/output (0) | 2018.03.21 |
Number range 관련 재미있는 coding (0) | 2018.02.20 |