• a m o x + b l o g s
  • Utilizar HTML en notificaciones de Workflow

    No tengo mucha experiencia práctica con Workflow, en general sólo modificando procesos, no habiéndome metido con los atributos, actividades, notificaciones y api's, así que asumía que de un requerimiento que me hicieron para mostrar una tabla formateada podía simplemente poner el html en la notificación, sea directamente o en un atributo cuyo valor lo generaba desde un procedimiento almacenado.

    Creado el atributo, modificado el mensaje y probado el procedimiento almacenado, la prueba mostró las etiquetas html sin interpretarlas. Si bien le había dado una ojeada express al developer guide de workflow, al regresar con calma al mismo, éste especifica claramente que por motivos de seguridad, éste es el comportamiento del software, y que para lograr lo requerido es necesario la definición de atributos de tipo documento. He aquí los pasos, buscando también que el contenido sea dinámico dependiendo de un parámetro.

    Crear atributos

    Crear 2 atributos, uno para el documento como tal y otro para el id del mismo. Para el id, se deja de tipo texto dado que es posible que debamos proporcionar múltiple información para armar el html. Para el ejemplo simplemente se pasará el id.

    • Nombre: DOCUMENT_ID
    • Nombre Descriptivo: Id Documento HTML
    • Typo: Texto
    • Longitud: 30

    Para el documento como tal, considerando que ya creamos el procedimiento almacenado para generarlo. El valor por default sigue el formato plsql:nombre.procedimiento.almacenado/valor_param_document_id. En este caso, al ser variable el id, utilizamos un token para ser sustituido en tiempo de ejecución por el valor del atributo referenciado.

    • Nombre: MSG_HTML
    • Nombre Descriptivo: Mensaje documento HTML
    • Valor: Constante
    • Default: plsql:bolinf.amox_wf_test.html_document/&DOCUMENT_ID

    Procedimiento para generar html

    El procedimiento debe seguir los estándares definidos por workflow, de tal manera que al ser llamado funcione y se integre adecuadamente. A continuación un ejemplo sencillo:

      procedure html_document(
         document_id   in           varchar2
       , display_type  in           varchar2
       , document      in out nocopy varchar2 
       , document_type in out nocopy varchar2 )  
      is                    
      begin             
      document_type := 'text/html' ;
      document := '<table><tr><td>Id Documento</td></tr><tr><td>' || document_id || '</td></tr>' ;
      end html_document ;  
    

    Uso

    En el flujo de proceso, en las actividades previas a la notificación, generar el id para identificar el documento y asignarlo al atributo DOCUMENT_ID. En la notificación, agregar el token para el documento, &MSG_HTML. En tiempo de ejecución, éste último token efectuará la llamada al procedimiento almacenado, reemplazando a su vez el id por el valor de atributo DOCUMENT_ID, lo que permitirá en el procedimiento determinar como armar el mensaje.

    Precauciones

    Dado que es a nivel notificaciçon, en caso de haber error, el workflow no truena, más el error aparecerá en el mensaje, el cuál habrá que revisar para identificar el problema. Tener cuidado con la longitud del mensaje y las variables para contenerlo. Por definición, workflow acepta hasta 32k de información de atributos de tipo documento, más considerar que también el mensaje tiene un límite, por lo que si se presenta demasiada información, se podrá truncar el mensaje en caso de exceder el máximo soportado.

    0 comments:

    Post a Comment

    No spam