您的位置:首页 > 其它

外部调用SAP系统检索帮助

2010-05-04 13:39 579 查看
REPORT ZF4HELP_ANALYSE_TOOL.
TYPE-POOLS SHLP.
*----------------------------------------------------------------------*
*      TYPES
*----------------------------------------------------------------------*
TYPES:
BEGIN OF T_JOIN,
TABNAME   TYPE TABNAME,
FIELDNAME TYPE FIELDNAME,
END   OF T_JOIN.
*----------------------------------------------------------------------*
*      DATA
*----------------------------------------------------------------------*
DATA:
IT_DFIES      TYPE SHLP_DESCR_T-FIELDDESCR,
IT_FCAT       TYPE LVC_T_FCAT,
IT_LIST       TYPE TABLE OF CHAR100 WITH HEADER LINE,
G_TABNAME     TYPE TABNAME16,
IT_JOIN       TYPE TABLE OF T_JOIN WITH HEADER LINE,
IT_WHERE      TYPE TABLE OF CHAR70 WITH HEADER LINE,
FLG_SPRAS     TYPE CHAR1.
FIELD-SYMBOLS:
<FS_DATA>     TYPE STANDARD TABLE,
<FS_HEAD>     TYPE ANY.
PARAMETERS:
P_TAB   TYPE DFIES-TABNAME,
P_FIELD TYPE DFIES-FIELDNAME.
*----------------------------------------------------------------------*
*      START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
* 初始化数据
PERFORM FRM_INITIAL_DATA.
* 检索需要显示的项目并转换
PERFORM FRM_SEARCH_FIELD.
* 编辑需要检索的项目
PERFORM FRM_EDIT_FIELD_FOR_SELECT.
IF IT_FCAT IS INITIAL.
MESSAGE S001(00) WITH '分析失败,请手动调查'.
EXIT.
ENDIF.
* 创建动态内表
PERFORM FRM_CREATE_DYNAMIC_TABLE.
* 检索数据
PERFORM FRM_SELECT_DATA.
* 输出数据
PERFORM FRM_OUTPUT_DATA.
*&---------------------------------------------------------------------*
*&      Form  FRM_INITIAL_DATA
*&---------------------------------------------------------------------*
*       初始化数据
*----------------------------------------------------------------------*
FORM FRM_INITIAL_DATA.
CLEAR:
IT_DFIES,
IT_FCAT,
IT_LIST,
G_TABNAME,
IT_JOIN,
IT_WHERE,
FLG_SPRAS.
REFRESH:
IT_DFIES,
IT_FCAT,
IT_LIST,
IT_JOIN,
IT_WHERE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SEARCH_FIELD
*&---------------------------------------------------------------------*
*       检索需要显示的项目并转换
*----------------------------------------------------------------------*
FORM FRM_SEARCH_FIELD.
DATA:
L_IT_SHLP_TOP TYPE SHLP_DESCR_T,
L_IT_SHLP_TAB TYPE SHLP_DESCR_TAB_T,
L_WA_SHLP_TAB LIKE LINE OF L_IT_SHLP_TAB.
* 检索项目
CALL FUNCTION 'F4IF_DETERMINE_SEARCHHELP'
EXPORTING
TABNAME           = P_TAB
FIELDNAME         = P_FIELD
IMPORTING
SHLP              = L_IT_SHLP_TOP
EXCEPTIONS
FIELD_NOT_FOUND   = 1
NO_HELP_FOR_FIELD = 2
INCONSISTENT_HELP = 3
OTHERS            = 4.
* 转换项目
CALL FUNCTION 'DD_SHLP_EXPAND_HELPMETHOD'
EXPORTING
SHLP_TOP = L_IT_SHLP_TOP
IMPORTING
SHLP_TAB = L_IT_SHLP_TAB.
READ TABLE L_IT_SHLP_TAB INTO L_WA_SHLP_TAB INDEX 1.
IT_DFIES = L_WA_SHLP_TAB-FIELDDESCR.
SORT IT_DFIES BY OFFSET.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_EDIT_FIELD_FOR_SELECT
*&---------------------------------------------------------------------*
*       编辑需要检索的项目
*----------------------------------------------------------------------*
FORM FRM_EDIT_FIELD_FOR_SELECT.
DATA:
L_WA_DFIES LIKE LINE OF IT_DFIES,
L_WA_FCAT  TYPE LVC_S_FCAT,
L_TEMP     TYPE CHAR20.
LOOP AT IT_DFIES INTO L_WA_DFIES.
*   取得表名
IF G_TABNAME IS INITIAL.
G_TABNAME = L_WA_DFIES-TABNAME.
ENDIF.
*   字段存在检查
SELECT COUNT(*)
FROM DD03L
WHERE TABNAME   = G_TABNAME
AND FIELDNAME = L_WA_DFIES-FIELDNAME.
IF SY-DBCNT = 0.
IT_JOIN-TABNAME   = L_WA_DFIES-TABNAME.
IT_JOIN-FIELDNAME = L_WA_DFIES-FIELDNAME.
APPEND IT_JOIN.
CLEAR: IT_JOIN.
CONTINUE.
ENDIF.
*   获取取得字段
CONCATENATE IT_LIST L_WA_DFIES-FIELDNAME
INTO IT_LIST
SEPARATED BY SPACE.
*   为创建动态内表准备
MOVE-CORRESPONDING L_WA_DFIES TO L_WA_FCAT.
APPEND L_WA_FCAT TO IT_FCAT.
CLEAR: L_WA_FCAT.
ENDLOOP.
CONDENSE IT_LIST.
APPEND IT_LIST.
CLEAR: IT_LIST.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*       创建动态内表
*----------------------------------------------------------------------*
FORM FRM_CREATE_DYNAMIC_TABLE.
DATA:
L_EP_TABLE TYPE REF TO DATA,
L_WA_DATA  TYPE REF TO DATA.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IT_FCAT
IMPORTING
EP_TABLE        = L_EP_TABLE.
ASSIGN L_EP_TABLE->* TO <FS_DATA>.
CREATE DATA L_WA_DATA LIKE LINE OF <FS_DATA>.
ASSIGN L_WA_DATA->* TO <FS_HEAD>.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*       检索数据
*----------------------------------------------------------------------*
FORM FRM_SELECT_DATA.
DATA:
L_COUNT     TYPE I,
L_FIELDNAME TYPE FIELDNAME.
* 语言种类选择
SELECT FIELDNAME
FROM DD03L
INTO L_FIELDNAME
UP TO 1 ROWS
WHERE TABNAME    = G_TABNAME
AND CHECKTABLE = 'T002'.
ENDSELECT.
IF SY-DBCNT <> 0.
FLG_SPRAS = 'X'.
CONCATENATE L_FIELDNAME '= 1'
INTO IT_WHERE
SEPARATED BY SPACE.
APPEND IT_WHERE.
ENDIF.
* 语言过滤检查
LOOP AT IT_JOIN.
SELECT COUNT(*)
FROM DD03L
WHERE TABNAME    = IT_JOIN-TABNAME
AND CHECKTABLE = 'T002'.
IF SY-DBCNT <> 0.
FLG_SPRAS = 'X'.
EXIT.
ENDIF.
ENDLOOP.
* 数据取得
SELECT DISTINCT (IT_LIST)
FROM (G_TABNAME)
INTO CORRESPONDING FIELDS OF TABLE <FS_DATA>
WHERE (IT_WHERE).
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_OUTPUT_DATA
*&---------------------------------------------------------------------*
*       输出数据
*----------------------------------------------------------------------*
FORM FRM_OUTPUT_DATA.
DATA:
L_COUNT     TYPE I,
L_FLG_TITLE TYPE CHAR1,
L_WA_FCAT   TYPE LVC_S_FCAT,
L_TEMP      TYPE STRING,
L_JOIN      TYPE STRING.
FIELD-SYMBOLS:
<L_FS_COL>  TYPE ANY.
* 输出:数据条目数
DESCRIBE TABLE <FS_DATA> LINES L_COUNT.
IF L_COUNT = 0.
WRITE: '未发现值'        COLOR 1.
EXIT.
ELSE.
WRITE: '数据条目数:'    COLOR 1, AT 17 L_COUNT   COLOR 5, /.
ENDIF.
* 输出:取得字段
READ TABLE IT_LIST INDEX 1.
WRITE:   '取得字段:'       COLOR 1, AT 17 IT_LIST   COLOR 5, /.
* 输出:取得表/视图
WRITE:   '取得表/视图:'    COLOR 1, AT 17 G_TABNAME COLOR 5, /.
* 输出:取得表/视图
READ TABLE IT_WHERE INDEX 1.
IF NOT IT_WHERE IS INITIAL.
WRITE: '取得条件:'       COLOR 1, AT 17 IT_WHERE  COLOR 5, /.
ENDIF.
* 输出:需要做连接的表
LOOP AT IT_JOIN.
CONCATENATE IT_JOIN-TABNAME IT_JOIN-FIELDNAME
INTO L_TEMP SEPARATED BY '~'.
CONCATENATE L_JOIN L_TEMP
INTO L_JOIN SEPARATED BY SPACE.
ENDLOOP.
CONDENSE L_JOIN.
IF NOT L_JOIN IS INITIAL.
WRITE: '需要做连接的表:' COLOR 1, AT 17 L_JOIN    COLOR 6, /.
ENDIF.
* 输出:语言过滤
IF FLG_SPRAS = 'X'.
WRITE: '有语言过滤'      COLOR 6, /.
ENDIF.
LOOP AT <FS_DATA> INTO <FS_HEAD>.
*   输出:项目名
IF L_FLG_TITLE IS INITIAL.
LOOP AT IT_FCAT INTO L_WA_FCAT.
WRITE: L_WA_FCAT-REPTEXT+0(L_WA_FCAT-OUTPUTLEN) COLOR 1.
WRITE: SY-VLINE.
ENDLOOP.
WRITE: / SY-ULINE.
L_FLG_TITLE = 'X'.
ENDIF.
*   输出:项目内容
LOOP AT IT_FCAT INTO L_WA_FCAT.
ASSIGN COMPONENT L_WA_FCAT-FIELDNAME OF
STRUCTURE <FS_HEAD> TO <L_FS_COL>.
WRITE: <L_FS_COL>, SY-VLINE.
ENDLOOP.
WRITE: / SY-ULINE.
ENDLOOP.
ENDFORM.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: