- •Часть I. Основы языка 5
- •Часть II. Расширенные приемы программирования в sap bw 37
- •Часть III. Полезные советы 85
- •Вступление
- •Задание атрибутов программы
- •Составление исходного текста программы
- •Локальные данные программы Определение полей с помощью элементарных типов и ссылок
- •Записи и внутренние таблицы
- •Объявление составных неэлементарных типов и объектов
- •Область определения данных
- •Глобальные таблицы словаря Dictionary
- •Отображение определения
- •Отображение содержимого таблицы
- •Создание таблицы или структуры
- •Использование таблиц и структур в программе
- •Создание доменов
- •Работа с данными Копирование полей с помощью команд Move и Compute
- •Преобразования содержимого полей
- •Копирование структурированных объектов
- •Арифметические выражения и математические функции
- •Операции со строками текста Конкатенация и разделение строк
- •Замена и преобразование символов в строке
- •Поиск символьных строк в полях или внутренних таблицах
- •Символ «Перенос каретки»
- •Запись данных
- •Простой формат вывода
- •Использование символов и пиктограмм
- •Использование цветов
- •Интерфейсы форм
- •Подпрограммы и функции Глобальные функции
- •Функциональные группы
- •Создание функций
- •Вызов функции
- •Чтение таблиц базы данных Построение простейшего запроса
- •Использование конструкции where
- •Чтение единственного элемента таблицы
- •Извлечение ограниченного числа полей
- •Упорядочение результатов запроса
- •Динамическая выборка данных
- •Вложенные циклы select
- •Часть II. Расширенные приемы программирования в sap bw Тип функции планирования
- •Создание класса
- •Определение нового типа функции планирования
- •Разработка класса Считывание значений управляющих параметров
- •Определение ссылочных данных
- •Добавление сообщений в спул вывода
- •Обработка данных для изменения
- •Badi для консолидации (перенос данных)
- •Чтение данных инфо-провайдера
- •Формирование структуры признаков из настроечной таблицы
- •Отправка e-mail сообщения из abap на внешний адрес
- •Выполнение расчетов в параллельных (фоновых) задачах
- •Подпрограмма преобразования
- •Вызов транзакции через web интерфейс
- •Передача параметров
- •Загрузка данных из 1с 8
- •Загрузка справочников
- •Загрузка транзакционных данных
- •Загрузка данных из файлов Excel с помощью ole
- •Загрузка сообщений (tcode se91) из файла Excel
- •Программа загрузки данных из файла csv в таблицу бд
- •Вызов последовательности планирования из abap
- •Динамическое программирование
- •Определение полей таблицы в runtime
- •Создание динамической таблицы в runtime
- •Генерирование abap подпрограммы в runtime
- •Создание пользовательского средства поиска
- •Часть III. Полезные советы Создание abap программы без ключа разработчика
- •Поиск внутренних таблиц
- •Редактирование данных в таблицах sap, недоступных для ведения
- •Оптимизация выборки данных
- •Справочник транзакций
Вызов транзакции через 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.