实用小工具:PFCG 角色批量复制、删除
选择屏幕:
*&---------------------------------------------------------------------*
*& Report ZPFCG_BATCH
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZCAN_TEST_PFCG_COPY.
TABLES:AGR_TEXTS.
TYPE-POOLS : ICON,SLIS.
* Body
DATA : GT_ALV_FIELD TYPE SLIS_FIELDCAT_ALV,
GT_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
* Header
DATA : GT_ALV_HEADER TYPE SLIS_LISTHEADER,
GT_ALV_HEADERCAT TYPE SLIS_T_LISTHEADER.
* Control
DATA : G_COMMAND_FORM TYPE SLIS_FORMNAME VALUE 'USER-COMMAND',
G_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP-OF-PAGE'.
* COLUMN NUMBER
DATA : G_ALV_COLUMN TYPE I.
* ALV LAYOUT
DATA : G_ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.
* ALV Events
DATA : GT_ALV_EVENTCAT TYPE SLIS_T_EVENT,
GT_ALV_EVENT LIKE LINE OF GT_ALV_EVENTCAT.
* ALV SORT
DATA : GT_ALV_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE.
* ALV COLOR
DATA : G_ALV_COLOR TYPE SLIS_SPECIALCOL_ALV.
* ALV COMMAND
DATA :G_ALV_REF TYPE REF TO CL_GUI_ALV_GRID .
DATA : G_ALV_SORT_POS TYPE I.
TYPES: BEGIN OF TY_ALV,
CHECK TYPE C,
CLR TYPE CHAR4,
STATUS(20) TYPE C,
MESSAGE(100) TYPE C,
AGR_NAME_NEW TYPE AGR_TEXTS-AGR_NAME,
AGR_NAME_OLD TYPE AGR_TEXTS-AGR_NAME,
TXT TYPE AGR_TEXTS-TEXT,
END OF TY_ALV.
DATA:LT_ALV TYPE TABLE OF TY_ALV,
LS_ALV TYPE TY_ALV.
DATA:LT_ALV2 TYPE TABLE OF TY_ALV,
LS_ALV2 TYPE TY_ALV.
TYPES: BEGIN OF TY_DATA,
EXL0001(30),"年度
EXL0002(30),"月份
EXL0003(30),"工厂编码
END OF TY_DATA.
*Excel
DATA:WA_EXCEL LIKE ALSMEX_TABLINE, "excel structure专门用于EXCEL
IT_EXCEL LIKE TABLE OF ALSMEX_TABLINE, "excel import
WA_DATA TYPE TY_DATA.
* EXCEL文件用
DATA: G_FILE TYPE RLGRAP-FILENAME, "保存文件的本地地址
G_EXCEL TYPE OLE2_OBJECT,
G_BOOK TYPE OLE2_OBJECT,
G_SHEET TYPE OLE2_OBJECT,
G_CELL TYPE OLE2_OBJECT,
G_ROW TYPE I,
G_COL TYPE I.
DATA:E_TYPE(1).
DATA:E_MSG(200).
DATA:POST TYPE I.
DATA:GT_MSG TYPE STANDARD TABLE OF BDCMSGCOLL,
GW_MSG TYPE BDCMSGCOLL.
DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA: BDCDATA_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
*&---------------------------------------------------------------------*
*& selection-screen (选择屏幕) *
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-004.
PARAMETERS:
P1 RADIOBUTTON GROUP R1 DEFAULT 'X' USER-COMMAND CREATE, "查询报表
P2 RADIOBUTTON GROUP R1 , "下载模板
P3 RADIOBUTTON GROUP R1 , "导入
P4 RADIOBUTTON GROUP R1 . "删除
SELECTION-SCREEN END OF BLOCK BL1.
SELECTION-SCREEN BEGIN OF BLOCK BL3 WITH FRAME TITLE TEXT-003.
PARAMETERS:P_FILE LIKE RLGRAP-FILENAME MEMORY ID Z_FNAME MODIF ID M3,
P_NOHD AS CHECKBOX DEFAULT 'X' MODIF ID M3.
SELECTION-SCREEN END OF BLOCK BL3.
SELECTION-SCREEN: COMMENT 1(50) COMM_TXT.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN: COMMENT 10(50) COMM_TX1.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN: COMMENT 1(50) COMM_TX2.
SELECTION-SCREEN SKIP.
*&---------------------------------------------------------------------*
*& initialzation (选择屏幕前初始化) *
*&---------------------------------------------------------------------*
INITIALIZATION.
COMM_TXT = '模板字段,共3列如下:'.
COMM_TX1 = '新角色名,参考角色名,新角色描述'.
COMM_TX2 = '注意:列顺序不可变!!!'.
*&--文件路径搜索帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = '' " 输入的路劲
IMPORTING
FILE_NAME = P_FILE. " 输出路径
*----------------------------------------------------------------------*
* at selection-screen output(选择屏幕的PBO事件)
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*&---------------------------------------------------------------------*
*& Start-of-selection (开始选择屏幕) *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
* IF P1 = 'X' OR P2 = 'X'.
*导入EXCEL数据到内表
PERFORM FRM_UPLOAD.
PERFORM DIS_DATA.
* ELSEIF P2 = 'X'.
* ENDIF.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD
*&---------------------------------------------------------------------*
* 导入EXCEL数据到内表
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD .
* BREAK-POINT.
REFRESH:LT_ALV.
* 第一步:读取EXCEL数据
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1
I_BEGIN_ROW = 1
I_END_COL = 3
I_END_ROW = 30000
TABLES
INTERN = IT_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
MESSAGE 'EXCEL导入错误或文件路径错误' TYPE 'E'.
ENDIF.
*&---内表整理
DATA:LV_EXLSTR(30).
FIELD-SYMBOLS:<ZMM004L_EXCEL>.
LOOP AT IT_EXCEL INTO WA_EXCEL.
AT NEW ROW.
CLEAR WA_DATA.
ENDAT.
IF P_NOHD = 'X' AND WA_EXCEL-ROW = 1.
CONTINUE.
ENDIF.
* tind = iexcel-col.
CONCATENATE 'WA_DATA-EXL' WA_EXCEL-COL INTO LV_EXLSTR.
ASSIGN (LV_EXLSTR) TO <ZMM004L_EXCEL>.
<ZMM004L_EXCEL> = WA_EXCEL-VALUE.
AT END OF ROW.
CONDENSE:
WA_DATA-EXL0001, "01(30),'"
WA_DATA-EXL0002, "02(30),'"
WA_DATA-EXL0003. "03(30),'"
LS_ALV-AGR_NAME_NEW = WA_DATA-EXL0001."
LS_ALV-AGR_NAME_OLD = WA_DATA-EXL0002."
LS_ALV-TXT = WA_DATA-EXL0003."
* LS_ALV-status = icon_led_green.
*检查是否存在为空的字段
IF LS_ALV-AGR_NAME_NEW IS INITIAL OR LS_ALV-AGR_NAME_OLD IS INITIAL OR LS_ALV-TXT IS INITIAL.
* MESSAGE 'EXCEL中有必输项为空、请检查' TYPE 'S' DISPLAY LIKE 'E'.
* EXIT.
LS_ALV-STATUS = ICON_LED_RED.
LS_ALV-MESSAGE = '新角色名,参考角色名,新角色描述:必须输入,请检查'.
E_TYPE = 'E'.
E_MSG = '请检查红灯报错行'.
ENDIF.
APPEND LS_ALV TO LT_ALV.
CLEAR LS_ALV.
ENDAT.
ENDLOOP.
SORT LT_ALV BY AGR_NAME_NEW.
LOOP AT LT_ALV INTO LS_ALV.
ON CHANGE OF LS_ALV-AGR_NAME_NEW .
ELSE.
LS_ALV-STATUS = ICON_LED_RED.
LS_ALV-MESSAGE = '和上一行角色名重复请检查'.
E_TYPE = 'E'.
E_MSG = '请检查红灯报错行'.
ENDON.
MODIFY LT_ALV FROM LS_ALV.
ENDLOOP.
ENDFORM. " FRM_UPLOAD
*&---------------------------------------------------------------------*
*& Form dis_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM DIS_DATA .
PERFORM ALV_LAYOUT.
* 设置列名
GT_ALV_HEADER-TYP = 'H'.
REFRESH:GT_ALV_FIELDCAT.
PERFORM ADD_ALV_COLUMN USING 'STATUS' '状态' 'C' '' '' ''.
PERFORM ADD_ALV_COLUMN USING 'MESSAGE' '执行结果' 'L' '' '' ''.
PERFORM ADD_ALV_COLUMN USING 'AGR_NAME_NEW' '新角色名' 'C' '' '' ''.
PERFORM ADD_ALV_COLUMN USING 'AGR_NAME_OLD' '参考角色名' 'C' '' '' ''.
PERFORM ADD_ALV_COLUMN USING 'TXT' '新角色描述' 'C' '' '' ''.
CONCATENATE 'PFCG批量操作' '' INTO GT_ALV_HEADER-INFO.
* G_ALV_LAYOUT-BOX_FIELDNAME = 'CHECK'. "表示字段‘CHECK’标记是否选择 "添加,显示多选
APPEND GT_ALV_HEADER TO GT_ALV_HEADERCAT.
CLEAR GT_ALV_HEADER.
" PERFORM F_SORT_BUILD TABLES GT_ALV_SORT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'ZSTATUS' " 传递 GUI状态设置子程序
I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND' " 传递用户在ALV中事件子程序
I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
IT_FIELDCAT = GT_ALV_FIELDCAT
IS_LAYOUT = G_ALV_LAYOUT
" IT_SORT = GT_ALV_SORT[]
I_SAVE = 'A'
TABLES
T_OUTTAB = LT_ALV.
ENDFORM.
FORM ALV_LAYOUT.
G_ALV_LAYOUT-ZEBRA = 'X'.
G_ALV_LAYOUT-F2CODE = '&IC1'.
* G_ALV_LAYOUT-DETAIL_POPUP = 'X'.
G_ALV_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ENDFORM. "ALV_layout
*&--------------------------------------------------------------------*
*& Form ADD_ALV_COLUMN
*&--------------------------------------------------------------------*
* 添加ALV显示列
*---------------------------------------------------------------------*
FORM ADD_ALV_COLUMN USING FIELD_NAME
FIELD_DESCRIPTION
FIELD_POSITION
FIELD_SUM
REF_FIELDNAME
DO_SUM.
CLEAR GT_ALV_FIELD.
G_ALV_COLUMN = G_ALV_COLUMN + 1.
GT_ALV_FIELD-COL_POS = G_ALV_COLUMN.
GT_ALV_FIELD-FIELDNAME = FIELD_NAME.
GT_ALV_FIELD-SELTEXT_M = FIELD_DESCRIPTION.
GT_ALV_FIELD-NO_ZERO = FIELD_SUM.
" GT_ALV_FIELD-NO_ZERO = ''.
GT_ALV_FIELD-REF_FIELDNAME = REF_FIELDNAME.
GT_ALV_FIELD-DO_SUM = DO_SUM.
* IF FIELD_SUM EQ 'X'.
* GT_ALV_FIELD-EMPHASIZE = 'C310'.
* ENDIF.
APPEND GT_ALV_FIELD TO GT_ALV_FIELDCAT.
ENDFORM. "ADD_ALV_COLUMN
FORM TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = GT_ALV_HEADERCAT.
ENDFORM. "TOP_OF_PAGE
*----------------------------------------------------------------------*
* 设置GUI状态
*
*----------------------------------------------------------------------*
FORM ZSTATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD'. "这里是定义的GUI状态名字
ENDFORM. "Set_pf_status
*----------------------------------------------------------------------*
* ALV按钮事件
*
*----------------------------------------------------------------------*
FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA:L_MESSAGE TYPE STRING.
RS_SELFIELD-REFRESH = 'X'. "控制从内部表内容向ALV屏幕更新数据
"实现从屏幕选择更新到内部表
DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LR_GRID.
CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
RS_SELFIELD-REFRESH = 'X'.
RS_SELFIELD-COL_STABLE = 'X'.
RS_SELFIELD-ROW_STABLE = 'X'.
CASE R_UCOMM.
WHEN 'Z03'.
IF E_TYPE = 'E'.
MESSAGE E_MSG TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ELSEIF POST <> 0.
MESSAGE '不能重复执行,请退出重新运行!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ELSE.
PERFORM USER_COMMAND_Z03.
ENDIF.
ENDCASE.
ENDFORM. "ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form USER_COMMAND_Z03
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM USER_COMMAND_Z03 .
POST = POST + 1.
DATA: NUM TYPE I.
DATA : LV_PER TYPE CHAR10.
DATA : LV_PER2 TYPE CHAR10.
DATA : TEXT TYPE CHAR100.
DATA: LINE1 TYPE I.
DATA: LINE2 TYPE I.
DESCRIBE TABLE LT_ALV LINES LINE1.
DATA:LT_AGR_TEXTS TYPE TABLE OF AGR_TEXTS,
LS_AGR_TEXTS TYPE AGR_TEXTS.
LOOP AT LT_ALV INTO LS_ALV.
IF P1 = 'X' OR P3 = 'X'.
DATA SOURCE_AGR TYPE AGR_NAME.
DATA TARGET_AGR TYPE AGR_NAME.
*DATA SELECTIVE_COPY TYPE CHAR01.
*DATA TCODES_INHERIT TYPE CHAR01.
*DATA HR_ASSIGNMENTS TYPE CHAR01.
*DATA USER_ASSINEMENT TYPE CHAR01.
*DATA PERS_OBJECTS TYPE CHAR01.
*DATA WITH_DISTRIBUTION TYPE CHAR01.
*DATA NO_DISTRIB_POPUP TYPE CHAR01.
*DATA DISTRIBUTE_SINGLE_ROLE TYPE CHAR01.
*DATA DIALOG TYPE CHAR01.
*DATA DISPLAY_MESSAGES TYPE CHAR01.
*DATA REQUEST TYPE TRKORR.
DATA MESSAGES TYPE SPROT_U_TAB.
DATA:LS_MESSAGE TYPE SPROT_U.
*DATA SELECTED_OBJECTS TYPE STANDARD TABLE OF PERS_DEF.
DATA: LD_NEW_ROLE TYPE AGR_NAME,
LD_SUBRC TYPE SYSUBRC,
LD_NR_MSGS TYPE SYTABIX.
CALL FUNCTION 'PRGN_COPY_AGR'
EXPORTING
SOURCE_AGR = LS_ALV-AGR_NAME_OLD
TARGET_AGR = LS_ALV-AGR_NAME_NEW
* SELECTIVE_COPY = ' '
TCODES_INHERIT = 'X'
HR_ASSIGNMENTS = 'X'
USER_ASSINEMENT = 'X'
PERS_OBJECTS = 'X'
WITH_DISTRIBUTION = 'X'
* NO_DISTRIB_POPUP = ' '
* DISTRIBUTE_SINGLE_ROLE = ' '
* DIALOG = 'X'
DISPLAY_MESSAGES = SPACE
* REQUEST = REQUEST
IMPORTING
MESSAGES = MESSAGES
* TABLES
* SELECTED_OBJECTS = SELECTED_OBJECTS
EXCEPTIONS
NO_RECORDING = 1
TARGET_AGRNAME_NOT_FREE = 2
SOURCE_AGR_NOT_EXISTS = 3
NO_AUTHORITY_FOR_CREATION = 4
NO_AUTHORITY_FOR_USER_INSERT = 5
NO_AUTHORITY_FOR_TCODES_INSERT = 6
NO_AUTHORITY_FOR_OBJECT_INSERT = 7
NO_AUTHORITY_FOR_SROLE_INSERT = 8
NO_AUTHORITY_FOR_SROLE_SHOW = 9
FLAG_NOT_EXISTING = 10
ACTION_CANCELLED = 11
NO_AUTH_FOR_OBJECTS_AND_USERS = 12
NO_AUTH_FOR_SROLES_AND_USERS = 13
ENQUEUE_FAILURE = 14
HR_INCOMPLETE = 15
DIST_INCOMPLETE = 16.
LD_SUBRC = SY-SUBRC.
CASE LD_SUBRC.
WHEN 0.
READ TABLE MESSAGES INTO LS_MESSAGE WITH KEY SEVERITY = 'S' AG = 'S#' MSGNR = '218'.
IF SY-SUBRC = 0.
LS_ALV-MESSAGE = '复制完成'.
LS_ALV-STATUS = ICON_LED_GREEN.
ENDIF.
* MESSAGE S407(S#).
WHEN 1.
LS_ALV-STATUS = ICON_LED_RED.
WHEN OTHERS.
LS_ALV-STATUS = ICON_LED_RED.
ENDCASE.
MODIFY LT_ALV FROM LS_ALV .
CLEAR:LS_ALV.
ENDIF.
IF P4 = 'X'.
CLEAR:BDCDATA.
REFRESH:BDCDATA[].
PERFORM BDC_DYNPRO USING 'SAPLPRGN_TREE' '0121'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'AGR_NAME_NEU'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'AGR_NAME_NEU'
LS_ALV-AGR_NAME_NEW.
PERFORM BDC_DYNPRO USING 'SAPLPRGN_TREE' '0121'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'AGR_NAME_NEU'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=DELE'.
PERFORM BDC_FIELD USING 'AGR_NAME_NEU'
LS_ALV-AGR_NAME_NEW.
PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0500'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=OPT1'.
PERFORM BDC_DYNPRO USING 'SAPMSSY0' '0120'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=DBAC'.
DATA: MODE_N TYPE CHAR1.
DATA: RMESSAEG TYPE STRING.
MODE_N = 'N'.
REFRESH:BDCDATA_MESSTAB[].
CLEAR:BDCDATA_MESSTAB,RMESSAEG.
CALL TRANSACTION 'PFCG' USING BDCDATA
MODE MODE_N
MESSAGES INTO BDCDATA_MESSTAB.
LOOP AT BDCDATA_MESSTAB.
DATA MSGID TYPE SY-MSGID.
DATA MSGNO TYPE SY-MSGNO.
DATA MSGTY TYPE SY-MSGTY.
DATA:MESSG TYPE MESSAGE.
CLEAR:MESSG.
MSGID = BDCDATA_MESSTAB-MSGID.
MSGNO = BDCDATA_MESSTAB-MSGNR.
MSGTY = BDCDATA_MESSTAB-MSGTYP.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
MSGID = MSGID
MSGNO = MSGNO
MSGTY = MSGTY
MSGV1 = BDCDATA_MESSTAB-MSGV1
MSGV2 = BDCDATA_MESSTAB-MSGV2
MSGV3 = BDCDATA_MESSTAB-MSGV3
MSGV4 = BDCDATA_MESSTAB-MSGV4
IMPORTING
* ERROR = ERROR
MESSG = MESSG
* MSGLN = MSGLN
.
CONCATENATE MESSG-MSGTX '/' RMESSAEG INTO RMESSAEG.
ENDLOOP.
LS_ALV-STATUS = ICON_LED_GREEN.
LS_ALV-MESSAGE = RMESSAEG.
MODIFY LT_ALV FROM LS_ALV .
CLEAR:LS_ALV.
ENDIF.
NUM = NUM + 1.
LV_PER = NUM .
LV_PER2 = LINE1 .
CLEAR:TEXT.
CONCATENATE ' 复制角色处理中Please wait' LV_PER2 '/' LV_PER INTO TEXT.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = TEXT.
ENDLOOP.
IF P2 = 'X' OR P3 = 'X'.
TEXT = '更新角色描述开始执行'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = TEXT.
WAIT UP TO 1 SECONDS.
REFRESH:LT_ALV2.
LT_ALV2 = LT_ALV .
IF P3 = 'X'.
DELETE LT_ALV2 WHERE STATUS <> ICON_LED_GREEN.
ENDIF.
IF LT_ALV2 IS NOT INITIAL.
REFRESH:LT_AGR_TEXTS.
SELECT * FROM AGR_TEXTS
INTO TABLE LT_AGR_TEXTS
FOR ALL ENTRIES IN LT_ALV2
WHERE AGR_NAME = LT_ALV2-AGR_NAME_NEW
AND SPRAS = '1'.
SORT LT_AGR_TEXTS BY AGR_NAME.
ENDIF.
LOOP AT LT_AGR_TEXTS INTO LS_AGR_TEXTS .
LOOP AT LT_ALV INTO LS_ALV WHERE AGR_NAME_NEW = LS_AGR_TEXTS-AGR_NAME .
LS_AGR_TEXTS-TEXT = LS_ALV-TXT."更新描述内部-描述字段
"更新ALV
LS_ALV-STATUS = ICON_LED_GREEN.
IF P2 = 'X'.
LS_ALV-MESSAGE = '更新描述完成'.
ELSEIF P3 = 'X'.
LS_ALV-MESSAGE = '一键(复制/更新)完成'.
ENDIF.
MODIFY LT_ALV FROM LS_ALV.
ENDLOOP.
MODIFY LT_AGR_TEXTS FROM LS_AGR_TEXTS.
ENDLOOP.
"更新系统角色描述透明表
IF LT_AGR_TEXTS IS NOT INITIAL.
UPDATE AGR_TEXTS FROM TABLE LT_AGR_TEXTS .
COMMIT WORK AND WAIT.
IF SY-SUBRC = 0.
MESSAGE 'UPDATE表AGR_TEXTS运行完成' TYPE 'S' .
ENDIF.
ENDIF.
ENDIF.
ENDFORM.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM.