FUNCTION-POOL /GUIXT/DB01. DATA: BEGIN OF AUTHORIZED_TABLES OCCURS 100, TABNAME LIKE DD02L-TABNAME, END OF AUTHORIZED_TABLES. DATA: BEGIN OF MYUSR01 OCCURS 10, USERNAME LIKE SY-UNAME, DATFM LIKE USR01-DATFM, DCPFM LIKE USR01-DCPFM, END OF MYUSR01. * Searchhelp TYPE-POOLS:shlp. * Tables TABLES: dd03l. * Field name and parameter name as defined in the R/3 F4 interface FB DATA: fldname LIKE dfies-fieldname, tabname LIKE dfies-tabname, srhname LIKE dd30v-shlpname, selvalue(80). * Field coordinates for GuiXT DATA: symfield(200). * Internal table for matchcode return values DATA: BEGIN OF rt OCCURS 10. INCLUDE STRUCTURE ddshretval. DATA: END OF rt. *----------------------------------------------------------------------- FUNCTION /GUIXT/SELECT. " Version 2016-03-07 *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(TABLE) TYPE DD03L-TABNAME *" VALUE(CONDITION) TYPE CHAR4000 *" VALUE(ORDERBY) TYPE CHAR4000 OPTIONAL *" VALUE(FIELDS) TYPE CHAR4000 OPTIONAL *" VALUE(DISTINCT) TYPE CHAR1 OPTIONAL *" EXPORTING *" VALUE(FOUND) TYPE SYCHAR01 *" VALUE(RESULT) TYPE CHAR4000 *" VALUE(V1) TYPE CHAR4000 *" VALUE(V2) TYPE CHAR4000 *" VALUE(V3) TYPE CHAR4000 *" VALUE(V4) TYPE CHAR4000 *" VALUE(V5) TYPE CHAR4000 *" VALUE(V6) TYPE CHAR4000 *" VALUE(V7) TYPE CHAR4000 *" VALUE(V8) TYPE CHAR4000 *" VALUE(V9) TYPE CHAR4000 *" VALUE(V10) TYPE CHAR4000 *" VALUE(RECCOUNT) TYPE CHAR8 *" TABLES *" RESULTTABLE STRUCTURE CHAR8000 OPTIONAL *" CONDITIONTABLE STRUCTURE CHAR8000 OPTIONAL *" V1TABLE STRUCTURE W3HTML OPTIONAL *" V2TABLE STRUCTURE W3HTML OPTIONAL *" V3TABLE STRUCTURE W3HTML OPTIONAL *" V4TABLE STRUCTURE W3HTML OPTIONAL *" V5TABLE STRUCTURE W3HTML OPTIONAL *" V6TABLE STRUCTURE W3HTML OPTIONAL *" V7TABLE STRUCTURE W3HTML OPTIONAL *" V8TABLE STRUCTURE W3HTML OPTIONAL *" V9TABLE STRUCTURE W3HTML OPTIONAL *" V10TABLE STRUCTURE W3HTML OPTIONAL *" EXCEPTIONS *" TABLE_NOT_AVAILABLE *" NOT_AUTHORIZED *" CONDITION_NOT_SPECIFIED *"---------------------------------------------------------------------- * reset found-flag FOUND = SPACE. * Reset record count RECCOUNT = '0'. * Reset results REFRESH: RESULTTABLE, V1TABLE, V2TABLE, V3TABLE, V4TABLE, V5TABLE, V6TABLE, V7TABLE, V8TABLE, V9TABLE, V10TABLE. RESULT = SPACE. * Table name in upper case TRANSLATE TABLE TO UPPER CASE. * Authorizatio already checked for this table? READ TABLE AUTHORIZED_TABLES WITH KEY table BINARY SEARCH. IF SY-SUBRC NE 0. * SAP Authority check for this view CALL FUNCTION 'VIEW_AUTHORITY_CHECK' EXPORTING VIEW_ACTION = 'S' VIEW_NAME = TABLE EXCEPTIONS NO_AUTHORITY = 2 NO_CLIENTINDEPENDENT_AUTHORITY = 2 NO_LINEDEPENDENT_AUTHORITY = 2 OTHERS = 1. * Cancel if no authority or invalid table IF SY-SUBRC = 2. RAISE NOT_AUTHORIZED. ELSEIF SY-SUBRC = 1. RAISE TABLE_NOT_AVAILABLE. ENDIF. * Include into table of authorized tables APPEND TABLE TO AUTHORIZED_TABLES. SORT AUTHORIZED_TABLES. ENDIF. DATA: BEGIN OF WORK, ALIGNMENT TYPE F, BUFFER(8000), END OF WORK. DATA: FIELDVALUE(256). * Table of field name DATA: BEGIN OF FIELDTAB OCCURS 30, NAME LIKE DD03L-FIELDNAME, END OF FIELDTAB. DATA: FIELDCOUNT TYPE I. SPLIT FIELDS AT ',' INTO TABLE FIELDTAB. DESCRIBE TABLE FIELDTAB LINES FIELDCOUNT. * Table of order by DATA: BEGIN OF ORDERBYTAB OCCURS 30, NAME(32), END OF ORDERBYTAB. SPLIT ORDERBY AT ',' INTO TABLE ORDERBYTAB. * Various additional fields used later on FIELD-SYMBOLS: TYPE ANY. FIELD-SYMBOLS: TYPE ANY. DATA: FIELDNAME LIKE DD03L-FIELDNAME. DATA: IRECCOUNT TYPE I. IRECCOUNT = 0. ASSIGN WORK-BUFFER TO CASTING TYPE (TABLE). * Clear workarea with 0x00 FIELD-SYMBOLS: TYPE X. ASSIGN WORK-BUFFER TO CASTING TYPE X. Clear . * Condition specified? IF CONDITION NE SPACE. REFRESH CONDITIONTABLE. APPEND CONDITION TO CONDITIONTABLE. ENDIF. IF CONDITIONTABLE[] IS INITIAL. RAISE CONDITION_NOT_SPECIFIED. ENDIF. * Macro to fill value table Define FILL_VXTABLE. IF V&1TABLE IS SUPPLIED AND FIELDCOUNT GE &1. READ TABLE FIELDTAB INDEX &1 INTO FIELDNAME. ASSIGN COMPONENT FIELDNAME OF STRUCTURE to . IF SY-SUBRC = 0. PERFORM OUTPUT USING FIELDVALUE. APPEND FIELDVALUE TO V&1TABLE. ENDIF. ENDIF. End-Of-Definition. * Macro to fill value field Define FILL_VX. IF V&1 IS SUPPLIED AND FIELDCOUNT GE &1. READ TABLE FIELDTAB INDEX &1 INTO FIELDNAME. ASSIGN COMPONENT FIELDNAME OF STRUCTURE to . IF SY-SUBRC = 0. PERFORM OUTPUT USING V&1. ENDIF. ENDIF. End-Of-Definition. IF DISTINCT EQ 'X' OR DISTINCT EQ 'x'. SELECT DISTINCT (FIELDTAB) FROM (TABLE) INTO CORRESPONDING FIELDS OF WHERE (CONDITIONTABLE) ORDER BY (ORDERBYTAB). APPEND WORK-BUFFER TO RESULTTABLE. IRECCOUNT = IRECCOUNT + 1. IF FOUND = SPACE. RESULT = WORK-BUFFER. FOUND = 'X'. ENDIF. FILL_VXTABLE: 1,2,3,4,5,6,7,8,9,10. ENDSELECT. ELSE. SELECT (FIELDTAB) FROM (TABLE) INTO CORRESPONDING FIELDS OF WHERE (CONDITIONTABLE) ORDER BY (ORDERBYTAB). APPEND WORK-BUFFER TO RESULTTABLE. IRECCOUNT = IRECCOUNT + 1. IF FOUND = SPACE. RESULT = WORK-BUFFER. FOUND = 'X'. ENDIF. FILL_VXTABLE: 1,2,3,4,5,6,7,8,9,10. ENDSELECT. ENDIF. IF FOUND = 'X'. ASSIGN WORK-BUFFER TO CASTING TYPE (TABLE). FILL_VX: 1,2,3,4,5,6,7,8,9,10. ENDIF. WRITE IRECCOUNT TO RECCOUNT LEFT-JUSTIFIED. ENDFUNCTION. * Output single field FORM output USING f wa. DATA: ftype(1) TYPE C, fleng TYPE I. FIELD-SYMBOLS: , . ASSIGN WA TO CASTING TYPE X. Clear . DESCRIBE FIELD f TYPE ftype. CASE ftype. WHEN 'C'. DESCRIBE FIELD f LENGTH fleng IN CHARACTER MODE. ASSIGN wa(fleng) TO . MOVE f TO . WHEN 'N'. DESCRIBE FIELD f LENGTH fleng IN CHARACTER MODE. ASSIGN wa(fleng) TO . MOVE f TO . WHEN 'P'. ASSIGN wa(40) TO . WRITE f TO LEFT-JUSTIFIED NO-GROUPING. WHEN 'X'. WRITE f TO wa. WHEN 'D'. WRITE f TO wa. WHEN 'F'. ASSIGN wa(80) TO . WRITE f TO LEFT-JUSTIFIED NO-GROUPING. WHEN OTHERS. ASSIGN wa(256) TO . WRITE f TO LEFT-JUSTIFIED. ENDCASE. ENDFORM.