Skip to Content

He tenido el requerimiento de anexar un documento a un pedido en MM, pero me he topado con que el método CREATE_ATTACHMENT selecciona en dialogo el archivo a anexar; pero parte del requerimiento que tenía es que el usuario indique la ruta completa donde se encuentra el archivo en lugar de seleccionarlo en dialogo.

Después de realizar un exhaustivo debug al metodo CREATE_ATTACHMENT de la clase CL_GOS_DOCUMENT_SERVICE, he logrado crear un programa funcional que utiliza las funciones SO_FOLDER_ROOT_ID_GET, SO_DOCUMENT_REPOSITORY_MANAGER y BINARY_RELATION_CREATE para lograr anexar un documento o archivo a un pedido en MM, sin que el usuario tenga que seleccionar el archivo (en dialogo), sino que utilizando la ruta que el usuario indique.

El código fuente es el siguiente:

*&———————————————————————*

*& Report  ZTESTMCA4

*&

*&———————————————————————*

*&

*&

*&———————————————————————*

REPORT  ztestmca4.

DATA attachment TYPE borident.

DATA documents  TYPE STANDARD TABLE OF sood4.

DATA document   TYPE sood4.

DATA folder_id  TYPE sofdk.

DATA: is_object TYPE borident.

DATA: ep_attachment TYPE swo_typeid.

DATA: it_objcont     TYPE TABLE OF soli,

       it_objhead     TYPE TABLE OF soli,

       it_objpara     TYPE TABLE OF selc,

       it_objparb     TYPE TABLE OF soop1,

       it_recipients  TYPE TABLE OF soos1,

       it_attachments TYPE TABLE OF sood5,

       it_references  TYPE TABLE OF soxrl,

       it_files       TYPE TABLE OF so_url,

       wa_files       TYPE so_url.

DATA: l_method        TYPE syucomm,

       l_authority     TYPE so_aut_fol,

       wa_ref_doc      TYPE sood4,

       wa_new_parent   TYPE soodk,

       wa_document     TYPE sood4,

       wa_header_data  TYPE sood2,

       wa_folmem_data  TYPE sofm2,

       wa_receive_data TYPE soos6.

DATA: l_filename TYPE string,

       l_objdes   TYPE so_obj_des,

       l_objtp    TYPE so_obj_tp.

* Obtener el Folio y ID

CALL FUNCTION ‘SO_FOLDER_ROOT_ID_GET’

   EXPORTING

     region    = ‘B’

   IMPORTING

     folder_id = folder_id

   EXCEPTIONS

     OTHERS    = 0.

document-foltp = folder_id-foltp.

document-folyr = folder_id-folyr.

document-folno = folder_id-folno.

APPEND document TO documents.

* Inicialización de las variables

FREE: wa_ref_doc, wa_new_parent, l_authority.

FREE: it_objcont, it_objhead, it_objpara, it_objparb,

       it_recipients, it_attachments, it_references,

       it_files.

* Llenar información del documento que se va a anexar

l_method = ‘IMPORTFROMPC’.

* Esta parte es muy importante, ya que con esto no se abre la ventana de dialogo de seleccion del archivo

* Si no se llena esta tabla interna, la función abre la ventana de dialogo de seleccion del archivo

wa_files = ‘C:\Users\mcolliake\Documents\Proyecto Actual\An Easy Reference for OLE Automation.pdf’.

l_filename = ‘C:\Users\mcolliake\Documents\Proyecto Actual\An Easy Reference for OLE Automation.pdf’.

APPEND wa_files TO it_files.

MOVE-CORRESPONDING document TO wa_document.

MOVE ‘B’ TO wa_document-folrg.

MOVE ‘5’ TO wa_header_data-objpri.

* Obtener la descripcion del Archivo

PERFORM so_split_file_and_extension(saplso30)

                                     USING l_filename

                                           l_objdes

                                           l_objtp.

* Mover la descripción del archivo

MOVE l_objdes TO wa_document-objdes.

MOVE l_objdes TO wa_header_data-objdes. “<– Es necesario, porque de lo contrario, la descripción queda en blanco

* Obtener el archivo a incluir al documento MM

CALL FUNCTION ‘SO_DOCUMENT_REPOSITORY_MANAGER’

   EXPORTING

     method       = l_method

     office_user  = sy-uname

     ref_document = wa_ref_doc

     new_parent   = wa_new_parent

   IMPORTING

     authority    = l_authority

   TABLES

     objcont      = it_objcont

     objhead      = it_objhead

     objpara      = it_objpara

     objparb      = it_objparb

     recipients   = it_recipients

     attachments  = it_attachments

     references   = it_references

     files        = it_files

   CHANGING

     document     = wa_document

     header_data  = wa_header_data

     folmem_data  = wa_folmem_data

     receive_data = wa_receive_data.

MOVE-CORRESPONDING wa_document TO document.

* Ligar el documento obtenido con el numero de documento de MM

*READ TABLE documents INDEX 1 INTO document.

MOVE ‘4800000403’ TO is_object-objkey.

MOVE ‘BUS2012’    TO is_object-objtype.

IF NOT is_object-objkey IS INITIAL.

   IF document-okcode = ‘CREA’ OR document-okcode = ‘CHNG’.

     attachment-objtype = ‘MESSAGE’.

     attachment-objkey  = document(34).

     CALL FUNCTION ‘BINARY_RELATION_CREATE’

       EXPORTING

         obj_rolea    = is_object

         obj_roleb    = attachment

         relationtype = ‘ATTA’

       EXCEPTIONS

         OTHERS       = 1.

     IF sy-subrc = 0.

       ep_attachment = document(34).

       CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’

        EXPORTING

          wait          = ‘X’

* IMPORTING

*   RETURN        =

                 .

     ENDIF.

   ENDIF.

ELSE.

   IF document-okcode = ‘CREA’ OR document-okcode = ‘CHNG’.

     ep_attachment = document(34).

   ENDIF.

ENDIF.

Espero les sea de utilidad.

Saludos!

Atentamente

Moisés Collí Aké

¡¡ Orgullosamente Yucateco !!

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply