Formularios WEB
Para desarrollar campos personalizados, utilice formularios WEB. En las propiedades del proceso, ingrese el Escribe Formularios WEB y en cada actividad colocar el enlace del formulario. El enlace del formulario siempre puede ser el mismo o puede tener un enlace diferente dependiendo del paso.
El formulario se crea fuera de BPM utilizando herramientas de mercado y se puede alojar donde sea necesario. La construcción del formulario que determinará el comportamiento de la pantalla en cada paso. La plataforma proporciona una API para comunicarse con el formulario creado externamente, que debe importarse a los formularios. Es un javascript que, incluido en la página, permite conectar la página con BPM.
El botón Enviar es estándar para la plataforma, es decir, en la construcción de la interfaz no es necesario cambiarla, solo implementar la función Ahorrar de la API.
API de formularios web
La cabina de flujo de trabajo es capaz de presentar formularios de ECM e interfaces personalizadas alojadas en otros dominios dentro de un iframe. La comunicación entre las dos partes la realiza Window.postMessage() y la abstrae este componente, que debe estar incluido en la página y configurado por el desarrollador.
Para el correcto funcionamiento de la interfaz personalizada dentro del cockpit, es necesario definir cómo la página guarda los datos del proceso y cómo reacciona ante los errores ocurridos en la creación del proceso y manejo de los pendientes.
Integración
Agregue un componente a la página que ayude a la cabina a mostrar el iframe en el tamaño correcto y el componente Workflow Javascript:
<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/3.5.14/iframeResizer.contentWindow.min.js"></guion><tipo de script="texto/javascript" src="https://cdn.senior.com.br/platform/1.7.1/js/workflow-cockpit.min.js "></guion>
Uso de la tarea con modo abiertoAbrir formulario en Workflow Cockpit, es necesario definir las funciones que manejarán cada evento originado por el cockpit. Ejemplo:
Esta API tiene 3 funciones principales de comunicación de flujo de trabajo. Son ellas:
- init: Esta función se ejecuta cada vez que se carga la página. Proporciona datos al formulario, como el usuario logueado por ejemplo o los datos del proceso y variable del proceso si es un proceso ya en curso;
- enEnviar: el formulario debe implementar esta función para escribir los datos al BPM, para eso deben ser devueltos en la función. Es importante que existan variables de proceso registradas en el BPM para cada dato que se quiera registrar;
- onError: función que se ejecuta si en algún momento durante el procesamiento del formulario ocurre un error al comunicar al usuario.
BPM envía información del proceso y plataforma por parámetro a las funciones:
- fecha: procesar informacion. Ejemplo: Id. de proceso y acción seleccionados por el usuario;
- información: información miscelánea a través de las funciones getUserData(), getPlatformData(), isRequestNew() y getInfoFromProcessVariables().
En cada método la información disponible en los parámetros puede variar.
init(datos, información) { /*datos: ({ processInstanceId: int? (ocasional) })*/ /*info: ({ isRequestNew: function getUserData: function getPlatformData: function getInfoFromProcessVariables: function })*/ } onSubmit(data, info) { /*data: ({ processInstanceId: int })*/ /*info: ({ isRequestNew: function getUserData: function getPlatformData: function getInfoFromProcessVariables: function })*/ } onError(data, info) { /*data: ({ error: obj processInstanceId: int })*/ }
Estructura de la instancia devuelta
esSolicitudNueva(): Indica si la pantalla se abrió porque el usuario está creando una solicitud. Si es falso, indica que el usuario está respondiendo a una solicitud.
obtener datos de usuario (): obtiene un objeto que contiene información sobre el usuario que inició sesión en el flujo de trabajo. Se devuelve una promesa.
info.getUserData().then(función(datos) { /* datos: ({ descripción: ..., correo electrónico: ..., nombre completo: ..., id: ..., configuración regional: ..., asunto : ..., nombre de inquilino: ..., nombre de usuario: ... })*/ });
getPlatformData(): Obtiene un objeto que contiene datos para acceder a los recursos de la plataforma G7. Se devuelve una promesa.
info.getPlatformData().then(función(datos) { /* datos: ({ serviceUrl: ..., odataUrl: ..., token: { token_type: ..., access_token: ... })*/ } );
getInfoFromProcessVariables: Obtiene un objeto que contiene las variables de proceso definidas. Se devuelve una promesa.
info.getInfoFromProcessVariables().then(función(datos) { /* datos: matriz ..; */ }
this.workflowCockpit = workflowCockpit({ init: _loadData, onSubmit: _saveData, onError: _rollback }); /*Esta función se ejecuta cuando se crea el WorkflowCockpit, es decir, no se ejecuta por mensaje. Cuando es una solicitud nueva, no hay processInstanceId por el simple hecho de que el flujo aún no se ha creado. */ function _load(data, info) { info.getPlatformData().then(function(platformData) { this.tokenG7 = platformData.token; this.serviceUrl = platformData.serviceUrl; this.odataUrl = platformData.odataUrl; if (! info.isRequestNew()) { this.fields = this.loadData(data.processInstanceId); } }); } /*Esta función se ejecuta cuando el usuario termina de interactuar con la pantalla e intenta continuar o iniciar un proceso a través del Cockpit. En este punto, la pantalla puede persistir los datos del formulario y devolver los valores que desea agregar a las variables de flujo. Se puede devolver una Promesa o el propio objeto que contiene los datos. Cualquier excepción lanzada por esta función no permitirá que Workflow continúe con el proceso. Ejemplo: */ function _saveData(data, info) { if (!isValid()) { throw Error('Los datos ingresados no son válidos.'); } return persistData(data.processInstanceId, info.isRequestNew()).then(function(result) { return { formData: this.data // objeto que contiene datos de campo }; }); } /*Esta función se llama cuando se produce un error al iniciar o responder al flujo. Luego de ejecutar el save, si ocurre un error cuando Workflow intenta continuar con el proceso, es el momento donde se puede realizar algún tipo de consistencia con el error ocurrido, por ejemplo: */ function _rollback(datos, información) { console.log(datos.error); if (info.isRequestNew()) { return removeData(data.processInstanceId); } devuelve rollbackData(data.processInstanceId); }

English
Español

