Получить информацию о доступных параметрах отчета - PullRequest
0 голосов
/ 01 ноября 2018

Я хотел бы получить информацию об отчете. Я хочу знать, какие значения доступны, если я вызываю отчет следующим образом:

SUBMIT (IV_REPORT_NAME)
   WITH SELECTION-TABLE selection_table
  AND RETURN.

Вот моя попытка:

FUNCTION /FOO/GET_REPORT_INFO.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(IV_REPORT_NAME) TYPE  PROGRAMM
*"  EXPORTING
*"     VALUE(EV_RESULT_JSON) TYPE  STRING
*"----------------------------------------------------------------------


DATA:
ld_return   TYPE BAPIRET2,
it_selscreen_info   TYPE STANDARD TABLE OF BAPI_SELSCREEN_INFO,"TABLES PARAM
wa_selscreen_info   LIKE LINE OF it_selscreen_info,
it_selscreen_texts  TYPE STANDARD TABLE OF TEXTPOOL,"TABLES PARAM
wa_selscreen_texts  LIKE LINE OF it_selscreen_texts,
ld_external_user_name TYPE BAPIXMLOGR-EXTUSER.

ld_external_user_name = 'foo'.


CALL FUNCTION 'BAPI_XBP_READ_SELSCREEN'
  EXPORTING
    program =                    IV_REPORT_NAME
    external_user_name =        ld_external_user_name
  IMPORTING
    return =                     ld_return
  TABLES
    selscreen_info =             it_selscreen_info
.



ev_result_json = /ui2/cl_json=>serialize( data = it_selscreen_info pretty_name = /ui2/cl_json=>pretty_mode-low_case ).
IF sy-subrc <> 0.
  MESSAGE |Error sy-subrc: { sy-subrc }| TYPE 'E'.
ENDIF.


ENDFUNCTION.

Но результат всегда пуст.

Что я делаю не так? Является ли BAPI_XBP_READ_SELSCREEN правильным методом для моей цели?

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Это ответ на вопрос «почему BAPI_XBP_READ_SELSCREEN не работает», а не ответ на главный вопрос «Как получить параметры экрана выбора».

Я не уверен, но, думаю, BAPI_XBP_READ_SELSCREEN не работает, потому что вы не применяете обычную логику XBP.

XBP («eXternal Background Processing») - это библиотека API, используемая для планирования заданий из внешнего планировщика. Он основан на XMI (инфраструктура "eXternal Management Interface"), которая используется другими API и предлагает общие функции, особенно журнал.

XMI и приложения, основанные на XMI, поддерживают RFC, поэтому их можно вызывать удаленно.

Чтобы использовать API на основе XMI, необходимо:

  • вызовите функциональный модуль BAPI_XMI_LOGON, чтобы открыть сеанс для использования библиотеки API, которую вы хотите использовать. Для XBP используйте параметры INTERFACE = 'XBP' и VERSION = '3.0' (или нужную версию). Параметры EXTCOMPANY и EXTPRODUCT могут быть любыми значениями, они используются только тогда, когда разные библиотеки API XMI используются во время одного сеанса, должны передаваться одни и те же значения.
  • вызовите нужные API-интерфейсы (BAPI_XBP_READ_SELSCREEN в вашем случае). Обратите внимание, что есть параметр «внешний пользователь», который является свободным полем, чтобы быть идентификатором внешнего приложения. Это значение сохраняется вместе с журналами, чтобы вы могли просматривать или получать журналы XMI с помощью внешнего приложения (транзакция RZ15).
  • звоните BAPI_XMI_LOGOFF
  • вызов BAPI_TRANSACTION_COMMIT для фиксации изменений в журнале
  • закрыть соединение RFC (если XMI и API вызывались удаленно)
0 голосов
/ 18 ноября 2018

Я только что успешно протестировал BAPI_XBP_READ_SELSCREEN с программой ниже (пожалуйста, обработайте исключения), так что я думаю, что это хорошая идея:

DATA rfcdest TYPE rfcdest.

rfcdest = ''. " XBP is well suited for RFC, but this test doesn't need remote call.

CALL FUNCTION 'BAPI_XMI_LOGON'
  DESTINATION rfcdest
  EXPORTING
    extcompany = 'ABAPERS&CO'
    extproduct = 'NICEJOBSCHEDULER'
    interface  = 'XBP'
    version    = '3.0'.

DATA: selscreen_info  TYPE STANDARD TABLE OF bapi_selscreen_info,
      selscreen_texts TYPE STANDARD TABLE OF textpool.

CALL FUNCTION 'BAPI_XBP_READ_SELSCREEN'
  DESTINATION rfcdest
  EXPORTING
    program            = 'BTCAUX10'
    external_user_name = 'SRO'
    sel_text_lang      = 'E' " English
  TABLES
    selscreen_info     = selscreen_info
    selscreen_texts    = selscreen_texts.

CALL FUNCTION 'BAPI_XMI_LOGOFF'
  DESTINATION rfcdest.

IF rfcdest IS NOT INITIAL. " if you use RFC, close the connection!
  CALL FUNCTION 'RFC_CONNECTION_CLOSE'
    EXPORTING
      destination          = rfcdest
    EXCEPTIONS
      destination_not_open = 1
      OTHERS               = 2.
ENDIF.
0 голосов
/ 01 ноября 2018

Пожалуйста, проверьте имя пользователя "foo". Если foo не является внешним пользователем, то результат будет пустым из-за неправильного внешнего пользователя.

С уважением,

Умар Абдулла

...