Текущее время: Ср, апр 24 2024, 23:37

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Another GOS .
СообщениеДобавлено: Ср, авг 24 2016, 15:34 
Начинающий
Начинающий

Зарегистрирован:
Ср, янв 09 2013, 12:42
Сообщения: 15
Добрый день. Хочу попросить помощи у более опытных коллег Абаперов.
Есть некий код индусов, который должен прикреплять файл к ритейл материалу.
Файл формата EXCEL ( 2003 наверно потому что xls )
В результате этот код не работает. Файл прикрепляется , но после открытия прикреплённого файла видно что он повреждён - целая куча иероглифов и технических символов.
Code:
REPORT z_gos_attachment NO STANDARD PAGE HEADING
LINE-COUNT 132.
*———————————————————————*
* SELECTION SCREEN                                                    *
*———————————————————————*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS:
      p_file   TYPE localfile DEFAULT '/ftp-storage/data/inbound/ERP/MM42/014220174.xls' LOWER CASE,      " APPLICATION FILE path
      p_objid  TYPE swo_typeid DEFAULT '000000000014220174',               " ANY OBJECT LIKE material no/vendor
                                              "/customer/po/pr etc
      p_bo     TYPE swo_objtyp DEFAULT 'BUS1001001'.
                                                " business object like lfa1 for vendor
selection-screen end of block b1.
DATA:
    l_xstring    type xstring,
    l_doc_size   type i,
    li_content   TYPE  STANDARD TABLE OF soli,
    li_objhead   TYPE STANDARD TABLE OF soli,
    lwa_folmem_k TYPE sofmk,
    lwa_note     TYPE borident,
    lwa_object   TYPE borident,
    lwa_obj_id   TYPE soodk,
    lwa_content  TYPE soli,
    lwa_fol_id   TYPE soodk,
    lwa_obj_data TYPE sood1,
    lv_ep_note   TYPE borident-objkey,
    lv_lifnr     TYPE lifnr,
    lv_file      TYPE string,
    lv_filename  TYPE c LENGTH 100, " FILE NAME AND ext
    lv_extension TYPE c LENGTH 4.
" extension only
*   Refresh data
refresh: li_content[], li_objhead[].

*   Open corresponding DMS files
OPEN DATASET p_file FOR INPUT IN BINARY MODE.
IF sy-subrc EQ 0.
*  WHILE sy-subrc = 0.
*    READ DATASET p_file INTO lwa_content.
** Do not put Sy-subrc eq 0 here. Please add the last line of the file,
** though sy-subrc may fail
*    APPEND  lwa_content TO li_content.
*  ENDWHILE.
  READ DATASET p_file into l_xstring.
* Close file
  CLOSE DATASET p_file.

*--------------------------------------------------------------------*
* ANOTHER WAY OF READING FILE
*Convert string to binary format
        CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
        EXPORTING
        buffer = l_xstring
* APPEND_TO_TABLE = ' '
        IMPORTING
        output_length = l_doc_size
        TABLES
        binary_tab = li_content.
*--------------------------------------------------------------------*

*--------------------------------------------------------------------*
* YET ANOTHER WAY OF CONVERTING FILE.
*data: lt_solix_tab type solix_tab.
*  lt_solix_tab = cl_document_bcs=>xstring_to_solix( l_xstring ).
*--------------------------------------------------------------------*



* In this example we are attaching in Vendor.
* Converting according to your requirement.. For example for Material,
* it should be 18 chars
* Convert Vendor
*  CALL FUNCTION 'conversion_exit_alpha_input'
*    EXPORTING
*      input  = p_objid
*    IMPORTING
*      output = lv_lifnr.

* Convert to BIN
*  CALL FUNCTION 'SO_CONVERT_CONTENTS_BIN'
*    EXPORTING
*      it_contents_bin = li_content[]
*    IMPORTING
*      et_contents_bin = li_content[].

* Get folder id
  CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
    EXPORTING
      region                = 'B'
    IMPORTING
      folder_id             = lwa_fol_id
    EXCEPTIONS
      communication_failure = 1
      owner_not_exist       = 2
      system_failure        = 3
      x_error               = 4
      OTHERS                = 5.
* Sy-subrc check not required
* Keeping file in string data type
  lv_file = p_file.
* You may not need this step. But  no harm in adding this
* Get file name and extension
*  CALL FUNCTION 'CH_SPLIT_FILENAME'
*    EXPORTING
*      complete_filename = lv_file
*    IMPORTING
*      extension         = lv_extension
*      name_with_ext     = lv_filename
*    EXCEPTIONS
*      invalid_drive     = 1
*      invalid_path      = 2
*      OTHERS            = 3.
   data: lr_filepath type REF TO cl_fs_path.
   lr_filepath ?= cl_fs_path=>create( p_file ).
   lv_filename = lr_filepath->get_file_name( ).
   lv_extension = lr_filepath->get_file_extension( ).
  IF sy-subrc EQ 0.
* Object header
    CLEAR lwa_content.
    CONCATENATE '&SO_FILENAME=' lv_filename INTO lwa_content.
    APPEND lwa_content TO li_objhead.
    CLEAR lwa_content.
    lwa_content = '&SO_FORMAT=BIN'.
    append lwa_content to li_objhead.
  ENDIF.

*  lwa_object-objkey  = lv_lifnr.
  lwa_object-objkey  = p_objid.
* For example, business object name for PO is BUS2012,
* business object for PR is BUS2105,
* business object for Vendor is LFA1 etc
  lwa_object-objtype = p_bo.
*        lwa_object-logsys  = lv_logical_system.

  lwa_obj_data-objsns = 'O'.
  lwa_obj_data-objla = sy-langu.
  lwa_obj_data-objnam = 'MESSAGE'. "Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ! from zmm_input_newsku
  lwa_obj_data-objdes = 'test description'.
  replace all OCCURRENCES OF '.' in lv_extension with ''.
  lwa_obj_data-file_ext = lv_extension.

  TRANSLATE lwa_obj_data-file_ext TO UPPER CASE.
* This is very important step. If your object size does not match with the input
* file size, then your object might get attached, but it will show error while you
* try to open it.
* If you have a way, where you can read the input file size directly, then assign
* it directly else, use the below formula
*  lwa_obj_data-objlen =  lines( li_content ) * 255.
  lwa_obj_data-objlen =  l_doc_size.
*  lwa_obj_data-extct = 'K'.

* Insert data
  CALL FUNCTION 'SO_OBJECT_INSERT'
    EXPORTING
      folder_id                  = lwa_fol_id
      object_type                = 'EXT'
      object_hd_change           = lwa_obj_data
    IMPORTING
      object_id                  = lwa_obj_id
    TABLES
      objhead                    = li_objhead
      objcont                    = li_content
    EXCEPTIONS
      active_user_not_exist      = 1
      communication_failure      = 2
      component_not_available    = 3
      dl_name_exist              = 4
      folder_not_exist           = 5
      folder_no_authorization    = 6
      object_type_not_exist      = 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 = 0 AND lwa_object-objkey IS NOT INITIAL.
    lwa_folmem_k-foltp = lwa_fol_id-objtp.
    lwa_folmem_k-folyr = lwa_fol_id-objyr.
    lwa_folmem_k-folno = lwa_fol_id-objno.

* Please note: lwa_fol_id and lwa_obj_id are different work areas

    lwa_folmem_k-doctp = lwa_obj_id-objtp.
    lwa_folmem_k-docyr = lwa_obj_id-objyr.
    lwa_folmem_k-docno = lwa_obj_id-objno.

    lv_ep_note = lwa_folmem_k.
    lwa_note-objtype = 'MESSAGE'.
*          lwa_note-logsys    = lv_logical_system.
    lwa_note-objkey = lv_ep_note.

* Link it
    CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
      EXPORTING
        obj_rolea      = lwa_object
        obj_roleb      = lwa_note
        relationtype   = 'ATTA'
      EXCEPTIONS
        no_model       = 1
        internal_error = 2
        unknown        = 3
        OTHERS         = 4.
    IF sy-subrc EQ 0.
* Commit it
      COMMIT WORK.
      WRITE:/ 'attached successfully'.
    ENDIF.
  ELSE.
    MESSAGE 'error WHILE opening file' TYPE 'I'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDIF.


Есть ещё пример полностью рабочего кода , но там идёт загрузка с PC , я пробовал параметры с того варианта заполнять ничего не помогло.
В общем перерыл уже весь SCN , кучу различных вариантов перепробовал методом тыка , ничего не помогает.
Есть какие-нибудь идеи ?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Another GOS .
СообщениеДобавлено: Ср, авг 24 2016, 15:43 
Начинающий
Начинающий

Зарегистрирован:
Ср, янв 09 2013, 12:42
Сообщения: 15
Больше интересуют входящие параметры в SO_OBJECT_INSERT, например objhead, object_hd_change.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Another GOS .  Тема решена
СообщениеДобавлено: Ср, авг 24 2016, 17:27 
Начинающий
Начинающий

Зарегистрирован:
Ср, янв 09 2013, 12:42
Сообщения: 15
Методом тыка найден рабочий вариант, может кому пригодится .
Code:
*&---------------------------------------------------------------------*
*& Report  Z_GOS_ATTACHMENT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_gos_attachment NO STANDARD PAGE HEADING
LINE-COUNT 132.
*———————————————————————*
* SELECTION SCREEN                                                    *
*———————————————————————*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS:
      p_file   TYPE localfile DEFAULT '/ftp-storage/data/inbound/ERP/MM42/014220174.xls' LOWER CASE,      " APPLICATION FILE path
      p_objid  TYPE swo_typeid DEFAULT '000000000014220174',               " ANY OBJECT LIKE material no/vendor
                                              "/customer/po/pr etc
      p_bo     TYPE swo_objtyp DEFAULT 'BUS1001001'.
                                                " business object like lfa1 for vendor
selection-screen end of block b1.
DATA:
    l_xstring    type xstring,
    l_doc_size   type i,
    li_content   TYPE  STANDARD TABLE OF soli,
    li_objhead   TYPE STANDARD TABLE OF soli,
    lwa_folmem_k TYPE sofmk,
    lwa_note     TYPE borident,
    lwa_object   TYPE borident,
    lwa_obj_id   TYPE soodk,
    lwa_content  TYPE soli,
    lwa_fol_id   TYPE soodk,
    lwa_obj_data TYPE sood1,
    lv_ep_note   TYPE borident-objkey,
    lv_file      TYPE string,
    lv_filename  TYPE c LENGTH 100, " FILE NAME AND ext
    lv_extension TYPE c LENGTH 4.
" extension only
*   Refresh data
refresh: li_content[], li_objhead[].
FIELD-SYMBOLS: <fs> type x.
ASSIGN lwa_content to <fs> CASTING.
*   Open corresponding DMS files
OPEN DATASET p_file FOR INPUT IN BINARY MODE.
IF sy-subrc EQ 0.

  READ DATASET p_file into l_xstring.
* Close file
  CLOSE DATASET p_file.

*--------------------------------------------------------------------*
* ANOTHER WAY OF READING FILE
*Convert string to binary format
        CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
        EXPORTING
        buffer = l_xstring
* APPEND_TO_TABLE = ' '
        IMPORTING
        output_length = l_doc_size
        TABLES
        binary_tab = li_content.
*--------------------------------------------------------------------*

* Get folder id
  CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
    EXPORTING
      region                = 'B'
    IMPORTING
      folder_id             = lwa_fol_id
    EXCEPTIONS
      communication_failure = 1
      owner_not_exist       = 2
      system_failure        = 3
      x_error               = 4
      OTHERS                = 5.

  lv_file = p_file.

   data: lr_filepath type REF TO cl_fs_path.
   lr_filepath ?= cl_fs_path=>create( p_file ).
   lv_filename = lr_filepath->get_file_name( ).
   lv_extension = lr_filepath->get_file_extension( ).
   
  IF sy-subrc EQ 0.
* Object header
    CLEAR lwa_content.
    CONCATENATE '&SO_FILENAME=' lv_filename INTO lwa_content.
    APPEND lwa_content TO li_objhead.
    CLEAR lwa_content.
    lwa_content = '&SO_FORMAT=BIN'.
    append lwa_content to li_objhead.
  ENDIF.

*  lwa_object-objkey  = lv_lifnr.
  lwa_object-objkey  = p_objid.
* For example, business object name for PO is BUS2012,
* business object for PR is BUS2105,
* business object for Vendor is LFA1 etc
  lwa_object-objtype = p_bo.
*        lwa_object-logsys  = lv_logical_system.

  lwa_obj_data-objsns = 'O'.
  lwa_obj_data-objla = sy-langu.
  lwa_obj_data-objnam = 'MESSAGE'.
  lwa_obj_data-objdes = 'test description'.
  replace all OCCURRENCES OF '.' in lv_extension with ''.
  lwa_obj_data-file_ext = lv_extension.

  TRANSLATE lwa_obj_data-file_ext TO UPPER CASE.
* This is very important step. If your object size does not match with the input
* file size, then your object might get attached, but it will show error while you
* try to open it.
* If you have a way, where you can read the input file size directly, then assign
* it directly else, use the below formula
*  lwa_obj_data-objlen =  lines( li_content ) * 255.
  lwa_obj_data-objlen =  l_doc_size .
*  lwa_obj_data-extct = 'K'.

* Convert to BIN
  CALL FUNCTION 'SO_CONVERT_CONTENTS_BIN'
    EXPORTING
      it_contents_bin = li_content[]
    IMPORTING
      et_contents_bin = li_content[].

* Insert data
  CALL FUNCTION 'SO_OBJECT_INSERT'
    EXPORTING
      folder_id                  = lwa_fol_id
      object_type                = 'EXT'
      object_hd_change           = lwa_obj_data
    IMPORTING
      object_id                  = lwa_obj_id
    TABLES
      objhead                    = li_objhead
      objcont                    = li_content
    EXCEPTIONS
      active_user_not_exist      = 1
      communication_failure      = 2
      component_not_available    = 3
      dl_name_exist              = 4
      folder_not_exist           = 5
      folder_no_authorization    = 6
      object_type_not_exist      = 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 = 0 AND lwa_object-objkey IS NOT INITIAL.
    lwa_folmem_k-foltp = lwa_fol_id-objtp.
    lwa_folmem_k-folyr = lwa_fol_id-objyr.
    lwa_folmem_k-folno = lwa_fol_id-objno.

* Please note: lwa_fol_id and lwa_obj_id are different work areas

    lwa_folmem_k-doctp = lwa_obj_id-objtp.
    lwa_folmem_k-docyr = lwa_obj_id-objyr.
    lwa_folmem_k-docno = lwa_obj_id-objno.

    lv_ep_note = lwa_folmem_k.
    lwa_note-objtype = 'MESSAGE'.
*          lwa_note-logsys    = lv_logical_system.
    lwa_note-objkey = lv_ep_note.

* Link it
    CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
      EXPORTING
        obj_rolea      = lwa_object
        obj_roleb      = lwa_note
        relationtype   = 'ATTA'
      EXCEPTIONS
        no_model       = 1
        internal_error = 2
        unknown        = 3
        OTHERS         = 4.
    IF sy-subrc EQ 0.
* Commit it
      COMMIT WORK.
      WRITE:/ 'attached successfully'.
    ENDIF.
  ELSE.
    MESSAGE 'error WHILE opening file' TYPE 'I'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDIF.


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

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


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

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


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

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