Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие авар.doc
Скачиваний:
62
Добавлен:
02.09.2019
Размер:
2.34 Mб
Скачать

Вызов транзакции через web интерфейс

Архитектура системы SAP позволяет выполнять приложения (транзакции) в WEB интерфейсе. Это позволяет предоставлять доступ к различным отчетам, написанным на ABAP тем пользователям, которые не имеют доступ к системе через GUI (например, пользователи удаленных филиалов). Пример использования: на ABAP написана транзакция для загрузки файлов CSV в систему SAP BI. Необходимо предоставить эту функциональность через корпоративный портал для пользователей филиалов / пользователей мобильных устройств, не подключенных к корпоративной сети.

Для вызова транзакции из WEB необходимо создать новый сервис в транзакции SICF.

Рисунок 53

По кнопке «Конфигурация GUI» устанавливаем следующие параметры:

Рисунок 54

В параметре «~TRANSACTION» задаем имя вызываемой транзакции.

На вкладке «СписокПоставщ» указываем следующие обработчики:

Рисунок 55

Класс ZS_CL_HTTP_EXT_ITS построен на интерфейсе IF_HTTP_EXTENSION. Содержание метода HANDLE_REQUEST следующее:

METHOD IF_HTTP_EXTENSION~HANDLE_REQUEST .   DATA: HEADER_STRING TYPE STRING.   DATA: CL_SERVER TYPE REF TO CL_HTTP_SERVER. * type include (for ihttp_icfservice_extension_its)   TYPE-POOLS IHTTP. * allow other extensions to do something   IF_HTTP_EXTENSION~FLOW_RC = IF_HTTP_EXTENSION=>CO_FLOW_OK_OTHERS_OPT. * * registeration of the ITS Service in ICF *   CALL 'ICF_DISPATCH' ID 'HTTP' FIELD 'i'                       ID 'ItsService' FIELD '1'. "#EC CI_CCALL * -------------------------------------------------------------- * CALL TRANSACTION, lookup sequence * -------------------------------------------------------------- *      1. check if ~transaction is specified in service parameters *      2. check for ~transaction parameter in url *      3. If ~transaction is not set and we are in the webgui *         service use ~okcode as ~transaction *      4. ask r3 for a user specific start transaction *      5. default: start easy access menu * SY-UCOMM ist 70 Zeichen lang, der interne OKCODE des WebAS ist jedoch * 200 Zeichen lang. (vgl. DYNP_OKCODE_LN) Da der Dynp noch '/N' * vorsetzt bleibt real eine Länge von 198 Zeichen   DATA: TCODE_LEAVE TYPE SYTCODE.   DATA: TCODE_DYNP(200) TYPE C.   DATA: TCODE_START TYPE SYTCODE.   DATA: TCODESTR TYPE STRING.   DATA: ISWEBGUI TYPE STRING.   DATA: L_CONFIGURATION TYPE STRING.   DATA: SINGLETRANSACTION TYPE STRING.   DATA: STARTOPTION TYPE C.   DATA: STARTEXTERN TYPE C VALUE 'x'.   DATA: OPTIONSUPPORTED TYPE I.   DATA: WWIDTH TYPE I.   DATA: WHEIGHT TYPE I. * ---- 1. for ~transaction in service parameters------------- * cast server to CL_SERVER   CL_SERVER     ?= SERVER.   CALL METHOD CL_SERVER->GET_SERVICE_EXTENSION     EXPORTING       KIND                    = IHTTP_ICFSERVICE_EXTENSION_ITS     IMPORTING       CONFIGURATION           = L_CONFIGURATION     EXCEPTIONS       KIND_IS_NOT_SUPPORTED   = 1       ERROR_DURING_PROCESSING = 2       OTHERS                  = 3. * handle error like ~transaction not specified   IF SY-SUBRC <> 0.     CLEAR L_CONFIGURATION.   ENDIF. * search ~transaction in service parameters * tcode is set initial if parameter is not found   CLEAR TCODESTR.   CALL FUNCTION 'SITS_SEARCH_SERVICE_PARAMETER'     EXPORTING       PARAMSTR   = L_CONFIGURATION       PARAMNAME  = '~TRANSACTION'              "#EC NOTEXT     CHANGING       PARAMVALUE = TCODESTR. ********************************************************************** ***ОБРАБОТКА ПАРАМЕТРОВ ***МАКАРОВ С.   TYPES:     BEGIN OF TS_PAR,       PAR TYPE C LENGTH 15,       VAL TYPE C LENGTH 60,     END OF TS_PAR.   DATA:         S TYPE STRING,         PTAB TYPE TABLE OF STRING,         LS_TAB TYPE TS_PAR,         LT_TAB TYPE TABLE OF TS_PAR,         L_QUERY_STRING TYPE STRING.   CLEAR: PTAB, LT_TAB.   L_QUERY_STRING = SERVER->REQUEST->GET_HEADER_FIELD('~QUERY_STRING').   SPLIT L_QUERY_STRING AT '&' INTO TABLE PTAB.   LOOP AT PTAB INTO S.     SPLIT S AT '=' INTO LS_TAB-PAR LS_TAB-VAL.     APPEND LS_TAB TO LT_TAB.   ENDLOOP.   LOOP AT LT_TAB INTO LS_TAB WHERE PAR NE 'sap-client'.     SET PARAMETER ID LS_TAB-PAR FIELD LS_TAB-VAL.   ENDLOOP. **********************************************************************   WWIDTH = SERVER->REQUEST->GET_FORM_FIELD( '~webguiUserAreaWidth' ).   WHEIGHT = SERVER->REQUEST->GET_FORM_FIELD( '~webguiUserAreaHeight' ). * if no size parameter set, fill with default 128 chars width and 32 * rows height. * dynpro metric char 21px height and 7px width   if WWIDTH IS INITIAL.     WWIDTH = 896.   ENDIF.   if WHEIGHT IS INITIAL.     WHEIGHT = 672.   ENDIF.   IF TCODESTR IS INITIAL. * ---- 2. tcode in url ? ----------------------------------     TCODESTR = SERVER->REQUEST->GET_FORM_FIELD( '~transaction' ).     IF TCODESTR IS INITIAL. * ---- 3. if webgui service use ~okcode as transaction       CALL FUNCTION 'SITS_SEARCH_SERVICE_PARAMETER'         EXPORTING           PARAMSTR   = L_CONFIGURATION           PARAMNAME  = '~WEBGUI'              "#EC NOTEXT         CHANGING           PARAMVALUE = ISWEBGUI.       IF ISWEBGUI EQ '1'.         TCODESTR = SERVER->REQUEST->GET_FORM_FIELD( '~okcode' ).         IF TCODESTR IS NOT INITIAL.            REPLACE '/N' IN SECTION OFFSET 0 LENGTH 2 OF TCODESTR               WITH '' IN CHARACTER MODE IGNORING CASE.         ENDIF.       ENDIF.       IF TCODESTR IS INITIAL. * ---- 4. user specific transaction -----------------------         CALL FUNCTION 'NAVIGATION_GET_START_TCODE'           EXPORTING             UNAME       = SY-UNAME           IMPORTING             START_TCODE = TCODE_START.         IF SY-SUBRC <> 0 OR TCODE_START EQ SPACE. *   ---- 5. default: easy access menu -----------------------           TCODESTR = 'SMEN'.         ELSE.           TCODESTR = TCODE_START.         ENDIF.       ENDIF.     ENDIF.   ENDIF. * convert transaction/okcode to upper case * note  0001178593 do not translate *  TRANSLATE TCODESTR TO UPPER CASE.                      "#EC TRANSLANG * -------------------------------------------------------------- * STARTOPTIONS FOR TRANSACTION * -------------------------------------------------------------- * check if we should use the kernels single transaction mode * meaning, that the session is closed when the starttransaction ends   CLEAR SINGLETRANSACTION.   CALL FUNCTION 'SITS_SEARCH_SERVICE_PARAMETER'     EXPORTING       PARAMSTR   = L_CONFIGURATION       PARAMNAME  = '~SINGLETRANSACTION'         "#EC NOTEXT     CHANGING       PARAMVALUE = SINGLETRANSACTION. * if singletransaction is not specified within the gui settings check * if it is set over the url   IF SINGLETRANSACTION IS INITIAL.     SINGLETRANSACTION =             SERVER->REQUEST->GET_FORM_FIELD('~singletransaction').   ENDIF. * set the start option if ~singletransaction is specified * default value is no start option used   CLEAR STARTOPTION.   IF SINGLETRANSACTION EQ '1'. * check if single transaction is supported * returns sy-subrc 1 for parameter error *         sy-subrc 2 function in kernel not available *         sy-subrc 0 and optionsupported 0, option not supported *         sy-subrc 0 and optionsupported 1, option supported     call 'DYNP_GET_STATUS' ID 'FUNCTION' field 30                            ID 'VALUE'    field OPTIONSUPPORTED.     IF SY-SUBRC NE 0 OR OPTIONSUPPORTED NE 1. *     option not supported, do not start transaction       MESSAGE X102(ITS_P).     ELSE. *     set start option single transaction       STARTOPTION = 'S'.     ENDIF.   ENDIF. * -------------------------------------------------------------- * RUN TRANSACTION with specified option * -------------------------------------------------------------- * now we start the transaction with start option, using 'leave to' * 'leave to' will do the authority check   TCODE_DYNP = TCODESTR.   TCODE_DYNP = TCODESTR.   CALL 'DYNP_OKCODE_SET'         id  'FCODE'       field TCODE_DYNP         id  'STARTTRANSACTION' field STARTOPTION         id  'STARTEXTERN'      field STARTEXTERN  "#EC CI_CCALL         id  'WINDOW_WIDTH' field WWIDTH         id  'WINDOW_HEIGHT' field WHEIGHT         id  'DYNP_FONT_WIDTH' field 7         id  'DYNP_FONT_HEIGHT' field 21         id  'LIST_FONT_WIDTH' field 7         id  'LIST_FONT_HEIGHT' field 15         id  'DISPLAY_WIDTH' field WWIDTH         id  'DISPLAY_HEIGHT' field WHEIGHT. * new function 'DYNP_OKCODE_SET' not available call leave transaction   TCODE_LEAVE = TCODESTR.   LEAVE TO TRANSACTION TCODE_LEAVE. ENDMETHOD.