Изменить префикс пути назначения - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть пункт назначения, автоматически созданный какой-то программой.

Теперь я хочу программно изменить префикс пути назначения во время выполнения. Это возможно?

Я просматривал эту документацию

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

Здесь упоминается, что если префикс пути не указан, то uri можно изменить. Таким образом, у меня был пункт назначения без префикса пути, а затем я попытался использовать метод if_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

        destination_not_found    = 1

        internal_error           = 2

         argument_not_found = 3

        destination_no_authority = 4

         plugin_not_active  = 5

        others                   = 6.

   cl_http_utility=>set_request_uri( request = client->request
   uri = uri ).



   gv_subrc = sy-subrc.
  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 http_communication_failure  = 1

             http_invalid_state          = 2

             http_processing_failed      = 3

             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 http_communication_failure  = 1

               http_invalid_state          = 2

               http_processing_failed      = 3

               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

Ответы [ 3 ]

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

Чтобы узнать, работает ли HTTP-запрос, вы должны прочитать ответ после получения:

call method client->receive
...
data(response) = client->response->get_cdata( ). " <== missing part
0 голосов
/ 13 ноября 2018

Я думаю, что «префикс пути» RFC-адреса (транзакция SM59) нельзя игнорировать во время выполнения, поскольку настройки, выполняемые администратором, не должны игнорироваться программами.

(у меня нет официальной ссылки для аргументации, я только сделал тест, чтобы подтвердить ваш вывод)

Это можно рассматривать как команды низкого уровня операционной системы: администратор определит те, которые разрешено использовать ABAP-программам в транзакции SM49, другие команды использовать нельзя.

Более того, другие данные назначения RFC могут быть действительными только для этого префикса пути (например, для аутентификации).

Если программе нужно разрешить доступ к любому пути, то администратору следует оставить префикс пути пустым.

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

Попробуйте вместо этого:

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-адреса.

...