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

Abap 通过XBP获取有关报表可用参数的信息,abap,Abap,我想了解有关报告的信息。如果我这样调用报告,我想知道哪些值可用: SUBMIT (IV_REPORT_NAME) WITH SELECTION-TABLE selection_table AND RETURN. 以下是我的尝试: FUNCTION /FOO/GET_REPORT_INFO. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle:

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

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.
FUNCTION/FOO/GET\u REPORT\u INFO。
*"----------------------------------------------------------------------
*“*”Lokale Schnittstelle:
*“进口
*“值(IV_报告_名称)类型程序
*“出口
*“值(EV_结果_JSON)类型字符串
*"----------------------------------------------------------------------
数据:
ld_返回类型BAPIRET2,
it_selscreen_info类型BAPI_selscreen_info的标准表格,“表格参数
wa_selscreen_信息,如it_selscreen_信息行,
它是文本池的文本类型标准表,“表参数”
wa_selscreen_文本,如it_selscreen_文本行,
ld_外部_用户名类型BAPIXMLOGR-EXTUSER。
ld_外部_用户名='foo'。
调用函数“BAPI\u XBP\u READ\u SELSCREEN”
出口
程序=IV\u报告\u名称
外部用户名称=ld\u外部用户名称
进口
return=ld\u return
桌子
selscreen\u info=it\u selscreen\u info
.
ev_result_json=/ui2/cl_json=>serialize(data=it\u selscreen\u info pretty\u name=/ui2/cl_json=>pretty\u mode-low\u case)。
如果sy subrc为0。
消息|错误sy subrc:{sy subrc}|类型为“E”。
恩迪夫。
ENDFUNCTION。
但结果总是空的

我做错了什么?
BAPI\u XBP\u READ\u SELSCREEN
是实现我目标的正确方法吗?

请检查用户名“foo”。如果foo不是外部用户,那么由于外部用户错误,结果将为空

问候,

Umar Abdullah

请检查用户名“foo”。如果foo不是外部用户,那么由于外部用户错误,结果将为空

问候,

Umar Abdullah

这是一个关于“为什么
BAPI\u XBP\u READ\u SELSCREEN
不起作用”的答案,而不是关于“如何检索选择屏幕参数”这一主要问题的答案

我不确定,但我猜
BAPI\u XBP\u READ\u SELSCREEN
不起作用,因为您没有应用XBP的常规逻辑

XBP(“外部后台处理”)是一个API库,用于从外部调度器调度作业。它基于其他API使用的XMI(“外部管理接口”框架),它提供了常见的特性,尤其是日志

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

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

  • 调用函数模块
    BAPI\u XMI\u LOGON
    打开一个会话以使用您想要使用的API库。对于XBP,使用参数接口='XBP'和版本='3.0'(或您想要的版本)。EXTCOMPANY和EXTPRODUCT参数可以是任何值,它们仅在同一会话期间使用不同的XMI API库时使用,必须传递相同的值
  • 调用所需的API(
    BAPI\u XBP\u READ\u SELSCREEN
    )。注意,有一个“外部用户”参数,它是一个自由字段,是外部应用程序的标识符。该值与日志一起存储,以便您可以通过外部应用程序(事务RZ15)显示或检索XMI日志
  • 呼叫
    BAPI\u XMI\u注销
  • 调用
    BAPI\u TRANSACTION\u COMMIT
    提交日志更改
  • 关闭RFC连接(如果远程调用了XMI和API)
这是关于“为什么
BAPI\u XBP\u READ\u SELSCREEN
不起作用”的答案,而不是关于“如何检索选择屏幕参数”这一主要问题的答案

我不确定,但我猜
BAPI\u XBP\u READ\u SELSCREEN
不起作用,因为您没有应用XBP的常规逻辑

XBP(“外部后台处理”)是一个API库,用于从外部调度器调度作业。它基于其他API使用的XMI(“外部管理接口”框架),它提供了常见的特性,尤其是日志

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

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

  • 调用函数模块
    BAPI\u XMI\u LOGON
    打开一个会话以使用您想要使用的API库。对于XBP,使用参数接口='XBP'和版本='3.0'(或您想要的版本)。EXTCOMPANY和EXTPRODUCT参数可以是任何值,它们仅在同一会话期间使用不同的XMI API库时使用,必须传递相同的值
  • 调用所需的API(
    BAPI\u XBP\u READ\u SELSCREEN
    )。注意,有一个“外部用户”参数,它是一个自由字段,是外部应用程序的标识符。该值与日志一起存储,以便您可以通过外部应用程序(事务RZ15)显示或检索XMI日志
  • 呼叫
    BAPI\u XMI\u注销
  • 调用
    BAPI\u TRANSACTION\u COMMIT
    提交日志更改
  • 关闭RFC连接(如果远程调用了XMI和API)

我刚刚用下面的程序成功地测试了BAPI\u XBP\u READ\u 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.

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

我很不确定外部用户名是什么意思。我试图使用SY-UNAME,但失败了。你知道为什么需要这个参数吗?@guettli我不知道
BAPI\u XBP\u READ\u SELSCREEN
但我知道XBP(“外部后台处理”)。它是用于从外部调度器调度作业的API。它基于其他API使用的XMI(“外部管理接口”框架),它提供了常见的特性,尤其是日志。在XMI中,“外部用户”是一个自由字段,是用户的标识符