SAP开发总结.docx
《SAP开发总结.docx》由会员分享,可在线阅读,更多相关《SAP开发总结.docx(46页珍藏版)》请在冰豆网上搜索。
![SAP开发总结.docx](https://file1.bdocx.com/fileroot1/2023-5/16/61921aaa-6d0f-45b6-a04d-2103b4d56393/61921aaa-6d0f-45b6-a04d-2103b4d563931.gif)
SAP开发总结
1.权限字段检查
AUTHORITY-CHECK OBJECT 'YMFIAVKORG'
ID 'YMFIVKORG' FIELD GS_USERINFOS-VKORG.
METHOD authority_check.
AUTHORITY-CHECK OBJECT 'S_ALV_LAYO'
ID 'ACTVT' FIELD '23'.
IF sy-subrc <> 0.
IF NOT handle IS INITIAL.
IF NOT log_group IS INITIAL.
AUTHORITY-CHECK OBJECT 'S_ALV_LAYR'
ID 'ACTVT' FIELD '23'
ID 'REPORT' FIELD report
ID 'HANDLE' FIELD handle
ID 'LOG_GROUP' FIELD log_group.
ELSE.
AUTHORITY-CHECK OBJECT 'S_ALV_LAYR'
ID 'ACTVT' FIELD '23'
ID 'REPORT' FIELD report
ID 'HANDLE' FIELD handle
ID 'LOG_GROUP' DUMMY.
ENDIF.
ELSE.
IF NOT log_group IS INITIAL.
AUTHORITY-CHECK OBJECT 'S_ALV_LAYR'
ID 'ACTVT' FIELD '23'
ID 'REPORT' FIELD report
ID 'HANDLE' DUMMY
ID 'LOG_GROUP' FIELD log_group.
ELSE.
AUTHORITY-CHECK OBJECT 'S_ALV_LAYR'
ID 'ACTVT' FIELD '23'
ID 'REPORT' FIELD report
ID 'HANDLE' DUMMY
ID 'LOG_GROUP' DUMMY.
ENDIF.
ENDIF.
ENDIF.
rc = sy-subrc.
"dummy check for SU22 trace (needs note 1587228)
IF cl_su2x_tools=>get_status_su22_trace( ) = 'X'.
IF NOT handle IS INITIAL.
IF NOT log_group IS INITIAL.
AUTHORITY-CHECK OBJECT 'S_ALV_LAYR'
ID 'ACTVT' FIELD '23'
ID 'REPORT' FIELD report
ID 'HANDLE' FIELD handle
ID 'LOG_GROUP' FIELD log_group.
ELSE.
AUTHORITY-CHECK OBJECT 'S_ALV_LAYR'
ID 'ACTVT' FIELD '23'
ID 'REPORT' FIELD report
ID 'HANDLE' FIELD handle
ID 'LOG_GROUP' DUMMY.
ENDIF.
ELSE.
IF NOT log_group IS INITIAL.
AUTHORITY-CHECK OBJECT 'S_ALV_LAYR'
ID 'ACTVT' FIELD '23'
ID 'REPORT' FIELD report
ID 'HANDLE' DUMMY
ID 'LOG_GROUP' FIELD log_group.
ELSE.
AUTHORITY-CHECK OBJECT 'S_ALV_LAYR'
ID 'ACTVT' FIELD '23'
ID 'REPORT' FIELD report
ID 'HANDLE' DUMMY
ID 'LOG_GROUP' DUMMY.
ENDIF.
ENDIF.
IF sy-subrc = 0.
"the result is not needed here
RETURN.
ENDIF.
ENDIF.
ENDMETHOD.
2.宏+指针结合操作数据
METHOD COV_VALUE_RAN.
DATA:
LO_DATA TYPE REF TO DATA.
FIELD-SYMBOLS:
TYPE ANY,
TYPE ANY.
DEFINE LMACRO_SET_RANGE.
IF NOT &1 IS INITIAL AND
NOT &2 IS INITIAL.
ASSIGN COMPONENT &1 OF STRUCTURE TO ..
IF IS ASSIGNED.
= &2.
UNASSIGN .
ENDIF.
ENDIF.
END-OF-DEFINITION.
CHECK NOT IV_VALUE IS INITIAL.
TRY.
CREATE DATA LO_DATA LIKE LINE OF ER_RANGE.
ASSIGN LO_DATA->* TO .
IF IS ASSIGNED.
LMACRO_SET_RANGE 'SIGN' 'I'.
LMACRO_SET_RANGE 'OPTION' 'EQ'.
LMACRO_SET_RANGE 'LOW' IV_VALUE.
LMACRO_SET_RANGE 'SIGN' 'I'.
APPEND TO ER_RANGE.
UNASSIGN .
ENDIF.
CATCH CX_ROOT.
ENDTRY.
ENDMETHOD.
3.设置标准按钮的移除功能
METHOD SET_EXC_0100.
DATA:
LT_INC TYPE TABLE OF UI_FUNC.
APPEND CL_GUI_ALV_GRID=>MC_FC_DETAIL TO LT_INC.
APPEND CL_GUI_ALV_GRID=>MC_FC_SORT_ASC TO LT_INC.
APPEND CL_GUI_ALV_GRID=>MC_FC_SORT_DSC TO LT_INC.
APPEND CL_GUI_ALV_GRID=>MC_FC_FIND TO LT_INC.
APPEND CL_GUI_ALV_GRID=>MC_FC_FILTER TO LT_INC.
APPEND CL_GUI_ALV_GRID=>MC_MB_EXPORT TO LT_INC.
APPEND CL_GUI_ALV_GRID=>MC_MB_SUM TO LT_INC.
APPEND CL_GUI_ALV_GRID=>MC_FC_CURRENT_VARIANT TO LT_INC.
APPEND CL_GUI_ALV_GRID=>MC_FC_VIEWS TO LT_INC.
“使用按钮的移除功能
CALL METHOD YMCL_FI_STKGZ_ACTION=>FUCTION_EXC
EXPORTING
IT_INC = LT_INC
IMPORTING
ET_EXC = ET_EXC.
ENDMETHOD.
4.回车监听事件
CALL METHOD PO_GRID->GET_FILTERED_ENTRIES
IMPORTING
ET_FILTERED_ENTRIES = LT_FILT.
5.创建树的基本操作
DATA:
GO_TREE_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER,
GO_TREE TYPE REF TO CL_GUI_SIMPLE_TREE,
GV_TREE_0100_VIS TYPE C VALUE '',
GT_ADD_NODES LIKE STANDARD TABLE OF MTREESNODE.
6.更新屏幕界面
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_WBST1'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'P_FQWBST'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
7.设置基本事件操作
* 注册编辑作用方式 光标离开启作用
CALL METHOD GO_GRID_0100->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED
EXCEPTIONS
ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* 注册事件
CREATE OBJECT GO_EVENTS.
SET HANDLER:
GO_EVENTS->USER_COMMAND_0100 FOR GO_GRID_0100,
GO_EVENTS->AFTER_USER_COMMAND_0100 FOR GO_GRID_0100,
GO_EVENTS->HANDLE_DATA_CHANGED FOR GO_GRID_0100.
CALL METHOD GO_GRID_0100->SET_TOOLBAR_INTERACTIVE.
* CALL METHOD GO_GRID_0100->REGISTER_EDIT_EVENT
* EXPORTING
* I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
CALL METHOD GO_GRID_0100->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
ENDIF.
8.增加按钮功能项
METHOD ADD_FUNCTION .
DATA L_ENTRY TYPE SCTX_ENTRY.
L_ENTRY-TYPE = SCTX_C_TYPE_FUNCTION.
L_ENTRY-FCODE = FCODE.
L_ENTRY-FTYPE = FTYPE.
L_ENTRY-ICON = ICON.
L_ENTRY-TEXT = TEXT.
L_ENTRY-DISABLED = DISABLED.
L_ENTRY-HIDDEN = HIDDEN.
L_ENTRY-CHECKED = CHECKED.
l_entry-accelerator = accelerator.
* Unused for Entries of Type FUNCTION:
CLEAR L_ENTRY-MENU.
IF insert_at_the_top IS INITIAL.
* insert new function at the end:
APPEND l_entry TO entrytab.
ELSE.
* insert new function at the top:
INSERT l_entry INTO entrytab INDEX 1 .
ENDIF.
raise event changed.
* ...
ENDMETHOD.
9.工具函数VRM创建屏幕下拉框
TYPE-POOLS:
vrm.
TYPE-POOL VRM .
*******************************工具基本属性*************************
TYPES:
*-- Single Value in Value Set
BEGIN OF VRM_VALUE,
KEY(40) TYPE C,
TEXT(80) TYPE C,
END OF VRM_VALUE,
*-- Table of Values
VRM_VALUES TYPE VRM_VALUE OCCURS 0,
*-- Id of Value Set
VRM_ID TYPE VRM_VALUE-TEXT,
*-- table of Ids of Value Set
VRM_IDS TYPE VRM_ID OCCURS 0,
*-- QueueRow
BEGIN OF VRM_QUEUEROW,
TAG,
VALUE TYPE VRM_VALUE,
END OF VRM_QUEUEROW,
*-- Queue
VRM_QUEUE TYPE VRM_QUEUEROW OCCURS 0.
CONSTANTS:
VRM_TYPE(20) VALUE 'application',
VRM_SUBTYPE(20) VALUE 'x-sapvaluesets',
VRM_QUEUE_TAG_HEADER VALUE 'T',
VRM_QUEUE_TAG_SUBHEADER VALUE 'X',
VRM_QUEUE_TAG_ENTRY VALUE ' ',
VRM_QUEUE_KEY_TYPE TYPE VRM_VALUE-KEY VALUE 'TYPE',
VRM_QUEUE_KEY_NAME TYPE VRM_VALUE-KEY VALUE 'NAME'.
*****************************下拉列表实例*************************
REPORT YMPSR102 NO STANDARD PAGE HEADING MESSAGE-ID YMPS.
TYPE-POOLS VRM.
"定义一个下拉表屏幕参数
SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-001.
PARAMETERS:
P_LIST TYPE C AS LISTBOX VISIBLE LENGTH 12.
SELECTION-SCREEN END OF BLOCK A.
INITIALIZATION.
PERFORM FRM_INIT_LISTBOX.
*&---------------------------------------------------------------------*
*& Form FRM_INIT_LISTBOX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_INIT_LISTBOX .
"下拉框代码实现
DATA :
LIST TYPE VRM_VALUES , "下拉值
VALUE LIKE LINE OF LIST ."list box的结构
DATA:
STR TYPE STRING.
"赋值到list内表中
DO 10 TIMES.
STR = SY-TABIX.
CONCATENATE 'KEY' STR INTO VALUE-KEY.
CONCATENATE 'TXT' STR INTO VALUE-TEXT.
APPEND VALUE TO LIST .
ENDDO.
"调用函数展示
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'P_LIST'
VALUES = LIST.
ENDFORM. " FRM_INIT_LISTBOX
10.自定义ALV控件工具条的按钮
TYPE-POOLS:
VRM,ICON.
CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
DATA:
ITAB TYPE TABLE OF SPFLI,
WA TYPE SPFLI.
DATA:
NAME TYPE SCRFNAME VALUE 'ALV', "定义屏幕标识
CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "自定义屏幕组件
ALV_GRID TYPE REF TO CL_GUI_ALV_GRID. "ALV列表显示
DATA:
EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
DATA:
SAVE_OK TYPE SY-UCOMM,
OK_CODE TYPE SY-UCOMM.
SELECT * FROM SPFLI INTO TABLE ITAB.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Class LCL_EVENT_RECEIVER
*&---------------------------------------------------------------------*
* Toolbar and user command event handle
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE,
HANDLE_UCOMM FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCO