QUERY 查询

把程序的变式复制到另一个程序使用SE37:RS_COPY_SELECTION_SETS

表 AQGQCAT   SAP 查询: 查询目录   字段  CLAS 存放的时信息集

通过事务码SQ02 转到 查询目录

 RASQDEL0

 

表  AQLSCAT  信息集对应的数据库表

通过函数来获取多张表

 

 

 

RSAQ_IMPORT_USERGROUP_CATALOG 这个函数可以获取
DBBN 这个结果集
里面就是用户组 对于的 账户
 

写个函数 ,传入用户组,当前用户账号,传出是否有权限 ZTYPE E / S,zmessage 没权限/ 有权限

 query 如果执行发现缺少变式,那就直接新建一个同名的变式给这个程序

 

 

Code listing for: ZMIGR_TOOLS_QUERY

Description:  



*&---------------------------------------------------------------------*
 *& Report ZMIGR_TOOLS_QUERY
 *&---------------------------------------------------------------------*
 *& Issue : On SAP Query dump created from SQ01 after ECC to S4HANA upgrade.
 *& Scope : All of query that missing after ECC TO S4HANA upgrade.
 *& Solution :  Use below source to resolve the generated program does not exists.
 *& Please refer the documents : https://blogs.sap.com/2019/12/02/sap-query-gets-dump-after-ecc-to-s4hana-migration/
 *&---------------------------------------------------------------------*


REPORT ZMIGR_TOOLS_QUERY.

 TABLES:AQGQCAT.



*&---------------------------------------------------------------------
*& 全局变量
*&---------------------------------------------------------------------


TYPES: BEGIN OF TY_REPORTNAME,
          REPORTNAME TYPE  AQADEF-PGNAME,
          USERGROUP  TYPE  AQS_BGNAME,
          QUERY      TYPE  AQS_QUNAME,
          TCODE      TYPE  TSTC-TCODE,
          MSG        TYPE  BAPI_MSG,
          DELFLAG    TYPE  C,
        END OF TY_REPORTNAME,
        TT_REPORTNAME TYPE TABLE OF TY_REPORTNAME.

 DATA:GT_REPORTNAME TYPE TT_REPORTNAME.
 DATA:GS_AQGQCAT TYPE AQGQCAT,
      GT_AQGQCAT TYPE STANDARD TABLE OF AQGQCAT.

 FIELD-SYMBOLS:<FS_REPORTNAME> TYPE TY_REPORTNAME.


*&---------------------------------------------------------------------
*& 常量
*&---------------------------------------------------------------------

*&---------------------------------------------------------------------
*& SELECT-OPTIONS
 *&---------------------------------------------------------------------


SELECTION-SCREEN: BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-H01.
 SELECT-OPTIONS : S_NUM FOR AQGQCAT-NUM,
                  S_QNUM FOR AQGQCAT-QNUM.
 SELECTION-SCREEN:END OF BLOCK BLK1.



*&---------------------------------------------------------------------
*& INITIALIZATION
 *&---------------------------------------------------------------------


INITIALIZATION.



*&---------------------------------------------------------------------
*& START-OF-SELECTION
 *&---------------------------------------------------------------------


START-OF-SELECTION.



*第一 表AQGQCAT存储user group和Query name


  PERFORM FRM_GETDATA.



*第二 利用函数RSAQ_REPORT_NAME获得程序名


  PERFORM FRM_GET_PROGRAM CHANGING GT_REPORTNAME.



*第三 检查程序在表REPOSRC中是否存在


  PERFORM FRM_CHECK_EXSIT CHANGING GT_REPORTNAME.



*第四 如果不存在,调用RSAQ_GENERATE_PROGRAM生成程序


  PERFORM FRM_CREATE_PROGRAM USING GT_REPORTNAME.

   "Display result
   PERFORM FRM_DISPLAY USING GT_REPORTNAME  .



*&---------------------------------------------------------------------*
 *&      Form  getdata
 *&---------------------------------------------------------------------*


FORM FRM_GETDATA.

   CLEAR GT_AQGQCAT.
   SELECT *
     INTO TABLE GT_AQGQCAT
     FROM AQGQCAT
    WHERE ( NUM LIKE 'Y%' OR NUM LIKE 'Z%' )
      AND NUM  IN S_NUM
      AND QNUM IN S_QNUM.

 ENDFORM. "getdata


*&---------------------------------------------------------------------*
 *& Form FRM_GET_PROGRAM
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_GET_PROGRAM CHANGING CT_REPORTNAME TYPE TT_REPORTNAME.

   DATA:LS_REPORTNAME TYPE TY_REPORTNAME.

   CLEAR CT_REPORTNAME.
   LOOP AT GT_AQGQCAT INTO GS_AQGQCAT.

     CALL FUNCTION 'RSAQ_REPORT_NAME'
       EXPORTING
         WORKSPACE  = 'X'
         USERGROUP  = GS_AQGQCAT-NUM
         QUERY      = GS_AQGQCAT-QNUM
       IMPORTING
         REPORTNAME = LS_REPORTNAME-REPORTNAME.
     LS_REPORTNAME-USERGROUP = GS_AQGQCAT-NUM.
     LS_REPORTNAME-QUERY     = GS_AQGQCAT-QNUM.
     APPEND LS_REPORTNAME TO CT_REPORTNAME.

   ENDLOOP.

 ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_CHECK_EXSIT
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_CHECK_EXSIT CHANGING CT_REPORTNAME TYPE Tt_REPORTNAME.

   LOOP AT CT_REPORTNAME ASSIGNING <FS_REPORTNAME>.



*   判断是否已有对应程序。


    SELECT COUNT( * )
       FROM REPOSRC
      WHERE PROGNAME = @<FS_REPORTNAME>-REPORTNAME.
     IF SY-SUBRC = 0. " 已生成程序
      <FS_REPORTNAME>-DELFLAG = 'X'.
     ELSE.

       <FS_REPORTNAME>-MSG = '没有生成程序'.

       "查找对应的T-code
       SELECT SINGLE TCODE
         INTO @<FS_REPORTNAME>-TCODE
         FROM TSTC
        WHERE PGMNA = @<FS_REPORTNAME>-REPORTNAME.
     ENDIF.

   ENDLOOP.

   DELETE CT_REPORTNAME WHERE DELFLAG = 'X' . "删除已生成程序List
   SORT CT_REPORTNAME  BY TCODE DESCENDING.

 ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_CREATE_PROGRAM
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_CREATE_PROGRAM CHANGING CT_REPORTNAME TYPE TT_REPORTNAME.

   LOOP AT CT_REPORTNAME ASSIGNING <FS_REPORTNAME>.



*   对没有对应程序的Query 创建程序


    CALL FUNCTION 'RSAQ_GENERATE_PROGRAM'
       EXPORTING
         I_WORKSPACE          = 'X'
         I_QUERY              = <FS_REPORTNAME>-QUERY
         I_USERGROUP          = <FS_REPORTNAME>-USERGROUP


*   IMPORTING
 *       O_REPORT_NAME        =
 *       O_STRUCTURE_NAME     =


      EXCEPTIONS
         NO_QUERY             = 1
         NO_INFOSET           = 2
         QUERY_LOCKED         = 3
         GENERATION_CANCELLED = 4
         GENERATION_ERROR     = 5
         OTHERS               = 6.
     IF SY-SUBRC <> 0.
       <FS_REPORTNAME>-MSG = '生成程序失败'.
     ELSE.
       <FS_REPORTNAME>-MSG = '生成程序成功'.
     ENDIF.
   ENDLOOP.

 ENDFORM.


*&---------------------------------------------------------------------*
 *& Form FRM_DISPLAY
 *&---------------------------------------------------------------------*
 *& text
 *&---------------------------------------------------------------------*
 *& -->  p1        text
 *& <--  p2        text
 *&---------------------------------------------------------------------*


FORM FRM_DISPLAY USING IT_REPORTNAME TYPE TT_REPORTNAME.

   DATA:LS_LAYOUT   TYPE LVC_S_LAYO,
        LT_FIELDCAT TYPE LVC_T_FCAT.



* Set fieldcat


  PERFORM FRM_SET_FIELDCAT
       CHANGING LT_FIELDCAT.



* Set Layout settings


  LS_LAYOUT-CWIDTH_OPT  = 'X'.

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
     EXPORTING
       I_BUFFER_ACTIVE    = 'X'
       I_CALLBACK_PROGRAM = SY-CPROG
       IS_LAYOUT_LVC      = LS_LAYOUT
       IT_FIELDCAT_LVC    = LT_FIELDCAT
       I_DEFAULT          = 'X'
     TABLES
       T_OUTTAB           = IT_REPORTNAME
     EXCEPTIONS
       PROGRAM_ERROR      = 1
       OTHERS             = 2.
   IF SY-SUBRC <> 0.
     MESSAGE ID SY-MSGID
           TYPE 'S'
         NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
        DISPLAY LIKE 'E'.
     LEAVE LIST-PROCESSING.
   ENDIF.
 ENDFORM.



*&---------------------------------------------------------------------*
 *&      Form  F_SET_IT_FIELDCAT2
 *&---------------------------------------------------------------------*
 *       Set fieldcat
 *----------------------------------------------------------------------*
 *      <--fc_td_fieldcat  fieldcat
 *----------------------------------------------------------------------*


FORM FRM_SET_FIELDCAT CHANGING FC_TD_FIELDCAT TYPE LVC_T_FCAT.



* Local variable define


  DATA LTH_FIELDCAT TYPE LVC_S_FCAT.

   DEFINE BUILD_FIELDCAT.
     lth_fieldcat-fieldname = &1.
     lth_fieldcat-scrtext_s = &2.
     lth_fieldcat-scrtext_m = &2.
     lth_fieldcat-scrtext_l = &2.
     lth_fieldcat-col_opt   = 'A'.
     APPEND lth_fieldcat TO fc_td_fieldcat.
     CLEAR lth_fieldcat.
   END-OF-DEFINITION.

   BUILD_FIELDCAT  'REPORTNAME'    '程序名'    .
   BUILD_FIELDCAT 'USERGROUP'     'Usergroup'   .
   BUILD_FIELDCAT 'QUERY'     'Query'   .
   BUILD_FIELDCAT 'TCODE'     'TCODE'   .
   BUILD_FIELDCAT 'MSG'     'Message'   .

 ENDFORM.

 
 
Extracted by Mass Download version 1.5.1 - E.G.Mellodew. 1998-2024. Sap Release 750 

 

posted on 2024-05-07 13:34  TorranceZhao  阅读(52)  评论(0)    收藏  举报

导航