PDA

Ver la Versión Completa : FOTO en SMARTFORMS (cambia x empleado)


abfv
15/07/09, 01:47:33
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
27/04/12, 07:39:44
Hola has conseguido hacerlo???yo estoy justo con eso y ando perdidaaa:mad: , ¿podrias ayudarme?

muchas gracias.

abfv
27/04/12, 19:24:08
Pasame un mail y te cuento.

ymeca
29/05/12, 13:43:46
Hola a todos,

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

muchas gracias por adelantado

gstvai
05/06/13, 16:18:30
Pasame un mail y te cuento.
yo tb estoy en el mismo dilema por favor si ya solucionaste el problema comentamelo..

abfv
06/06/13, 15:14:02
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.

teo30
04/04/14, 15:25:48
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

GUILLERMO CARRENO
27/11/20, 17:00:21
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".

GUILLERMO CARRENO
27/11/20, 17:01:56
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