更改目标的路径前缀

  • 本文关键字:路径 前缀 目标 abap
  • 更新时间 :
  • 英文 :


我有一个由某个程序自动创建的目的地。

现在,我想在运行时以编程方式更改目标的路径前缀。这可能吗?

我正在浏览这份文件

https://help.sap.com/saphelp_nw70/helpdata/en/1f/93163f9959a808e10000000a114084/content.htm?no_cache=true

这提到,如果没有提到路径前缀,则可以更改URI。所以我有一个没有路径前缀的目的地,然后我尝试使用方法";http_utility~set_request_uri";,但这也没有奏效。

附有的代码样本

*&---------------------------------------------------------------------*
*& Report http_destination_program
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT http_destination_program.

DATA client type ref to if_http_client.
DATA cl_http_util type ref to cl_http_utility.
DATA dest type rfcdest.
DATA gv_subrc  TYPE sysubrc.
DATA uri type string.
DATA timeout type I.
DATA errortext type string.

uri = '/do/b/json'.
DEST = 'SAP'.
errortext = ' Cannot connect to server'.
timeout = 0.

CALL METHOD cl_http_client=>create_by_destination
exporting destination = dest
importing client      = client
exceptions
others              = 6.

cl_http_utility=>set_request_uri( request = client->request uri = uri ).
gv_subrc = cl_http_utility=>get_last_error( ).
IF gv_subrc <> 0.
WRITE: / 'Wrong URI format'.
EXIT.
ENDIF.
write 'Hello Saurav'.


call method client->send
exporting  timeout = timeout
exceptions others  = 4.

if sy-subrc <> 0.
call method client->get_last_error
importing code    = gv_subrc
message = errortext.
write: / 'communication_error( send )',
/ 'code: ', gv_subrc, 'message: ', 'test'.
endif.


call method client->receive
exceptions others = 4.
if sy-subrc <> 0.
call method client->get_last_error
importing code    = gv_subrc
message = errortext.
write: / 'communication_error( receive )',
/ 'code: ', gv_subrc, 'message: ', 'test'.
endif.

我不是ABAP和ABAP HTTP框架方面的专家。你能提供一些关于我如何实现我的场景的提示吗?

谨致问候,

Saurav

要知道HTTP请求是否有效,您应该在收到以下消息后读取响应:

call method client->receive
...
data(response) = client->response->get_cdata( ). " <== missing part

我认为RFC目的地(事务SM59(的"路径前缀"在运行时不能被忽略,因为程序不应该忽略管理员所做的自定义。

(我没有任何官方的论据,我只是做了一个测试来证实你的发现(

这可以看作是操作系统的低级命令,管理员将在事务SM49中定义ABAP程序允许使用的命令,其他命令不能使用。

此外,RFC目的地的其他数据可能仅对此路径前缀有效(例如身份验证(。

如果允许程序访问任何路径,则应要求管理员将路径前缀留空。

试试这个:

cl_http_client=>create_by_url(
EXPORTING
url                = lv_url
IMPORTING
client             = DATA(lo_http_client)
EXCEPTIONS
argument_not_found = 1
plugin_not_active  = 2
internal_error     = 3
OTHERS             = 4 ).

更改URL更方便。

相关内容

  • 没有找到相关文章

最新更新