Aquí te presentamos el Manual de Programación de Eventos en eFactory ERP en la Nube.
A continuación se resumen los pasos:
eFactory provee varias características que permiten personalizar su comportamiento, entre ellas están los Eventos.
Los eventos en eFactory son unidades programadas que pueden ser ejecutadas en algún momento del proceso de trabajo normal, con los cuales es posible ejecutar una tarea, como enviar automáticamente un correo, actualizar un valor por base de datos, o impedir que un documento se guarde bajo ciertas condiciones.
En eFactory también existen las Alertas, las cuales funcionan similar a los eventos, pero estas se ejecutan bajo ciertos parámetros temporales, como una fecha específica, o un intervalo regular.
La programación y configuración de los eventos comienza activando las opciones ACTEVE - Activar funcionalidades por Eventos y ACTALE - Activar funcionalidadespor Alerta.
Primero debemos ingresar al sistema de eFactory colocando nuestro usuario y contraseña en la pantalla inicial de eFactory, luego presionaremos el botón de Iniciar Sesión y seleccionaremos el sistema de Administrativo, la Empresa y la Sucursal de la Empresa y hacemos clic en el botón .
Luego de ingresar al sistema Administrativo debemos activar las opciones ACTEVE y ACTALE
a. Para esto debemos seleccionar el módulo Sistema y al desplegar la sección de Operaciones seleccionaremos la opción de Opciones.
b. Al seleccionar la opción de Opciones se muestra la pantalla donde debemos presionar el botón .
c. Luego de presionar el botón se abrirá la pantalla de Busqueda: Opciones, en esta debemos buscar y seleccionar la opción ACTEVE - Activar funcionalidades por Eventos o ACTALE - Activar funcionalidadespor Alerta y despues debemos hacer clic en el botón para seleccionar la opción.
d. Al seleccionar la opción debemos hacer clic en el botón , cambiar el Valor a Verdadero y por último debemos presionar el botón para guardar la actualización de la opción.
a. Al ingresar en el sistema debemos hacer clic en la pestaña de Herramientas y luego seleccionaremos la opción de Administrador de Eventos.
a. Luego de haber seleccionado la opción de Administrador de Eventos se muestra la pantalla donde debemos presionar el botón .
b. Al presionar el botón el formulario Administrador de Eventos cambiará a modo registro y en este debemos llenar los campos escenciales para crear el evento:
1. En la sección de Datos: Debemos indicar los campos.
2. En la sección de Opción y Gancho Asociados: Debemos indicar los campos:
3. En la sección de Detalle de Ejecución: Se define el código que consultará los datos que serán utilizados por el evento y a su vez se define la condición de ejecución del mismo.
Parte de la programación de los eventos hace uso del lenguaje SQL, aunque la mayor parte de la programación se realizará mediante LIF (Lenguaje Interpretado Factory). Este ofrece una sintaxis simplificada de expresiones, además del acceso a objetos y propiedades comunes de la empresa o usuario actual.
En esta sección tenemos los campos:
lvData
).
El código SQL utilizado se ejecutará sobre la base de datos de la empresa, por lo que tendrá acceso a cualquier tabla, función, vista o procedimiento almacenado en ella.
DECLARE @llEnviar AS BIT;
DECLARE @lcMensaje AS VARCHAR(MAX);
SET @llEnviar = 1;
IF(LTRIM(RTRIM({{loVista.Correo}})) = '')
BEGIN
SET @llEnviar = 0;
SET @lcMensaje = 'El cliente debe que tener asociado un correo.';
END
ELSE
BEGIN
IF(not(LTRIM(RTRIM({{loVista.Correo}})) not like '% %'
AND LTRIM(RTRIM({{loVista.Correo}})) not like '%;%'
AND LTRIM(RTRIM({{loVista.Correo}})) like '%_@_%_.__%'
AND LEFT(LTRIM(RTRIM({{loVista.Correo}})),1) <> ','
AND LTRIM(RTRIM({{loVista.Correo}})) not like '%,%'))
BEGIN
SET @llEnviar = 0;
SET @lcMensaje = 'El cliente debe que tener asociado un correo válido.';
END
END
SELECT @llEnviar AS Enviar,
@lcMensaje AS Mensaje;
Donde la expresión {{loVista.Correo}}
hace referencia al campo Correo
del cliente que está siendo guardado.
({{lvData[0][0].Tip_Cli}} == "NORMAL")
OR ({{loVista.Mon_Net}}*{{loVista.Tasa}} <= 1000)
De acuerdo a esa condición, el resto del evento solo se ejecutaría si el Tipo de Cliente seleccionado es igual al texto “Normal” o si el monto neto del documento es menor a 1.000
(monto en moneda base).
Una característica adicional que tienen los campos de los eventos donde se puede utilizar Código SQL y expresiones LIF, es el botón de menú , que cuenta con la opción Ampliar... para abrir el contenido del campo en pantalla completa, en modo lectura y la opción Editar... que permite editar el contenido del campo en pantalla completa.
En este caso, para editar el contenido SQL o LIF de los campos de los eventos, es recomendable utilizar la ventana de edición. Para esto debemos hacer clic en la opción Edirar... del campo.
Al hacer clic en la opción Edirar... se abrirá una ventana emergente en la que debemos editar el contenido del campo.
Despues de editar el contenido del campo, debemos presionar el botón para cerrar la ventana emergente de edición.
4. En la sección de Ejecución: Se definen las tareas que ejecutará el evento cuando el valor del campo Ejecutar Cuando sea Verdadero (TRUE).
En esta sección se pueden ejecutar las tareas:
- La tarea Ejecutar Sentencia SQL cuenta solo con el campo Código, en el cual se puede escribir código SQL y expresiones LIF de propósito general, por ejemplo para actualizar un registro de la base de datos, ejecutar un procedimiento almacenado existente o mostrar un mensaje emergente al ejecutar una tarea.
Por ejemplo, si se escribe la siguiente expresión actualizará el campo Correo2 del cliente actual:
UPDATE Clientes
SET Correo2 = {{loVista.Correo}}
WHERE Cod_Cli = {{loVista.Cod_Cli}}
Se recomienda que cualquier actualización importante ejecutada dentro esta sección incluya el guardado de las auditorias correspondientes. Para esto se puede hacer uso del
Procedimiento Almacenado SP_GuardarAuditoria
:
EXECUTE @RC = [dbo].[sp_GuardarAuditoria]
@lcUsuario, @lcTipo, @lcTabla, @lcOpcion, @lcAccion,
@lcDocumento, @lcCodigo, @lcClave2, @lcClave3, @lcClave4, @lcClave5,
@lcDetalle, @lcEquipo, @lcSucursal, @lcObjeto, @lcNotas, @lcEmpresa
Otro ejemplo, si se escribe la siguiente expresión, podrá mostrar un mensaje emergente al ejecutar el evento:
#LIF:mMostrarMensaje(
"IGTF Generado Automáticamente";
{{lvData[0][0].Mensaje}};
"i";
{{lvData[0][0].Mostrar_Mensaje}}):LIF#
- La tarea Generar Reporte permite ejecutar un reporte con los datos obtenidos en la consulta del evento, y este puede ser guardado en una dirección de memória (Disco duro) o adjuntado a un correo. Esta tarea cuenta con los campos:
{{lvData[0][0].llGenerar}}
"rCasos_EjecutorFechas_Detallado_Auto_" & FormatearFecha({{lvData[0][0].Fecha_Reporte}}; "dd-MM-yyyy"; "es-VE") & ".pdf"
"Casos.Cod_Cli = " & {{lvData[0][0].Cod_Cli}}
Como se aprecia en este ejemplo, en este campo también podemos unir texto con expresiones LIF.
- La tarea Enviar Correo permite enviar un correo automático a los destinatarios. Esta sección admite expresiones LIF en todos sus campos, para poder utilizar los datos obtenidos por la consulta del evento. Esta tarea cuenta con los campos:
"correo1@ejemplo.com; correo2@ejemplo.com"
{{lvData[0][0].Destinatarios}}
"Se ha creado una Factura de Venta por un monto de " &
FormatearNumero({{loVista.Mon_Net}}; 2) & ({{loVista.Cod_Mon}}
& " al cliente \q" & {{lvData[0][0].Cod_Cli}} & "\q " &
{{lvData[0][0].Nom_Cli}} & ". La factura debe ser autorizada
por el departamento de cobranzas antes de ser despachada."
El contenido del correo generado será similar al siguiente:
Se ha creado una Factura de Ventas por un monto de 14.128,17 VEB
al cliente 'C0007108' Centro de Inversiones Empresariales. La
factura debe ser autorizada por el departamento de cobranzas
antes de ser despachada.
De la misma forma podemos crear el contenido del correo en la consulta del evento y enviarlo en forma de parámetro a este campo, por ejemplo:
{{lvData[0][0].Contenido}}
- La tarea Enviar Aviso permite mostrar una notificación en pantalla a los usuarios o grupos de usuarios indicados. Esta sección también admite expresiones LIF en todos sus campos, para poder utilizar los datos obtenidos por la consulta del evento. Esta tarea cuenta con los campos:
{{lvData[0][0].Usuarios}}
"Se generó la factura de venta #" & {{loVista.Documento}} & "
por un monto de " & FormatearNumero({{lvData[0][0].Monto}}; 2)
& " Bs."
El contenido del aviso será similar al siguiente:
Se generó la factura de venta #YDR00002 por un monto de
15.283,52 Bs.
De la misma forma podemos crear el contenido del aviso en la consulta del evento y enviarlo en forma de parámetro a este campo, por ejemplo:
{{lvData[0][0].Contenido}}
- La tarea Enviar SMS permite enviar mensajes de texto a los números de teléfono indicados. Esta sección también admite expresiones LIF en sus campos, para poder utilizar los datos obtenidos por la consulta del evento. Esta tarea cuenta con los campos:
{{lvData[0][0].llEnviarSms}}
{{lvData[0][0].Telefonos}}
"Se anuló el caso " & {{lvData[0][0].Documento}} & " del
cliente " & {{lvData[0][0].Cliente}} & " por el Usuario "
& {{lvData[0][0].Usuario}}
El contenido del SMS será similar al siguiente:
Se anuló el caso 00001 del cliente V00000000 por el usuario JJT
De la misma forma podemos crear el contenido del SMS en la consulta del evento y enviarlo en forma de parámetro a este campo, por ejemplo:
{{lvData[0][0].ContenidoSms}}
- La tarea Ejecutar Complemento permite abrir automáticamente un complemento al ejecutar el evento. Esta sección requiere que se utilicen expresiones LIF en sus campos, para poder abrir el complemento con los datos obtenidos por la consulta del evento. Esta tarea cuenta con los campos:
{{lvData[0][0].llAbrirComplemento}}
{{lvData[0]}}
.5. En la sección de Continuar Operación: Se definen las condiciones que permitirán o no continuar con el proceso del formulario en el que se ejecutó el evento. Por ejemplo, si el evento se ejecuta con el gancho Antes de Confirmar y en la sección Continuar Operación se devuelve un valor FALSE, el documento no se confirmará y mostrará el mensaje indicado en esta sección.
Esta sección cuenta con los campos:
{{lvData[0][0].Continuar}}
"Operación no permitida por el evento \Q" & {{goEvento.pcCodigo}} & " - " & {{goEvento.pcNombre}} & "\Q."
El contenido del mensaje será similar al siguiente:
Operación no permitida por el evento "EVEFAC01 - Evento de Facturas 01".
De la misma forma podemos crear el contenido del mensaje en la consulta del evento y enviarlo en forma de parámetro a este campo, por ejemplo:
{{lvData[0][0].Mensaje}}
c. Por último, despues de llenar los campos y configurar las tareas que ejecutará el evento, debemos pulsar el botón para guardar el nuevo evento.
En esta sección se describirán algunas generalidades de Lenguaje Interpretado Factory (LIF) y algunos aspectos particulares de la implementación de LIF para programación de eventos.
LIF fue desarrollado con la finalidad de proveer una sintaxis simplificada de expresiones para dar soporte a diversas funcionalidades de eFactory, con el fin de facilitar la personalización de su funcionamiento.
Para mayor información sobre la sintaxis, operadores y funciones LIF refiérase al documento Manual de Expresiones LIF.
Como adición a las características provistas por LIF, los diferentes componentes de eFactory proveen de características adicionales específicas de cada área. En los eventos, por ejemplo, se tiene acceso a los siguientes elementos:
goEmpresa: Hace referencia a la empresa activa al momento de ejecutarse el evento. |
|
goSucursal: Hace referencia a la sucursal activa al momento de ejecutarse el evento. |
|
goUsuario: Hace referencia al usuario activo al momento de ejecutarse el evento. |
|
goEvento: Hace referencia al evento que se está ejecutando. |
|
goAuditoria: Almacena información adicional utilizada para guardar auditorias del evento que se está ejecutando. |
|
Se dispone de dos objetos que dan acceso a los campos del registro o encabezado, y de los renglones del documento, si los hay.
loVista: Hace referencia los campos del registro activo, o del encabezado del documento activo, al momento de ejecutarse el evento. Las referencias al objeto
loVista
usan la siguiente sintaxis:
{{loVista.CAMPO}}
Donde CAMPO
es el nombre de un campo del registro actual (o del encabezado, si es un documento). Por ejemplo, para leer el campo Código de Cliente de un documento de venta, se usaría:
{{loVista.Cod_Cli}}
laRenglones: Hace referencia los campos de los renglones del documento activo al momento de ejecutarse el evento. Si el registro activo no es tiene renglones
entonces el objeto no estará disponible. Las referencias al objeto loRenglones
usan la siguiente sintaxis:
{{laRenglones[M][N].CAMPO}}
Donde M
es el número del grupo de renglones (el primer grupo de renglones será 0, el segundo 1, etc.). N
es el número de renglón a leer (comenzando por 0 para el primer renglón).
Y CAMPO
es el nombre de un campo del renglón indicado por M
y N
.
Normalmente, leeremos los renglones del documento en el campo Datos de Ejecución y utilizando un bloque MACRO para recorrer todos los renglones como se muestra en el siguiente ejemplo:
--Tabla con los Artículos del lso renglones del documento (tomado de la vista)
CREATE TABLE #tmpRenglones(Renglon INT, Cod_Art CHAR(30))
#MACRO:laRenglones[0]#
INSERT INTO #tmpRenglones(Renglon, Cod_Art)
VALUES ({{laRenglones[0][N].Renglon}}, {{laRenglones[0][N].Cod_Art}})
#MACRO#
De esta forma, el bloque MACRO
(LIF) generará una sentencia INSERT
(SQL) por cada renglón del documento. El código SQL resultante será el finalmente ejecutado para generar los
datos de ejecución. Al final de esta ayuda se encuentra el enlace Ejemplos de Eventos y Alertas que cuenta con ejemplos de aplicación más completos.
Las opciones globales son aquellas creadas desde la pantalla de Opciones, en el módulo de Sistemas.
Las opciones de usuarios son aquellas creadas desde la pantalla de Opciones del Usuario, en el formulario de Usuarios Globales, ficha Avanzados.
Para leer el valor actual de una opción global se usa la siguiente sintaxis:
{{goOpcionGlobal.OPCION}}
Donde OPCION
es el código de la opción que se desea leer. Por ejemplo, para determinar si el manejo de lotes está activo en la empresa actual, en el sistema administrativo, se usaría:
{{goOpcionGlobal.ACTLOT}}
Si la opción global solicitada existe entonces el evento no seguirá ejecutándose.
De forma similar, para leer el valor actual de una opción de usuario se usa la siguiente sintaxis:
{{goOpcionUsuario.OPCION}}
Donde OPCION
es el código de la opción que se desea leer. Si el usuario que esté activo al momento de ejecutarse el evento no tiene creada y activa la opción indicada,
entonces le leerá la opción con el mismo código entre las opciones globales. Si la opción global tampoco existe entonces el evento no seguirá ejecutándose.
Después de ejecutarse el código del campo Datos de Ejecución se tiene disponible el objeto lvData
, que contiene el resultado de una o más sentencias SELECT ejecutadas en dicho campo.
Para leer el contenido de este objeto se usa la sintaxis siguiente:
{{lvData[M][N].CAMPO}}
Donde M
es el número de la tabla a leer (la primera tabla será 0, la segunda 1, etc.). N
es el número de renglón a leer (comenzando por 0 para el primer renglón).
Y CAMPO
es el nombre de un campo del renglón indicado por M
y N
.