通过XBP获取有关报表可用参数的信息



我想获得有关报表的信息。如果我这样调用报告,我想知道哪些值可用:

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是实现我目标的正确方法吗?

这是关于"为什么CCD_ 2不起作用";,而不是关于主要问题的答案;"如何检索选择屏幕参数";。

我不确定,但我想BAPI_XBP_READ_SELSCREEN不起作用,因为你没有应用XBP的通常逻辑。

XBP("外部后台处理"(是用于从外部调度器调度作业的API库。它基于XMI("外部管理接口"框架(,其他API也使用它,它提供了一些常见的功能,尤其是日志。

XMI和基于XMI的应用程序支持RFC,因此可以远程调用它们。

要使用基于XMI的API,最低要求是:

  • 调用函数模块BAPI_XMI_LOGON打开会话以使用要使用的API库。
    • 对于XBP,请使用参数INTERFACE='XBP'和VERSION='3.0'(或您想要的版本(
    • 参数EXTCOMPANY和EXTPRODUCT可以是与SAP软件管理员商定的任何最大16个字符的名称(它们也可能是空白的(,并且如果定义了,则受S_XMI_PROD授权。如果它们在同一RFC会话中与不同的XMIneneneba API库一起使用,则必须传递相同的值
  • 调用所需的API(在您的情况下为BAPI_XBP_READ_SELSCREEN(。
    • 注意;外部用户";参数(通常为EXTERNAL_USER_NAME(,它是一个自由字段,是外部应用程序的标识符。此值与日志一起存储,以便您可以通过外部应用程序(事务RZ15(显示或检索XMI日志
  • 呼叫BAPI_XMI_LOGOFF
    • 有一个INTERFACE参数,其值必须与BAPI_XMI_LOGON中使用的值相同
  • 如果您已经调用了更新数据的API,请调用BAPI_TRANSACTION_COMMIT来提交这些更新

我刚刚用下面的程序成功测试了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.

请检查用户名"foo"。若foo不是外部用户,那个么由于错误的外部用户,结果将为空。

问候,

奥马尔·阿卜杜拉

相关内容

  • 没有找到相关文章

最新更新