外部调用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.
相关文章推荐
- 验证外部系统是否成功调用SAP RFC的方法有几种?
- 外部系统调用SAP接口如何调试
- SAP 调用外部系统
- Java(JCo3)与SAP系统相互调用 外部系统(Java)调用BAPI函数...
- SAP 调用外部系统
- PHP 调用外部系统命令
- [MySQL FAQ]系列 -- mysql如何调用系统外部程序
- python可以调用外部系统命令
- 在Salesforce中调用外部系统所提供的的Web Service
- SAP 调用外部程序
- MySql UDF 调用外部程序和系统命令
- 外部系统调用EAS 凭证webserivce标准接口问题总结以及流程
- SAP 调用外部程序 (NCO、JCO)
- sap调用外部rfc函数
- .NET连接SAP系统专题:C#调用RFC中文乱码解决办法(十二)
- iOS调用外部程序和系统程序
- Linux中 别名、内部命令、外部命令、hash缓存表 系统调用时的优先级比较
- discuz系统整合,外部调用登陆和会员信息
- SAP 调用外部程序的方法
- 用Ant调用系统命令或外部程序