PFCG 角色对象批处理

实用小工具: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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值