Adjuntar PDF a material (MM02) de manera automática

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Driau
    Senior Member
    • ago
    • 235

    #1

    Adjuntar PDF a material (MM02) de manera automática

    Hola,

    Tengo una duda. Se qu se pueden crear/modificar materiales con la BAPI BAPI_MATERIAL_SAVEDATA. Lo que ya no tengo tan claro es poder adjuntar un PDF durante la creación/modificación de un material.

    Es posible hacerlo con ésta misma BAPI o existe alguna alternativa?

    MUchas gracias!
  • Melandry
    Senior Member
    • ene
    • 110

    #2
    Hola.
    Si lo quieres adjuntar para verlo disponible desde el botón de servicios para objetos, aquí te pongo un código que te puede servir, pero no está hecho desde la BAPI.
    Tendías que ve que tipo de BO es en tu caso (hice una pequeña prueba y vi el BUS100106) y cambiarlo.
    Código:
    FORM SREL_OBJ.
    
      "      Variables para BO(Bussiness Object)
      DATA: WA_TARGET_BO TYPE BORIDENT.
    
      "     Variables para lectura del doc a adjuntar.
      DATA: WA_CONTENT    TYPE SOLI,
            IT_CONTENT   TYPE STANDARD TABLE OF SOLI.
    
      "     SAPoffice: Definición de un objeto (parte de clave)
      DATA: WA_FOL_ID     TYPE SOODK,
            WA_OBJ_ID     TYPE SOODK,
            "SAPoffice: Definición de objetos, modificar atributos
            WA_OBJ_DATA   TYPE SOOD1,
            OFFSET        TYPE I.
      DATA: IT_OBJHEAD   TYPE STANDARD TABLE OF SOLI,
            WA_OBJECT     TYPE BORIDENT.
    
      DATA: WA_FOLMEM_K   TYPE SOFMK,
            WA_NOTE       TYPE BORIDENT,
            EP_NOTE       TYPE BORIDENT-OBJKEY.
    
    *--------------------------------------------------------------------*
    *--------------------------------------------------------------------*
      "1- Configuración del Objeto.
      "Tipo de objeto: BUS100106 (material)
      WA_TARGET_BO-OBJTYPE = 'BUS100106'.
      "Clave de objeto-> Nºmaterial al cual adjuntas
      WA_TARGET_BO-OBJKEY = '000000000000000001'.
      "Sistema lógico:
      "L_OBJECTID_WA-LOGSYS = ''.
    
    
      "2- Configurar BO y documento att.
      TRY.
          OPEN DATASET PA_FILE FOR INPUT IN BINARY MODE.
          WHILE SY-SUBRC = 0.
            READ DATASET PA_FILE INTO WA_CONTENT.
            APPEND WA_CONTENT TO IT_CONTENT.
          ENDWHILE.
          CLOSE DATASET PA_FILE.
        CATCH CX_SY_FILE_ACCESS_ERROR.
          MESSAGE 'Error reading file' TYPE 'E'.
      ENDTRY.
    
      CHECK NOT IT_CONTENT IS INITIAL.
      CALL FUNCTION 'SO_CONVERT_CONTENTS_BIN'
        EXPORTING
          IT_CONTENTS_BIN = IT_CONTENT
        IMPORTING
          ET_CONTENTS_BIN = IT_CONTENT.
    
      CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
        EXPORTING
          REGION                = 'B'                 "adress folder root
        IMPORTING
          FOLDER_ID             = WA_FOL_ID
        EXCEPTIONS
          COMMUNICATION_FAILURE = 1
          OWNER_NOT_EXIST       = 2
          SYSTEM_FAILURE        = 3
          X_ERROR               = 4
          OTHERS                = 5.
    
    
      "Objeto: Carácter (privado, funcional, etc.); O=Estándar
      WA_OBJ_DATA-OBJSNS = 'O'.
      "Idioma en que se ha creado el documento
      WA_OBJ_DATA-OBJLA = SY-LANGU.
      "Breve descripción del contenido
      WA_OBJ_DATA-OBJDES = 'Titulo que se muestra al ver los docs adjuntos'.
      "extensión del fichero.
      OFFSET = STRLEN( PA_FILE ) - 3.
      "Extensión fichero de aplicación de PC
      WA_OBJ_DATA-FILE_EXT = PA_FILE+OFFSET(3).
      "Tamaño de contenido de doc.
      WA_OBJ_DATA-OBJLEN = LINES( IT_CONTENT ) * 255.
    
      CALL FUNCTION 'SO_OBJECT_INSERT'
        EXPORTING
          FOLDER_ID                  = WA_FOL_ID
          OBJECT_TYPE                = 'EXT'
          OBJECT_HD_CHANGE           = WA_OBJ_DATA
        IMPORTING
          OBJECT_ID                  = WA_OBJ_ID
        TABLES
          OBJHEAD                    = IT_OBJHEAD
          OBJCONT                    = IT_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 WA_TARGET_BO-OBJKEY IS NOT INITIAL.
        "Creamos el fichero como BO para que pueda adjuntarse.
        WA_FOLMEM_K-FOLTP = WA_FOL_ID-OBJTP.
        WA_FOLMEM_K-FOLYR = WA_FOL_ID-OBJYR.
        WA_FOLMEM_K-FOLNO = WA_FOL_ID-OBJNO.
        WA_FOLMEM_K-DOCTP = WA_OBJ_ID-OBJTP.
        WA_FOLMEM_K-DOCYR = WA_OBJ_ID-OBJYR.
        WA_FOLMEM_K-DOCNO = WA_OBJ_ID-OBJNO.
        EP_NOTE = WA_FOLMEM_K.
        WA_NOTE-OBJTYPE = 'MESSAGE'.
        WA_NOTE-OBJKEY = EP_NOTE.
    
        "3- Adjuntar documento al BO deseado(Material en nuestro caso)
        CALL FUNCTION 'BINARY_RELATION_CREATE_COMMIT'
          EXPORTING
            OBJ_ROLEA      = WA_TARGET_BO
            OBJ_ROLEB      = WA_NOTE
            RELATIONTYPE   = 'ATTA'
          EXCEPTIONS
            NO_MODEL       = 1
            INTERNAL_ERROR = 2
            UNKNOWN        = 3
            OTHERS         = 4.
        IF SY-SUBRC IS INITIAL.
          MESSAGE 'OK' TYPE 'I'.
        ELSE.
          MESSAGE 'Not OK' TYPE 'I'.
        ENDIF.
      ELSE.
        MESSAGE 'Not OK' TYPE 'I'.
        RETURN.
      ENDIF.
    ENDFORM.                    "SREL_OBJ
    Espero te sirva.
    Salu2.

    Comentario

    Trabajando...