Текущее время: Пн, май 06 2024, 19:34

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


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

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


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

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