Subir Imagen

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • DCErick
    Moderator
    • mar
    • 1090

    #1

    Subir Imagen

    Trato de hacer un Call Transaction de la SE78 para subir unas imagenes a SAP. Hago la grabacion en la SM35 pero cuando trato de correr de nuevo la grabacion no me hace lo que yo hice cuando la grabe y no puedo subir imagenes....

    Será que por la SE78 no se puede subir imagenes mediante calltransaction??

    Alguien sabe por donde podria subirlas o si hay una bapi o funcion para hacerlo???
    Editado por última vez por DCErick; 11/10/2006, 22:54:06.
    -------------------
    ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?
  • DCErick
    Moderator
    • mar
    • 1090

    #2
    Holas.

    Bueno como no me quedó de otra copie unos forms del programa LSTXBITMAPSF05 el cual tiene dos forms que en mi caso son los que necesité graphic_import_bds la cual manda llamar a import_bitmap_bds

    Y mande llamar el form como vá

    Código:
          PERFORM graphic_import_bds
                      USING
                         v_path "Ruta Imagen
                         v_tdname "Nombre imagen en SAP
                         'GRAPHICS'
                         'BMAP'
                         'BMON'
                         v_title "Descripcion
                          ''
                          'X'
                          'X'
                      CHANGING
                          v_resolution "Siempre mando 000 Lo puse para no modificar el form :D aunque en mi caso no se encesita ya que la transaccion lo utiliza para mostrar información despues de cargar la imagen.
    En este form hay un select a la tabla stxbitmaps para ver si la imagen ya existe posterior a eso hace una pregunta de si quieres modificar la imagen, en mi caso siempre se quiere subir pues es una carga masiva y opte por comentar el siguiente codigo:

    Código:
      IF sy-subrc = 0.
        l_docid = stxbitmaps-docid.
    *    l_question = text-q01.
    *    l_len = STRLEN( gi_name ).
    *    ASSIGN gi_name(l_len) TO <l>.
    *    REPLACE '&1' WITH <l> INTO l_question.
    *    CONCATENATE l_question text-q02 INTO l_question.
    *    CALL FUNCTION 'POPUP_TO_CONFIRM'
    *      EXPORTING
    *        titlebar       = text-t01
    *        text_question  = l_question
    *        text_button_1  = 'Ja'(006)
    *        icon_button_1  = ' '
    *        text_button_2  = 'Nein'(007)
    *        icon_button_2  = ' '
    *        default_button = '1'
    *      IMPORTING
    *        answer         = l_answer.
    *    IF l_answer = 'A'.
    *      SET SCREEN sy-dynnr.
    *      LEAVE SCREEN.
    *    ELSEIF l_answer = '2'.
    *      SET SCREEN 0.
    *      LEAVE SCREEN.
    *    ENDIF.
      ELSE.
        CLEAR l_docid.
      ENDIF.
    Y por ultimo modifique le agrege a la parte donde manda mensajes de error lo siguiente.

    De : MESSAGE e285
    Quedaron en : MESSAGE e285(td)

    P.D. Viendo el codigo de estos forms podemos notar que no podremos correrlo en proceso de fondo (JOB).... Pues SAP carga la imagen con el WS_UPLOAD el cual no corre en (JOB)

    Espero que esto le ayude a alguien pues yo si que tarde algo en encontrarlo.

    Y si alguien tiene alguna otra solucion no dude en postear.
    -------------------
    ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

    Comentario

    • Sergio Leandro
      Junior Member
      • nov
      • 5

      #3
      Hola Erick

      Pues me has ahorrado el trabajo gracias, y cuando te das una vuelta por Mazatlán?

      Saludos desde Costa Rica.

      Sergio Leandro

      Comentario

      • DCErick
        Moderator
        • mar
        • 1090

        #4
        jajaaj Saludos sergio,

        Espero ir en semana santa....

        Saludos desde regiolandia.
        -------------------
        ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

        Comentario

        • cassares
          Junior Member
          • oct
          • 4

          #5
          subir imágenes a color SE78 ABAP

          Excelente bueno que sea solo copiar y pegar en definiciones globales:


          * Globals and globals for dynpro fields
          data: g_objecttype(20) type c,
          g_new_resolution like stxbitmaps-resolution,
          g_stxbitmaps type stxbitmaps,
          g_stxh type stxh,
          g_techinfo type rsscg,
          t_size(40),
          bds_description like bapisignat-prop_value.

          CONSTANTS:
          c_true TYPE char1 VALUE 'X',
          c_false TYPE char1 VALUE space.

          TYPES: sbdst_logical_system LIKE bapibds01-log_system,
          sbdst_classname LIKE bapibds01-classname,
          sbdst_classtype LIKE bapibds01-classtype,
          sbdst_client LIKE bapibds01-client,
          sbdst_object_key LIKE bapibds01-objkey,
          sbdst_doc_id LIKE bapibds01-doc_id,
          sbdst_doc_ver_no LIKE bapibds01-doc_ver_no,
          sbdst_doc_var_id LIKE bapibds01-doc_var_id,
          sbdst_doc_var_tg LIKE bapibds01-doc_var_tg,
          sbdst_new_var_tg LIKE bapibds01-doc_var_tg,
          sbdst_url LIKE bapibds01-uri,
          sbdst_url_lifetime LIKE bapibds01-uri_life,
          sbdst_x LIKE bapibds01-x,
          sbdst_binary_flag LIKE bapibds01-x,
          sbdst_mimetype LIKE bapibds01-mimetype.


          CONSTANTS:
          c_stdtext LIKE thead-tdobject VALUE 'TEXT',
          c_graphics LIKE thead-tdobject VALUE 'GRAPHICS',
          c_bmon LIKE thead-tdid VALUE 'BMON',
          c_bcol LIKE thead-tdid VALUE 'BCOL'.

          CONSTANTS:
          c_bds_classname TYPE sbdst_classname VALUE 'DEVC_STXD_BITMAP',
          c_bds_classtype TYPE sbdst_classtype VALUE 'OT', " others
          c_bds_mimetype TYPE bds_mimetp VALUE 'application/octet-stream',
          c_bds_original TYPE sbdst_doc_var_tg VALUE 'OR'.


          y la función:

          FUNCTION ZSUBIR_IMAGEN .
          *"----------------------------------------------------------------------
          *"*"Interfase local
          *" IMPORTING
          *" REFERENCE(GI_FILENAME) TYPE RLGRAP-FILENAME DEFAULT
          *" 'C:\mapa1.bmp'
          *" REFERENCE(GI_NAME) TYPE STXBITMAPS-TDNAME DEFAULT 'MAPA37'
          *" REFERENCE(GI_OBJECT) TYPE STXBITMAPS-TDOBJECT DEFAULT
          *" 'GRAPHICS'
          *" REFERENCE(GI_ID) TYPE STXBITMAPS-TDID DEFAULT 'BMAP'
          *" REFERENCE(GI_BTYPE) TYPE STXBITMAPS-TDBTYPE DEFAULT 'BCOL'
          *" REFERENCE(GI_TITLE) TYPE BAPISIGNAT-PROP_VALUE DEFAULT 'TITULO'
          *" REFERENCE(GI_RESIDENT) TYPE STXBITMAPS-RESIDENT DEFAULT SPACE
          *" REFERENCE(GI_AUTOHEIGHT) TYPE STXBITMAPS-AUTOHEIGHT DEFAULT 'X'
          *" REFERENCE(GI_BMCOMP) TYPE STXBITMAPS-BMCOMP DEFAULT 'X'
          *" CHANGING
          *" REFERENCE(GI_RESOLUTION) TYPE STXBITMAPS-RESOLUTION DEFAULT
          *" '000'
          *"----------------------------------------------------------------------

          TABLES: stxbitmaps.


          FIELD-SYMBOLS <l>.

          DATA: l_extension TYPE rlgrap-filename,
          l_len TYPE i,
          l_question(400),
          l_answer(1),
          l_docid TYPE stxbitmaps-docid.

          * SELECT SINGLE * FROM stxbitmaps WHERE tdobject = gi_object
          * AND tdname = gi_name
          * AND tdid = gi_id
          * AND tdbtype = gi_btype.
          * IF sy-subrc = 0.
          * l_docid = stxbitmaps-docid.
          * l_question = text-q01.
          * l_len = STRLEN( gi_name ).
          * ASSIGN gi_name(l_len) TO <l>.
          * REPLACE '&1' WITH <l> INTO l_question.
          * CONCATENATE l_question text-q02 INTO l_question.
          * CALL FUNCTION 'POPUP_TO_CONFIRM'
          * EXPORTING
          * titlebar = text-t01
          * text_question = l_question
          * text_button_1 = 'Ja'(006)
          * icon_button_1 = ' '
          * text_button_2 = 'Nein'(007)
          * icon_button_2 = ' '
          * default_button = '1'
          * IMPORTING
          * answer = l_answer.
          * IF l_answer = 'A'.
          * SET SCREEN sy-dynnr.
          * LEAVE SCREEN.
          * ELSEIF l_answer = '2'.
          * SET SCREEN 0.
          * LEAVE SCREEN.
          * ENDIF.
          * ELSE.
          * CLEAR l_docid.
          * ENDIF.

          PERFORM get_extension USING gi_filename
          CHANGING l_extension.
          TRANSLATE l_extension TO UPPER CASE. "#EC TRANSLANG
          CASE l_extension.
          WHEN 'TIF' OR 'TIFF'
          OR 'BMP'.
          PERFORM import_bitmap_bds USING gi_filename
          gi_name
          gi_object
          gi_id
          gi_btype
          l_extension
          gi_title
          gi_resident
          gi_autoheight
          gi_bmcomp
          CHANGING l_docid
          gi_resolution.
          WHEN OTHERS.
          * message e857 with gi_filename.

          ENDCASE.




          ENDFUNCTION.

          *&---------------------------------------------------------------------*
          *& Form import_bitmap_bds
          *&---------------------------------------------------------------------*
          * text
          *----------------------------------------------------------------------*
          * -->P_FILENAME text
          * -->P_NAME text
          * -->P_OBJECT text
          * -->P_ID text
          * -->P_BTYPE text
          * -->P_FORMAT text
          * -->P_TITLE text
          * -->P_RESIDENT text
          * -->P_AUTOHEIGHT text
          * -->P_BMCOMP text
          * -->P_DOCID text
          * -->P_RESOLUTION text
          *----------------------------------------------------------------------*
          FORM import_bitmap_bds
          USING p_filename TYPE rlgrap-filename
          p_name TYPE stxbitmaps-tdname
          p_object TYPE stxbitmaps-tdobject
          p_id TYPE stxbitmaps-tdid
          p_btype TYPE stxbitmaps-tdbtype
          p_format TYPE c
          p_title LIKE bapisignat-prop_value
          p_resident TYPE stxbitmaps-resident
          p_autoheight TYPE stxbitmaps-autoheight
          p_bmcomp TYPE stxbitmaps-bmcomp
          CHANGING p_docid TYPE stxbitmaps-docid
          p_resolution TYPE stxbitmaps-resolution.



          DATA: l_object_key TYPE sbdst_object_key.
          DATA: l_tab TYPE ddobjname.
          DATA: BEGIN OF l_bitmap OCCURS 0,
          l(64) TYPE x,
          END OF l_bitmap.
          DATA: l_filename TYPE string,
          l_bytecount TYPE i,
          l_bds_bytecount TYPE i.
          DATA: l_color(1) TYPE c,
          l_width_tw TYPE stxbitmaps-widthtw,
          l_height_tw TYPE stxbitmaps-heighttw,
          l_width_pix TYPE stxbitmaps-widthpix,
          l_height_pix TYPE stxbitmaps-heightpix.
          DATA: l_bds_object TYPE REF TO cl_bds_document_set,
          l_bds_content TYPE sbdst_content,
          l_bds_components TYPE sbdst_components,
          wa_bds_components TYPE LINE OF sbdst_components,
          l_bds_signature TYPE sbdst_signature,
          wa_bds_signature TYPE LINE OF sbdst_signature,
          l_bds_properties TYPE sbdst_properties,
          wa_bds_properties TYPE LINE OF sbdst_properties.
          DATA wa_stxbitmaps TYPE stxbitmaps.

          * Enqueue
          PERFORM enqueue_graphic USING p_object
          p_name
          p_id
          p_btype.

          * File transfer
          l_filename = p_filename.
          CALL FUNCTION 'GUI_UPLOAD'
          EXPORTING
          filename = l_filename
          filetype = 'BIN'
          IMPORTING
          filelength = l_bytecount
          TABLES
          data_tab = l_bitmap
          EXCEPTIONS
          file_open_error = 2
          file_read_error = 3
          no_batch = 1
          gui_refuse_filetransfer = 4
          invalid_type = 5
          no_authority = 6
          unknown_error = 7
          bad_data_format = 8
          header_not_allowed = 9
          separator_not_allowed = 10
          header_too_long = 11
          unknown_dp_error = 12
          access_denied = 13
          dp_out_of_memory = 14
          disk_full = 15
          dp_timeout = 16
          OTHERS = 17.
          CASE sy-subrc.
          WHEN 0.
          WHEN 2.
          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.
          * message e811 with p_filename.
          WHEN 3.
          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.
          * message e812 with p_filename.
          WHEN OTHERS.
          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.
          * message e813 with p_filename.
          ENDCASE.

          IF p_btype = c_bmon.
          l_color = c_false.
          ELSE.
          l_color = c_true.
          ENDIF.

          * Bitmap conversion
          CALL FUNCTION 'SAPSCRIPT_CONVERT_BITMAP_BDS'
          EXPORTING
          color = l_color
          format = p_format
          resident = p_resident
          bitmap_bytecount = l_bytecount
          compress_bitmap = p_bmcomp
          IMPORTING
          width_tw = l_width_tw
          height_tw = l_height_tw
          width_pix = l_width_pix
          height_pix = l_height_pix
          dpi = p_resolution
          bds_bytecount = l_bds_bytecount
          TABLES
          bitmap_file = l_bitmap
          bitmap_file_bds = l_bds_content
          EXCEPTIONS
          format_not_supported = 1
          no_bmp_file = 2
          bmperr_invalid_format = 3
          bmperr_no_colortable = 4
          bmperr_unsup_compression = 5
          bmperr_corrupt_rle_data = 6
          OTHERS = 7.
          IF sy-subrc <> 0.
          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          RAISING conversion_failed.
          ENDIF.

          * Save bitmap in BDS
          CREATE OBJECT l_bds_object.

          wa_bds_components-doc_count = '1'.
          wa_bds_components-comp_count = '1'.
          wa_bds_components-mimetype = c_bds_mimetype.
          wa_bds_components-comp_size = l_bds_bytecount.
          APPEND wa_bds_components TO l_bds_components.

          IF p_docid IS INITIAL. " graphic is new

          wa_bds_signature-doc_count = '1'.
          APPEND wa_bds_signature TO l_bds_signature.

          CALL METHOD l_bds_object->create_with_table
          EXPORTING
          classname = c_bds_classname
          classtype = c_bds_classtype
          components = l_bds_components
          content = l_bds_content
          CHANGING
          signature = l_bds_signature
          object_key = l_object_key
          EXCEPTIONS
          OTHERS = 1.
          IF sy-subrc <> 0.
          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.
          * message e285 with p_name 'BDS'.
          ENDIF.
          READ TABLE l_bds_signature INDEX 1 INTO wa_bds_signature
          TRANSPORTING doc_id.
          IF sy-subrc = 0.
          p_docid = wa_bds_signature-doc_id.
          ELSE.
          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.
          * message e285 with p_name 'BDS'.
          ENDIF.

          ELSE. " graphic already exists
          ********* read object_key for faster access *****
          CLEAR l_object_key.
          SELECT SINGLE * FROM stxbitmaps INTO wa_stxbitmaps
          WHERE tdobject = p_object
          AND tdid = p_id
          AND tdname = p_name
          AND tdbtype = p_btype.
          SELECT SINGLE tabname FROM bds_locl INTO l_tab
          WHERE classname = c_bds_classname
          AND classtype = c_bds_classtype.
          IF sy-subrc = 0.
          SELECT SINGLE object_key FROM (l_tab) INTO l_object_key
          WHERE loio_id = wa_stxbitmaps-docid+10(32)
          AND classname = c_bds_classname
          AND classtype = c_bds_classtype.
          ENDIF.
          ******** read object_key end ********************

          CALL METHOD l_bds_object->update_with_table
          EXPORTING
          classname = c_bds_classname
          classtype = c_bds_classtype
          object_key = l_object_key
          doc_id = p_docid
          doc_ver_no = '1'
          doc_var_id = '1'
          CHANGING
          components = l_bds_components
          content = l_bds_content
          EXCEPTIONS
          nothing_found = 1
          OTHERS = 2.
          IF sy-subrc = 1. " inconsistency STXBITMAPS - BDS; repeat check in
          wa_bds_signature-doc_count = '1'.
          APPEND wa_bds_signature TO l_bds_signature.

          CALL METHOD l_bds_object->create_with_table
          EXPORTING
          classname = c_bds_classname
          classtype = c_bds_classtype
          components = l_bds_components
          content = l_bds_content
          CHANGING
          signature = l_bds_signature
          object_key = l_object_key
          EXCEPTIONS
          OTHERS = 1.
          IF sy-subrc <> 0.
          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.
          * message e285 with p_name 'BDS'.
          ENDIF.
          READ TABLE l_bds_signature INDEX 1 INTO wa_bds_signature
          TRANSPORTING doc_id.
          IF sy-subrc = 0.
          p_docid = wa_bds_signature-doc_id.
          ELSE.
          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.
          * message e285 with p_name 'BDS'.
          ENDIF.

          ELSEIF sy-subrc = 2.
          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.
          * message e285 with p_name 'BDS'.
          ENDIF.

          ENDIF.

          * Save bitmap header in STXBITPMAPS
          wa_stxbitmaps-tdname = p_name.
          wa_stxbitmaps-tdobject = p_object.
          wa_stxbitmaps-tdid = p_id.
          wa_stxbitmaps-tdbtype = p_btype.
          wa_stxbitmaps-docid = p_docid.
          wa_stxbitmaps-widthpix = l_width_pix.
          wa_stxbitmaps-heightpix = l_height_pix.
          wa_stxbitmaps-widthtw = l_width_tw.
          wa_stxbitmaps-heighttw = l_height_tw.
          wa_stxbitmaps-resolution = p_resolution.
          wa_stxbitmaps-resident = p_resident.
          wa_stxbitmaps-autoheight = p_autoheight.
          wa_stxbitmaps-bmcomp = p_bmcomp.
          INSERT INTO stxbitmaps VALUES wa_stxbitmaps.
          IF sy-subrc <> 0.
          UPDATE stxbitmaps FROM wa_stxbitmaps.
          IF sy-subrc <> 0.
          * message e285 with p_name 'STXBITMAPS'.
          ENDIF.
          ENDIF.

          * Set description in BDS attributes
          wa_bds_properties-prop_name = 'DESCRIPTION'.
          wa_bds_properties-prop_value = p_title.
          APPEND wa_bds_properties TO l_bds_properties.

          CALL METHOD l_bds_object->change_properties
          EXPORTING
          classname = c_bds_classname
          classtype = c_bds_classtype
          object_key = l_object_key
          doc_id = p_docid
          doc_ver_no = '1'
          doc_var_id = '1'
          CHANGING
          properties = l_bds_properties
          EXCEPTIONS
          OTHERS = 1.

          PERFORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.

          ENDFORM. "import_bitmap_bds

          *&---------------------------------------------------------------------*
          *& Form dequeue_graphic
          *&---------------------------------------------------------------------*
          * text
          *----------------------------------------------------------------------*
          * -->P_OBJECT text
          * -->P_NAME text
          * -->P_ID text
          * -->P_BTYPE text
          *----------------------------------------------------------------------*
          FORM dequeue_graphic USING p_object
          p_name
          p_id
          p_btype.

          CALL FUNCTION 'DEQUEUE_ESSGRABDS'
          EXPORTING
          * MODE_STXBITMAPS = 'E'
          * X_TDOBJECT = ' '
          * X_TDNAME = ' '
          * X_TDID = ' '
          * X_TDBTYPE = ' '
          * _SCOPE = '3'
          * _SYNCHRON = ' '
          * _COLLECT = ' '
          tdobject = p_object
          tdname = p_name
          tdid = p_id
          tdbtype = p_btype.

          ENDFORM. "dequeue_graphic


          *&---------------------------------------------------------------------*
          *& Form enqueue_graphic
          *&---------------------------------------------------------------------*
          * text
          *----------------------------------------------------------------------*
          * -->P_OBJECT text
          * -->P_NAME text
          * -->P_ID text
          * -->P_BTYPE text
          *----------------------------------------------------------------------*
          FORM enqueue_graphic USING p_object
          p_name
          p_id
          p_btype.

          CALL FUNCTION 'ENQUEUE_ESSGRABDS'
          EXPORTING
          * MODE_STXBITMAPS = 'E'
          tdobject = p_object
          tdname = p_name
          tdid = p_id
          tdbtype = p_btype
          * X_TDOBJECT = ' '
          * X_TDNAME = ' '
          * X_TDID = ' '
          * X_TDBTYPE = ' '
          * _SCOPE = '2'
          * _WAIT = ' '
          * _COLLECT = ' '
          EXCEPTIONS
          foreign_lock = 1
          OTHERS = 2.

          IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          RAISING enqueue_failed.
          ENDIF.

          ENDFORM. "enqueue_graphic

          *&---------------------------------------------------------------------*
          *& Form GET_EXTENSION
          *&---------------------------------------------------------------------*
          * text
          *----------------------------------------------------------------------*
          * -->P_FILENAME text
          * -->P_EXTENSION text
          *----------------------------------------------------------------------*
          FORM get_extension USING p_filename TYPE rlgrap-filename
          CHANGING p_extension TYPE rlgrap-filename.

          FIELD-SYMBOLS: <help1>, <help2>.

          DATA: var1 TYPE i,
          var2 TYPE i,
          l_filename TYPE rlgrap-filename.

          l_filename = p_filename.
          var1 = STRLEN( l_filename ).
          IF var1 = 0.
          CLEAR p_extension.
          EXIT.
          ENDIF.

          ASSIGN l_filename(var1) TO <help2>.
          SUBTRACT 1 FROM var1.
          ASSIGN <help2>+var1(1) TO <help1>.
          DO.
          IF sy-index > var1.
          SHIFT <help2> RIGHT CIRCULAR.
          var2 = sy-index.
          EXIT.
          ENDIF.
          IF <help1> = '.'.
          var2 = sy-index - 1.
          EXIT.
          ENDIF.
          SHIFT <help2> RIGHT CIRCULAR.
          ENDDO.
          WRITE <help2> TO p_extension(var2).

          ENDFORM. " GET_EXTENSION

          Comentario

          • sacul907
            Junior Member
            • ene
            • 10

            #6
            Me ha venido genial!!!!

            Muchisimas gracias por el pedazo de aporte.

            Saludos

            Comentario

            Trabajando...