Текущее время: Пт, апр 19 2024, 05:57

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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