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