Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE37 - Построитель функций => Тема начата: Uukrul от Ноябрь 26, 2008, 11:38:57 pm
-
MMIM_CALL_TRANSACTION - Вызов транзакций (в основном отчетных), из своих программ. Позволяет делать вызов транзакции как в текущем окне там и путем создания новой сессии/режима. В принципе, если надо сделать красивую интеграцию из своих программ, то можно использовать вместо CALL TRANSACTION.
Пример сделан для вызова транзакции MMBE - Обзор запасов: БЕ/завод/склад/партия. При этом первый экран ввода параметров для селекционного экрана пропускается и вызов делается в том же окне, без открытия новой сессии. Кстати, по поводу новой сессии не плохо бы проверить а есть ли свободные еще режимы...
DATA: lt_parameters LIKE usr05 OCCURS 1 WITH HEADER LINE.
lt_parameters-parid = 'MAT'
LT_PARAMETERS-PARVA = '<Код материала>'.
APPEND lt_parameters.
lt_parameters-parid = 'WRK'
LT_PARAMETERS-PARVA = '<Код завода>'.
APPEND lt_parameters.
CALL FUNCTION 'MMIM_CALL_TRANSACTION'
EXPORTING
i_transaction = 'MMBE'
i_skip_first_screen = 'X'
i_new_mode = ' '
TABLES
it_parameters = lt_parameters
EXCEPTIONS
not_authorized = 1
OTHERS = 2.
Вызов в принципе не сложный:
i_transaction - Код транзакции
i_skip_first_screen - Если задано "X", то выполняется пропуск первого экрана выбора
i_new_mode - Если задано "Х", то будет открыт новый режим, иначе вызов транзакции будет в текущем окне.
it_parameters - Параметры селекционного экрана... откуда их брать, ну жмете F1 в поле селекционного экрана, а там техническая информация и из картинки все как бы ясно, а пример заполнения внутренней таблицы из текста.
Кстати, аналогичный вызов можно сделать используя CALL TRANSACTION, типа так:
SET PARAMETER ID 'MAT' FIELD '<Код материала>'.
SET PARAMETER ID 'WRK' FIELD '<Код завода>'.
CALL TRANSACTION 'MMBE' and skip firs screen.
Что использовать, выбирать вам... я бы использовал функцию, так как ее вызов проверяет полномочия на вызываемую транзакцию и соответсвенно вы это можете обработать, а не вывалить пользователю стандартное окно с сообщением внизу, типа а у вас нет полномочий на транзакцию XXXX. Во-вторых, вызов SET PARAMETER ID 'MAT' FIELD '<Код материала>', само собой затирает значение параметра в памяти, так вот вызов ФМ, это дело обходит и путем запоминания параметров внутри себя перед вызовом транзакции и их востановления при выходе.
-
Так, картнику забыл прицепить...
-
Т.е. преимущества только в том что функция возрвращет прошла/не прошла проверка полномочий,
и не затирает параметры в памяти ?
-
Т.е. преимущества только в том что функция возрвращет прошла/не прошла проверка полномочий,
и не затирает параметры в памяти ?
Ну я весь код не разбирал, но как по мне получить параметр возврата и его обработать будет более правильно чем валить экран с текстом что нет полномочий, ну и затирание параметров тоже не маловажная штука... короче как по мне то этот вариант более кошерный в использовании.
-
Ну как вариант, можна при вызове CALL TRANSACTION передавать табличку для ошибок и саму транзакцию запускать с параметром MODE = 'N'
" Для записи ошибок пакетного ввода.
DATA:
ls_message TYPE bdcmsgcoll,
gt_message TYPE tab_bdcmsgcoll.
DATA: amode TYPE c. " Режим выполнения
MOVE 'N' TO amode.
CALL TRANSACTION 'XD01' USING bdc_tab MODE amode
UPDATE 'S' MESSAGES INTO gt_message.
CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
TABLES
imt_bdcmsgcoll = gt_message
ext_return = rs_return.
LOOP AT ii_return_t INTO ii_return_l
WHERE type = 'E' OR type = 'A'.
RAISE er_dt.
NDLOOP.
-
Ну как вариант, можна при вызове CALL TRANSACTION передавать табличку для ошибок и саму транзакцию запускать с параметром
Ну на самом деле это уже немного не то.. это если нужно что-то выполнить... а рисовать такую вещь на транзакцию просмотра документа + анализ таблицы результата?! Как по мне это уже лишнее программирование.
-
Еще один из вариантов выполнения стандартных отчетов из своих программ это использование оператора SUBMIT. Как в примере ниже:
TYPE-POOLS: syldb.
DATA: l_progname TYPE raldb_repo,
l_sp TYPE syldb_sp,
lt_seltab LIKE rsparams OCCURS 1 WITH HEADER LINE.
l_progname = 'RMMMBESTN'.
CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
EXPORTING
curr_report = l_progname
IMPORTING
sp = l_sp
TABLES
selection_table = lt_seltab
EXCEPTIONS
not_found = 1
no_report = 2
OTHERS = 3.
IF sy-subrc <> 0. ENDIF.
DELETE lt_seltab WHERE selname <> 'MS_MATNR'.
LOOP AT lt_seltab.
* Код материала
IF lt_seltab-selname = 'MS_MATNR'.
lt_seltab-sign = 'I'.
lt_seltab-option = 'EQ'.
lt_seltab-low = '<Код материала>'.
ENDIF.
MODIFY lt_seltab.
ENDLOOP.
SUBMIT (l_progname) WITH SELECTION-TABLE lt_seltab
AND RETURN.
В данном примере для получения списка параметров отчета, используется функция RS_REFRESH_FROM_SELECTOPTIONS, которая позволяет получить список всех критериев находящихся на селекционном экране, затем заполнить требуемые критерии своими значениями и передать такую таблицу команде SUBMIT. Структура передачи параметров следующая:
SELNAME RSSCR_NAME CHAR 8 0 АВАР: имя опции выбора/параметра
KIND RSSCR_KIND CHAR 1 0 АВАР: вид выборки
SIGN TVARV_SIGN CHAR 1 0 АВАР: индикатор: В/И (значения включить/исключить)
OPTION TVARV_OPTI CHAR 2 0 АВАР: опция выбора (EQ/BT/CP/...)
LOW TVARV_VAL CHAR 45 0 АВАР: значение выбора (LOW или HIGH, внешний формат)
HIGH TVARV_VAL CHAR 45 0 АВАР: значение выбора (LOW или HIGH, внешний формат)
В данном примере, результат будет следующим:
SELNAME K S OP LOW HIGH
KZBUK P
KZCHA P
KZLGO P
KZLON P
KZLSO P
KZNGC P
KZNUL P
KZSON P
KZWER P
MEINH P
MS_CHARG S
MS_DISPO S
MS_LGORT S
MS_MATNR S
MS_WERKS S
P_MCALL P
SOBKZ S
P - Критерий типа PARAMETERS.
S - Критерий типа SELECT-OPTIONS.
-
CALL_TRANSACTION_ERP - Еще одна вариация на тему вызовов транзакций из собственных программ. Аналогично предыдущему вызову:
CALL FUNCTION 'CALL_TRANSACTION_ERP'
EXPORTING
iv_tcode = dtcodp-tcode
iv_anfbd = dtcodp-anfbd
iv_matnr = mdps-mdmat
iv_werks = mdps-mdwrk
iv_berid = mdps-mdber
iv_plscn = rm61r-plscn
iv_dispo = mdkp-dispo
TABLES
it_params = lt_spagpa.
Передаем код транзакции и iv_anfbd = dtcodp-anfbd, если = Х, тогда вызов идет с пропуском первого экрана. Транзакция ориентирована больше на вызовы ММ, так как основные параметры как видим материал, завод и т.д. Хотя в таблице it_params, можно передать и другие переменные. ФМ выполняет стандартную проверку на полномочия и сохраняет передаваемые параметры.