Текущее время: Чт, мар 28 2024, 17:05

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Выгрузка gos attachmenta на локальный компьютер.
СообщениеДобавлено: Пн, окт 21 2013, 12:05 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 05 2011, 06:11
Сообщения: 61
Добрый день. Помогите разобраться с проблемой.
В нашей системе к каждому материалу(BUS1001001) прикреплено фото посредством gos attachmenta.
Нужно выгрузить на локальный компьютер пользователя это фото посредством abap-программы.
Следующий код создает файл, но открыть его не получается. В чем может быть проблема?
Code:
REPORT zdownload_test.
START-OF-SELECTION.
  DATA: gs_lpor TYPE sibflporb,
        lt_relat TYPE obl_t_relt,
        la_relat LIKE LINE OF lt_relat.

  gs_lpor-instid = '000000000000200730'.
  gs_lpor-typeid = 'BUS1001001'.
  gs_lpor-catid  = 'BO'.

  la_relat-sign = 'I'.
  la_relat-option = 'CP'.
  la_relat-low = '*'.
  APPEND la_relat TO lt_relat.

  DATA: t_links TYPE obl_t_link,
        la_links LIKE LINE OF t_links.

  DATA: lo_root TYPE REF TO cx_root.

  TRY.
      CALL METHOD cl_binary_relation=>read_links
        EXPORTING
          is_object           = gs_lpor
          it_relation_options = lt_relat
        IMPORTING
          et_links            = t_links.
    CATCH cx_root INTO lo_root.
  ENDTRY.

  DATA l_folder_id TYPE soodk.
  DATA l_object_id TYPE soodk.
  DATA document_id TYPE sofmk.

  READ TABLE t_links INTO la_links INDEX 1.
  document_id = la_links-instid_b.

  l_folder_id-objtp = document_id-foltp.
  l_folder_id-objyr = document_id-folyr.
  l_folder_id-objno = document_id-folno.

  l_object_id-objtp = document_id-doctp.
  l_object_id-objyr = document_id-docyr.
  l_object_id-objno = document_id-docno.

  DATA: document_content  TYPE STANDARD TABLE OF soli,
        sofm2   TYPE sood2. " Кто и когда создал
* Получение содержимого файла.
  CALL FUNCTION 'SO_OBJECT_READ'
    EXPORTING
      folder_id                  = l_folder_id
      object_id                  = l_object_id
    IMPORTING
      object_hd_display          = sofm2
    TABLES
      objcont                    = document_content
    EXCEPTIONS
      active_user_not_exist      = 1
      communication_failure      = 2
      component_not_available    = 3
      folder_not_exist           = 4
      folder_no_authorization    = 5
      object_not_exist           = 6
      object_no_authorization    = 7
      operation_no_authorization = 8
      owner_not_exist            = 9
      parameter_error            = 10
      substitute_not_active      = 11
      substitute_not_defined     = 12
      system_failure             = 13
      x_error                    = 14
      OTHERS                     = 15.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

* Выгрузка на локальный компьютер файла
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename          = 'C:\test.jpg'
      filetype          = 'BIN'
      confirm_overwrite = 'X'
    TABLES
      data_tab          = document_content.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выгрузка gos attachmenta на локальный компьютер.
СообщениеДобавлено: Пн, окт 21 2013, 13:57 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, фев 02 2009, 10:20
Сообщения: 89
Пол: Мужской
Попробуйте посчитайть размер контента и передать BIN_FILESIZE в ФМ GUI_DOWNLOAD.

_________________
периодически играю в песочнице :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка gos attachmenta на локальный компьютер.
СообщениеДобавлено: Пн, окт 21 2013, 14:57 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 05 2011, 06:11
Сообщения: 61
Вроде понял в чем проблема. Если gos attachment является текстовым файликом то ФМ 'SO_OBJECT_READ' в выходном табличном параметре возвращает содержимое текствого файла.
Если же gos attachment является файлом картинкой то ФМ 'SO_OBJECT_READ' возвращает параметр
document_content = '&SO_KProObjectID=SOFFLOIO 525E9A4AC0050C10E10080000ABAB980' а не содержимое картинки в двоичном коде.
Осталось понять как по document_content = '&SO_KProObjectID=SOFFLOIO 525E9A4AC0050C10E10080000ABAB980' выудить содержимое картинки в двоичном коде.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выгрузка gos attachmenta на локальный компьютер.
СообщениеДобавлено: Пн, окт 21 2013, 16:40 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 05 2011, 06:11
Сообщения: 61
Разобрался с проблемой. Для чтения содержимого gos attachmenta нужно использовать ФМ SO_DOCUMENT_READ_API1.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выгрузка gos attachmenta на локальный компьютер.
СообщениеДобавлено: Вт, окт 17 2017, 08:11 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, янв 29 2010, 06:15
Сообщения: 58
У меня возникла подобная проблема.
Cначала при помощи ФМ 'SO_DOCUMENT_READ_API1' получила таблицы OBJECT_HEADER и OBJECT_CONTENT с данными аттачмента GOS.
После этого мне надо сохранить аттачмент в файл на локальный компьютер в указанную папку. Файлы могут быть Excel, Word, PDF. Имя файла и имя папки должно формироваться программно, но проблема не в этом.
Для проверки, как это работает, написала простейшую программу.
Использую ФМ 'GUI_DOWNLOAD' для сохранения аттачмента на компьютер. Файл test.pdf создается, но не открывается.
При попытке открыть его возникает ошибка "Произошла ошибка при открытии данного документа. Файл поврежден и не может быть восстановлен".
Прообовала передавать в ФМ 'GUI_DOWNLOAD' параметр BIN_FILESIZE = l_DOCUMENT-DOC_SIZE, все равно при открытии ошибка.
Что я делаю не так?
Может есть другой способ сохранять файлы аттачмента GOS на компьютер?
Code:
REPORT  ZTEST_DOWNLOAD_GOS.
DATA:  lt_HEADER type table of SOLISTI1,
      lt_CONTENT type table of SOLISTI1 WITH HEADER LINE,
      lt_DOCUMENT type table of SOFOLENTI1 WITH HEADER LINE,
      l_DOCUMENT LIKE SOFOLENTI1,
      DOC_id TYPE SOFOLENTI1-DOC_ID.


   CALL FUNCTION 'SO_DOCUMENT_READ_API1'
          EXPORTING
           DOCUMENT_ID                      = 'FOL32000000000004EXT42000000000008'
          IMPORTING
           DOCUMENT_DATA                    = l_DOCUMENT
          TABLES
           OBJECT_HEADER                    = lt_HEADER
           OBJECT_CONTENT                   = lt_CONTENT
          EXCEPTIONS
            DOCUMENT_ID_NOT_EXIST            = 1
            OPERATION_NO_AUTHORIZATION       = 2
            X_ERROR                          = 3
          OTHERS                           = 4
                  .
* Выгрузка на локальный компьютер файла
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
*      BIN_FILESIZE      = 000000851613
      filename          = 'C:\test.pdf'
      filetype          = 'BIN'
      confirm_overwrite = 'X'
    TABLES
      data_tab          = lt_CONTENT.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выгрузка gos attachmenta на локальный компьютер.
СообщениеДобавлено: Вт, окт 17 2017, 08:49 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 10:50
Сообщения: 197
Можете почитать тут

https://wiki.scn.sap.com/wiki/display/A ... ntoPDFfile?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выгрузка gos attachmenta на локальный компьютер.
СообщениеДобавлено: Вт, окт 17 2017, 15:29 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 01 2004, 07:44
Сообщения: 174
В параметре OBJECT_CONTENT возвращаются данные, хранящиеся в текстовом формате.
Binary-файлы возвращаются в параметре CONTENTS_HEX фм

_________________
Жизнь прекрасна! Если правильно подобрать антидепрессанты...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выгрузка gos attachmenta на локальный компьютер.
СообщениеДобавлено: Ср, окт 18 2017, 13:48 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, янв 29 2010, 06:15
Сообщения: 58
Спасибо, vvk! Подставила в ФМ GUI_DOWNLOAD другую таблицу, и все заработало! Тема закрыта.
Code:
REPORT  ZTEST_DOWNLOAD_GOS.
DATA:  lt_HEADER type table of SOLISTI1,
      lt_CONTENT type table of SOLISTI1 WITH HEADER LINE,
      lt_DOCUMENT type table of SOFOLENTI1 WITH HEADER LINE,
      l_DOCUMENT LIKE SOFOLENTI1,
      LT_HEX TYPE TABLE OF   SOLIX WITH HEADER LINE,
      DOC_id TYPE SOFOLENTI1-DOC_ID.


   CALL FUNCTION 'SO_DOCUMENT_READ_API1'
          EXPORTING
           DOCUMENT_ID                      = 'FOL32000000000004EXT42000000000008'
          IMPORTING
           DOCUMENT_DATA                    = l_DOCUMENT
          TABLES
           OBJECT_HEADER                    = lt_HEADER
           OBJECT_CONTENT                   = lt_CONTENT
           CONTENTS_HEX                     = LT_HEX
          EXCEPTIONS
            DOCUMENT_ID_NOT_EXIST            = 1
            OPERATION_NO_AUTHORIZATION       = 2
            X_ERROR                          = 3
          OTHERS                           = 4
                  .
* Выгрузка на локальный компьютер файла
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
*      BIN_FILESIZE      = 000000851613
      filename          = 'C:\test.pdf'
      filetype          = 'BIN'
      confirm_overwrite = 'X'
    TABLES
      data_tab          =  LT_HEX.


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

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


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

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


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

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