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

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


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

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


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

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