Etiquetas

20120105

ABAP Tips: Texto dinámico en correo

Un resumen con los tips necesarios para construir el texto dinámico en un correo y procesarlo para ser enviado en un e-mail. Se complementa con la entrada ABAP: Enviar correo HTML con adjunto, en la parte que uno construye el String HTML.
Consideraciones:

  • El Texto Estándar (trx. SO10) considera las partes variables aquellas que tienen un nombre definido de objeto, rodeado por el signo "#", ejemplo, "#fullname#"... podría generar una tabla de variables reconocidas por cada texto, y dinamizar aun más el algoritmo, pero no creo que valga la pena.
  • Sólo va a considerar las líneas cuyo tdformat sea '*' o space, de modo de dejar cualquier otro formato como comentario. 
  • Las características de un Texto Estandar (ID Texto, Objeto Texto) se pueden ver en el mismo editor, en el menú Pasar a --> Cabecera.
  • Recordar enviar el Texto Estandar a una Tarea de una OT con el programa  RSTXTRAN.
Ejemplo

Y para no dar más la lata.... el algoritmo:

*Variables necesarias para condensar parámetros.
  DATA texto_std TYPE tdobname VALUE 'ZEHS_NOTIF_DYN_RECEPCION'.
  DATA str_nombre TYPE string.
  DATA str_fullname TYPE string.
  DATA str_drogas TYPE string.
  DATA str_fecha(10).

  DATA str_htm  TYPE string.  "salida html

  MOVE p_nombre TO str_nombre.
  MOVE p_fullname TO str_fullname.
  WRITE p_fecha TO str_fecha DD/MM/YYYY.
  MOVE p_drogas TO str_drogas.

  CONDENSE str_nombre.
  CONDENSE str_fullname.
  CONDENSE str_drogas.

*Leer texto estándar
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                      = 'ST'
      language                = sy-langu
      name                    = texto_std
      object                  = 'TEXT'
    TABLES
      lines                   = lines
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.

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

*Reemplazar variables y juntar salida
  CLEAR str_htm.

  LOOP AT lines where tdformat eq '*' or tdformat eq space.
    REPLACE '#nombre#' WITH str_nombre INTO lines-tdline.
    REPLACE '#fullname#' WITH str_fullname INTO lines-tdline.
    REPLACE '#str_fecha#' WITH str_fecha INTO lines-tdline.
    REPLACE '#drogas#' WITH str_drogas INTO lines-tdline.

    IF lines-tdformat = '*' AND sy-tabix > 1.
      CONCATENATE str_htm cl_abap_char_utilities=>cr_lf INTO str_htm.
    ENDIF.
    CONCATENATE str_htm lines-tdline INTO str_htm SEPARATED BY space.
  ENDLOOP.


No hay comentarios:

Publicar un comentario