Текущее время: Пт, мар 29 2024, 05:03

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: ЕГАИС: http-запрос из SAP к УТМ, ограничение длины.
СообщениеДобавлено: Пн, дек 07 2015, 18:30 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
Доброе время суток.

Настраиваю http-запросы из SAP к УТМ ЕГАИС-а.

Считывание файлов настроила, проблема при отправке фалов на сервер.

Код следующий:

в SM59 создала HTTP-соединение:
Code:
        cl_http_client=>create_by_destination( EXPORTING
        destination = http_dest IMPORTING client = CLIENT ).
        request = CLIENT->request.

*    устанавливаю метод POST
    call method client->request->set_method(
      if_http_request=>CO_REQUEST_METHOD_POST ).

*    устанавливаю версию протокола
    client->request->set_version(
      if_http_request=>co_protocol_version_1_0 ).

*    content type 'multipart/form-data'
    CALL METHOD CLIENT->REQUEST->IF_HTTP_ENTITY~SET_CONTENT_TYPE
      EXPORTING
*           CONTENT_TYPE = 'text/xml'.
           CONTENT_TYPE = 'multipart/form-data'.

CALL METHOD CLIENT->REQUEST->SET_HEADER_FIELD
  EXPORTING
    NAME   = 'Accept'
*    VALUE  = 'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8'.
    VALUE  = 'text/xml'.

CALL METHOD CLIENT->REQUEST->SET_HEADER_FIELD
  EXPORTING
    NAME   = 'Accept-Charset'
    VALUE  = 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'.

CALL METHOD CLIENT->REQUEST->IF_HTTP_ENTITY~SET_FORMFIELD_ENCODING
  EXPORTING
    FORMFIELD_ENCODING = CL_HTTP_REQUEST=>IF_HTTP_ENTITY~CO_ENCODING_RAW .

  data:    part type ref to if_http_entity.
* устанавливаю имя выгружаемого файла
part =  CLIENT->REQUEST->IF_HTTP_ENTITY~ADD_MULTIPART( ).
CALL METHOD part->set_header_field
  EXPORTING
    name  = 'content-disposition'
    value = 'form-data; name="xml_file"; filename="TTNAct.xml";'.
* в переменной str  текст XML файла в бинарном виде длина 671 символ
CALL METHOD part->set_data
  EXPORTING
    data   = str
    offset = 0.
*и делаю отправку
call method client->send
  EXPORTING
    timeout                    = 200
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    others                     = 4.

В ответ ошибка 500 Error Server
В логах УТМ сл. ошибка : Элемент ns:Documents должен завершаться символом > или />
получается что при выгрузке файла на сервер часть данных обрезается.

кто сталкивался с данной проблемой????

P.S. XML файл следующего формата
<?xml version="1.0" encoding="UTF-8"?>
<ns:Documents Version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns= "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef"
xmlns:pref="http://fsrar.ru/WEGAIS/ProductRef"
xmlns:wa= "http://fsrar.ru/WEGAIS/ActTTNSingle"
>
<ns:Owner>
<ns:FSRAR_ID>011111111</ns:FSRAR_ID>
</ns:Owner>
<ns:Document>
<ns:WayBillAct>
<wa:Header>
<wa:IsAccept>Rejected</wa:IsAccept>
<wa:ACTNUMBER>1</wa:ACTNUMBER>
<wa:ActDate>2015-11-28</wa:ActDate>
<wa:WBRegId>TEST-TTN-1</wa:WBRegId>
<wa:Note> ПРИЧИНА </wa:Note>
</wa:Header>
<wa:Content>
</wa:Content>
</ns:WayBillAct>
</ns:Document>
</ns:Documents>


Последний раз редактировалось ablinka Сб, дек 19 2015, 14:03, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЕГАИС: HTTP запрос из Sap к УТМ, ограничение длины.
СообщениеДобавлено: Вт, дек 08 2015, 14:55 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
Неужели никто не делал выгрузку по HTTP???


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЕГАИС: HTTP запрос из Sap к УТМ, ограничение длины.
СообщениеДобавлено: Вт, дек 08 2015, 15:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1246
ablinka: ваше сообщение действительно в указанной кодировке? М.б. его все-таки надо подготовить?

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ЕГАИС: HTTP запрос из Sap к УТМ, ограничение длины.
СообщениеДобавлено: Вт, дек 08 2015, 16:43 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
Кодер написал(а):
ablinka: ваше сообщение действительно в указанной кодировке? М.б. его все-таки надо подготовить?

Не совсем Вас поняла. Кодировка должна быть utf-8. и Судя по ответу сервера, с кодировкой все ок.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЕГАИС: HTTP запрос из Sap к УТМ, ограничение длины.
СообщениеДобавлено: Вт, дек 08 2015, 18:20 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Может поможет трассировка https://help.sap.com/saphelp_nwpi711/he ... ontent.htm

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ЕГАИС: HTTP запрос из Sap к УТМ, ограничение длины.
СообщениеДобавлено: Вт, дек 08 2015, 22:04 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1246
Цитата:
Не совсем Вас поняла. Кодировка должна быть utf-8. и Судя по ответу сервера, с кодировкой все ок.

Угу-угу. Должна. Только код свой вы не привели, указали только, что отдаете бинарником содержимое. При формировании xml внутри sap надо смотреть чем и как вы это делаете. Часто xml оказывается во внутр. кодировке самого SAP, и требует принудительной конверсии в utf-8

_________________
Там, где я рос, единственным развлечением было запоминать число «π».(С) Н. Стивенсон


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ЕГАИС: HTTP запрос из Sap к УТМ, ограничение длины.
СообщениеДобавлено: Ср, дек 09 2015, 14:58 
Начинающий
Начинающий

Зарегистрирован:
Ср, дек 09 2015, 14:54
Сообщения: 15
Добрый день! Дело в не длине. Дело в кодировке. Попробуйте файлик формировать не в сапе, а загружать его с компа. Например:

Code:
data: data_table type SSFBIN occurs 0 with header line,
      tablelen type i,
      body type xstring.
call function 'GUI_UPLOAD'
    exporting
      filename                      = 'C:\cURL\client.xml'
     FILETYPE                      = 'BIN'
   IMPORTING
     FILELENGTH                    = tablelen
*     HEADER                        =
    tables
      data_tab                      = data_table[]
*   CHANGING
*     ISSCANPERFORMED               = ' '
   EXCEPTIONS
     FILE_OPEN_ERROR               = 1
     FILE_READ_ERROR               = 2
     NO_BATCH                      = 3
     GUI_REFUSE_FILETRANSFER       = 4
     INVALID_TYPE                  = 5
     NO_AUTHORITY                  = 6
     UNKNOWN_ERROR                 = 7
     BAD_DATA_FORMAT               = 8
     HEADER_NOT_ALLOWED            = 9
     SEPARATOR_NOT_ALLOWED         = 10
     HEADER_TOO_LONG               = 11
     UNKNOWN_DP_ERROR              = 12
     ACCESS_DENIED                 = 13
     DP_OUT_OF_MEMORY              = 14
     DISK_FULL                     = 15
     DP_TIMEOUT                    = 16
     OTHERS                        = 17.

call function 'SCMS_BINARY_TO_XSTRING'
  exporting
    input_length       = tablelen
*   FIRST_LINE         = 0
*   LAST_LINE          = 0
IMPORTING
   BUFFER             = body
  tables
    binary_tab         = data_table[]
* EXCEPTIONS
*   FAILED             = 1
*   OTHERS             = 2
          .

CALL METHOD part->set_data
EXPORTING
data = body
offset = 0.


И дальше уже send. У меня так получается) А дальше уже думайте, что делать с кодировкой :)

P.S. Файлик засасывать нужно тот, который заведомо нравится ЕГАИСу (создайте его ручками, а не выгрузкой из сапа)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЕГАИС: HTTP запрос из Sap к УТМ, ограничение длины.
СообщениеДобавлено: Сб, дек 19 2015, 14:01 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
УШЕЛ!!! Всем спасибо!
elfilika написал(а):
P.S. Файлик засасывать нужно тот, который заведомо нравится ЕГАИСу (создайте его ручками, а не выгрузкой из сапа)

К сожалению, ручками тут никак не подходит.
Кодер написал(а):
Угу-угу. Должна. Только код свой вы не привели, указали только, что отдаете бинарником содержимое. При формировании xml внутри sap надо смотреть чем и как вы это делаете. Часто xml оказывается во внутр. кодировке самого SAP, и требует принудительной конверсии в utf-8

Вы были правы!
Итак, что сделала:
Code:
 
*перевожу таблицу с XML кодом в string
call function 'SOTR_SERV_TABLE_TO_STRING'
    importing
      text         = l_text
    tables
      text_tab     = TAB_XML.
*а далее  перевожу string в xstring  с кодировкой UTF-8
app_type = 'text/plain; charset=utf-8'.

  call function 'SCMS_STRING_TO_XSTRING'
    exporting
      text         = l_text
       mimetype = app_type
    importing
      buffer       = l_xstring_data
    exceptions
      failed       = 1
      others       = 2.


и этот xstring в UTF-8 отправляю через HTTP. Файлик ушел - ответ пришел!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЕГАИС: HTTP запрос из Sap к УТМ, ограничение длины.
СообщениеДобавлено: Чт, мар 24 2016, 15:11 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
Хотелось бы поднять тему снова, может кто делал удаление документов через HTTP запрос ?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЕГАИС: http-запрос из SAP к УТМ, ограничение длины.
СообщениеДобавлено: Вс, сен 11 2016, 17:12 
Начинающий
Начинающий

Зарегистрирован:
Ср, июл 22 2015, 08:36
Сообщения: 1
Цитата:
Хотелось бы поднять тему снова, может кто делал удаление документов через HTTP запрос ?


Code:
CALL METHOD cl_http_client=>create
    EXPORTING
      host               = '---url---'
      service            = '8080'
    IMPORTING
      client             = lo_http_client
    EXCEPTIONS
      argument_not_found = 1
      internal_error     = 2
      plugin_not_active  = 3
      OTHERS             = 4.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  CALL METHOD lo_http_client->request->set_header_field
    EXPORTING
      name  = '~request_uri'
      value = '/opt/out/Ticket/1'.

  CALL METHOD lo_http_client->request->set_header_field
    EXPORTING
      name  = '~request_method'
      value = 'DELETE'.

  CALL METHOD lo_http_client->send
    EXPORTING
      timeout                    = 100
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      http_invalid_timeout       = 4
      OTHERS                     = 5.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  CALL METHOD lo_http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      OTHERS                     = 4.

  IF sy-subrc <> 0.
    EXIT.
  ELSE.

    lo_http_client->response->get_status( IMPORTING code = http_rc ).
    WRITE: 'http status code = ', http_rc.

    w_result = lo_http_client->response->get_cdata( ).
    lo_http_client->close( ).

    REFRESH result_tab .
    SPLIT w_result AT cl_abap_char_utilities=>cr_lf INTO TABLE result_tab .
    LOOP AT result_tab INTO w_result.
      WRITE :/ w_result.
    ENDLOOP.
  ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ЕГАИС: http-запрос из SAP к УТМ, ограничение длины.
СообщениеДобавлено: Пн, дек 05 2016, 11:22 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
virt32 написал(а):
Цитата:
Хотелось бы поднять тему снова, может кто делал удаление документов через HTTP запрос ?


Code:
CALL METHOD cl_http_client=>create
    EXPORTING
      host               = '---url---'
      service            = '8080'
    IMPORTING
      client             = lo_http_client
    EXCEPTIONS
      argument_not_found = 1
      internal_error     = 2
      plugin_not_active  = 3
      OTHERS             = 4.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  CALL METHOD lo_http_client->request->set_header_field
    EXPORTING
      name  = '~request_uri'
      value = '/opt/out/Ticket/1'.

  CALL METHOD lo_http_client->request->set_header_field
    EXPORTING
      name  = '~request_method'
      value = 'DELETE'.

  CALL METHOD lo_http_client->send
    EXPORTING
      timeout                    = 100
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      http_invalid_timeout       = 4
      OTHERS                     = 5.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  CALL METHOD lo_http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      OTHERS                     = 4.

  IF sy-subrc <> 0.
    EXIT.
  ELSE.

    lo_http_client->response->get_status( IMPORTING code = http_rc ).
    WRITE: 'http status code = ', http_rc.

    w_result = lo_http_client->response->get_cdata( ).
    lo_http_client->close( ).

    REFRESH result_tab .
    SPLIT w_result AT cl_abap_char_utilities=>cr_lf INTO TABLE result_tab .
    LOOP AT result_tab INTO w_result.
      WRITE :/ w_result.
    ENDLOOP.
  ENDIF.



Огромное спасибо! Попробую!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB