我想获得有关报表的信息。如果我这样调用报告,我想知道哪些值可用:
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不是外部用户,那个么由于错误的外部用户,结果将为空。
问候,
奥马尔·阿卜杜拉