FOTO en SMARTFORMS (cambia x empleado)

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • abfv
    Senior Member
    • feb
    • 144

    #1

    FOTO en SMARTFORMS (cambia x empleado)

    Hola a todos, alguien me puede dar una mano con esto?
    En la transacción OAAD se cargan las fotos de los empleados y yo debo tomarlas y colocarlas en un smartform:

    1. Las fotos (.jpg or .bmp) deben estar disponibles en tu PC.
    2. Transacción OAAD.
    3.Elige la función 'Documentos --> Crear'
    4. Elige como Business object 'PREL' y como Tipo de Documento 'HRICOLFOTO'
    5. Pulsa el botón de crear
    6. Rellena el número de personal al que le quieres asignar la foto

    Es necesario que SAP Archivelink esté instalado.

    El tema que debugeando la transacción OAAD he visto que la tabla donde se guarda el nombre de foto, objeto... es la tabla TOAHR.

    ¿ COMO SE PUEDE HACER PARA INCLUIR EN EL SMARTFORM LA FOTO QUE CARGADA DESDE LA TRANSACCIÓN OAAD?

    Desde ya gracias.
  • veracruz
    Junior Member
    • abr
    • 3

    #2
    Hola has conseguido hacerlo???yo estoy justo con eso y ando perdidaaa , ¿podrias ayudarme?

    muchas gracias.

    Comentario

    • abfv
      Senior Member
      • feb
      • 144

      #3
      foto

      Pasame un mail y te cuento.

      Comentario

      • ymeca
        Junior Member
        • mar
        • 1

        #4
        Hola a todos,

        estoy en la misma situacion, me podriais indicar como lo habeis conseguido?

        muchas gracias por adelantado

        Comentario

        • gstvai
          Junior Member
          • jun
          • 1

          #5
          Originalmente publicado por abfv
          Pasame un mail y te cuento.
          yo tb estoy en el mismo dilema por favor si ya solucionaste el problema comentamelo..

          Comentario

          • abfv
            Senior Member
            • feb
            • 144

            #6
            Foto en smartform

            Hola, te paso una descripción de cada rutina y los porque, está para unix y puede ser que vos tengas otro S.O. en ese caso cambiá una función y listo.

            Priemero la FOTO a la SE78 para poder obtener la imagen desde allí

            FORM FOTO_A_SE78 .

            *data: p_file type localfile value 'C:file.bmp'.
            data: p_file type localfile.
            data: p_image type stxbitmaps-tdname.
            data: imagename type stxbitmaps-tdname.
            data: w_emple(8) TYPE n.

            * Coloco ruta al nombre del empleado
            WRITE t_pernr-pernr TO w_imagen NO-ZERO.
            CONDENSE w_imagen NO-GAPS.
            WRITE t_pernr-pernr TO w_emple.

            concatenate '/carpeta/Img_' w_emple '.bmp' INTO p_file.

            * Nombre de la imagen el la SE78
            * imagename = 'FOTOEMPLE'.
            imagename = sy-uname. "aca ponemos el n° de personal ya que luego lo paso como parámetro al smartform para buscar la foto


            perform import_bitmap using p_file
            imagename
            'Test Image'.

            ENDFORM. "FOTO_A_S



            form import_bitmap using filename
            name
            title.

            data: l_resolution type stxbitmaps-resolution.
            data: l_docid type stxbitmaps-docid.

            perform import_bitmap_bds
            using filename
            name
            'GRAPHICS' "Object
            'BMAP' "ID
            'BCOL' "B/W
            'BMP' "Extension
            title
            ''
            'X'
            ''
            changing l_docid
            l_resolution.


            ENDFORM. "import_bitmap




            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 bapibds01-objkey.
            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.

            * Graphic handling
            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_true type c value 'X',
            c_false type c value space.

            types:
            ty_boolean(1) type c.

            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'.


            * Enqueue
            perform enqueue_graphic
            in program saplstxbitmaps
            using p_object
            p_name
            p_id
            p_btype.

            * Paso la foto a Binario
            l_filename = p_filename.
            OPEN DATASET l_filename FOR INPUT IN BINARY MODE.
            IF sy-subrc = 0.
            DO.
            READ DATASET l_filename INTO l_bitmap.
            APPEND l_bitmap.
            IF sy-subrc NE 0.
            EXIT.
            ENDIF.
            ENDDO.
            CLOSE DATASET l_filename.
            ELSE.
            w_sinfoto = 'X'.
            EXIT.

            ENDIF.

            l_bytecount = sy-tabix - 1.

            * Las siguientes filas comentadas son para pasar a binario
            * un archivo en disco local a través de una función.

            * 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
            *********** in program saplstxbitmaps
            *********** using p_object
            *********** p_name
            *********** p_id
            *********** p_btype.
            ************ message e811 with p_filename.
            *********** when 3. perform dequeue_graphic
            *********** in program saplstxbitmaps
            *********** using p_object
            *********** p_name
            *********** p_id
            *********** p_btype.
            ************ message e812 with p_filename.
            *********** when others. perform dequeue_graphic
            *********** in program saplstxbitmaps
            *********** using p_object
            *********** p_name
            *********** p_id
            *********** p_btype.
            ************ message e813 with p_filename.
            *********** endcase.
            * Fin de comentario para pasar a binario por función


            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
            in program saplstxbitmaps
            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
            in program saplstxbitmaps
            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
            in program saplstxbitmaps
            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
            in program saplstxbitmaps
            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
            in program saplstxbitmaps
            using p_object
            p_name
            p_id
            p_btype.
            * message e285 with p_name 'BDS'.
            endif.

            elseif sy-subrc = 2.
            perform dequeue_graphic
            in program saplstxbitmaps
            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
            in program saplstxbitmaps
            using p_object
            p_name
            p_id
            p_btype.


            ENDFORM.


            Luego de todo esto en el smartform creas un objeto imagen y en nombre le colocas la variable que tiene el N° de personal. Ej. &P_IMAGEN&

            Espero sea de ayuda.

            Saludos.

            Comentario

            • teo30
              Junior Member
              • abr
              • 20

              #7
              Hola
              Disculpen por retomar este tema después de tanto tiempo.
              Por lo que entiendo ese código permite tomar una foto desde un directorio físico y dejarla disponible para ser visualizada como objeto GRAPHICS id BMAP, así alcanzarla desde el Smartforms. En mi caso las fotos de los empleados feuron cargadas en el sistema a través de la transacción OAOH como documentos HRICOLFOTO.
              He conseguido mostrar las fotos de los empleados en un reporte Z utilicé unas funciones para IMAGE donde obtengo la foto mediante una url. Ahora mi problema es que quieren que se impriman las fotos en un smartforms. Alguna idea como convertir esa foto en un objeto GRAPHICS para poder tomarla desde el smartforms?

              Gracias

              Comentario

              • Junior Member
                • may
                • 3

                #8
                Re: foto

                Necesito insertar fotos en un Smartforms desde un "c:/temp/"; ya que si la cargo a la SE78 cambia la resolución y no se aprecian los detalles.
                Mi archivo ya viene con teminación ".BMP".

                Comentario

                • Junior Member
                  • may
                  • 3

                  #9
                  Re: foto

                  Necesito insertar fotos en un Smartforms desde un "c:/temp/"; ya que si la cargo a la SE78 cambia la resolución y no se aprecian los detalles.
                  Mi archivo ya viene con teminación ".BMP".
                  Mi mail es gcarrenoy@yahoo.es

                  Comentario

                  Trabajando...