Manual de Programación de Eventos en eFactory Software ERP en la Nube

Aquí te presentamos el Manual de Programación de Eventos en eFactory ERP en la Nube.

A continuación se resumen los pasos:

  1. Ingrese a eFactory Administrativo con su usuario y contraseña.
  2. Seleccione el módulo de Sistema.
  3. Haga clic en la sección de Operaciones.
  4. Seleccione la opción de Opciones.
  5. Presione el botón Buscar.
  6. Busque y Seleccione las opciones ACTEVE y ACTALE.
  7. Presione el botón Editar.
  8. Cambie el valor de la opción a Verdadero.
  9. Haga clic en el botón Aceptar para guardar la actualización de la Opción.
  10. Haga clic en la pestaña de Herramientas.
  11. Haga clic en la opción de Administrador de Eventos.
  12. Presione el botón Agregar.
  13. Llene los datos básicos del evento.
  14. Configure la opción y gancho del evento.
  15. Defina el detalle de ejecución del evento.
  16. Defina las tareas que debe ejecutar el evento.
  17. Llene los campos de la sección Continuar Operación.
  18. Presione el botón Aceptar para guardar el nuevo evento.

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.

Paso 1: Ingresar al Sistema Administrativo

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 .

Paso 2: Configurar las opciones "ACTEVE" y "ACTALE"

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.

Paso 3: Seleccionar la opción de Administrador de Eventos

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.

Paso 4: Agregar un nuevo Evento

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.


  • Código: Debe asignar un código único al evento (Maximo 10 carácteres) que resuma el nombre del mismo. Por ejemplo VALDESFV1, VALDESFV2 y VALCRCOPED.
  • Nombre: Debe asignar un nombre claro que índice en líneas generales la tarea realizada por el mismo, el formulario que afecta y la acción sobre la cual se ejecutará. Algunos ejemplos son:
    1. Validación de Descuento Global en Facturas de Venta antes de Guardar Nuevo.
    2. Validación de Descuento Global en Facturas de Venta antes de Guardar Editado.
    3. Validación de Estado de Crédito antes de Confirmar Pedidos.
    4. Validación de Estatus de Factura de Ventas Antes de Imprimir el Formato.
    5. Validación de Monto de Factura y Envío de Correo Antes de Guardar Nuevo.
    6. Validación de Nivel del Usuario Antes de Eliminar Cobro a Clientes.

2. En la sección de Opción y Gancho Asociados: Debemos indicar los campos:


  • Sistema: Muestra el sistema en el que se registrará el evento.
  • Módulo: Debe seleccionar el módulo al que pertenece el nuevo evento.
  • Sección: Debe seleccionar la sección a la que pertenece el nuevo evento.
  • Opción: Debe seleccionar la opción (Formulario) a la que pertenece el nuevo evento.
  • Tipo de Ejecución: Permite indicar el tiempo que se ejecutará el evento. Aquí puede seleccionar las opciones:
    1. Única: El evento se ejecutará una sola vez.
    2. Temporal: El evento se ejecutará en el período indicado.
    3. Indefinida: El evento se ejecutará por tiempo indefinido.
  • Fecha Inicio: Permite indicar la fecha de inicio desde la que se empezará a ejecutar el evento.
  • Fecha Fin: Permite indicar la fecha de fin hasta la que se ejecutará el evento (Solo aplica para el Tipo de Ejecución Temporal).
  • Gancho: Permite seleccionar la acción que disparará el evento. Aquí se encuentran las acciones (Ganchos):
    1. Antes de Agregar: Ejecutará el evento al pulsar el botón Agregar del formulario.
    2. Despues de Agregar: Ejecutará el evento despues de pulsar el botón Agregar del formulario.
    3. Antes de Editar: Ejecutará el evento al pulsar el botón Editar del formulario.
    4. Despues de Editar: Ejecutará el evento despues de pulsar el botón Editar del formulario.
    5. Antes de Buscar: Ejecutará el evento al pulsar el botón Buscar del formulario.
    6. Despues de Buscar: Ejecutará el evento despues de pulsar el botón Buscar del formulario.
    7. Antes de Eliminar: Ejecutará el evento al pulsar el botón Eliminar del formulario.
    8. Despues de Eliminar: Ejecutará el evento despues de pulsar el botón Eliminar del formulario.
    9. Antes de Listar Formatos: Ejecutará el evento al pulsar el botón Imprimir del formulario.
    10. Antes de Mostrar Formato: Ejecutará el evento antes de Emitir un formato del listado de formatos del formulario.
    11. Despues de Mostrar Formato: Ejecutará el evento despues de Emitir un formato del listado de formatos del formulario.
    12. Antes de Guardar Nuevo: Ejecutará el evento al pulsar el botón Aceptar antes de guardar un documento nuevo.
    13. Antes de Guardar Editado: Ejecutará el evento al pulsar el botón Aceptar antes de guardar la edición de un documento existente.
    14. Despues de Guardar: Ejecutará el evento despues de pulsar el botón Aceptar despues de guardar un documento nuevo o editado.
    15. Antes de Cancelar: Ejecutará el evento al pulsar el botón Cancelar del formulario.
    16. Despues de Cancelar: Ejecutará el evento despues de pulsar el botón Cancelar del formulario.
    17. Antes de Confirmar: Ejecutará el evento al pulsar el botón Confirmar del formulario.
    18. Despues de Confirmar: Ejecutará el evento despues de pulsar el botón Confirmar del formulario.
    19. Antes de Procesar: Ejecutará el evento al pulsar el botón Procesar del formulario.
    20. Despues de Procesar: Ejecutará el evento despues de pulsar el botón Procesar del formulario.
    21. Antes de Anular: Ejecutará el evento al pulsar el botón Anular del formulario.
    22. Despues de Anular: Ejecutará el evento despues de pulsar el botón Anular del formulario.
    23. Antes de Reversar: Ejecutará el evento al pulsar el botón Reversar del formulario.
    24. Despues de Reversar: Ejecutará el evento despues de pulsar el botón Reversar del formulario.
    25. Gancho Genérico: Esta opción permite utilizar un tipo de gancho adicional o personalizado configurado principalmente en un complemento.
  • Tipo de Gancho: Permite seleccionar alguna acción personalizada de un formulario o complemento, cuando en el campo Gancho se selecciona la opción Gancho Genérico. Algunos ejemplos de Ganchos genéricos son:
    1. Guardar Información Contable del Encabezado.
    2. Guardar Información Contable del Renglón.
    3. Generar Retenciones Automáticas.
    4. Generar Retenciones Renglones.
    5. Antes de Anular Retenciones Renglones.
    6. Despues de Anular Retenciones Renglones.
    7. Antes de Eliminar Retenciones Renglones.
    8. Despues de Eliminar Retenciones Renglones.
    9. Antes de Cobrar Factura de Ventas IPOS.
    10. Despues de Cobrar Factura de Ventas IPOS.

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:


  • Datos de Ejecución: Este campo debe contener una consulta SQL que se usará para preparar los datos que serán usados durante la ejecución del evento.

    Este campo consistirá típicamente de código SQL que terminará con al menos un SELECT final que debe devolver la tabla de datos usada por el evento (el objeto 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.

    Este campo también permite incluir referencias a la vista y a otros objetos LIF disponibles. Estos objetos puede consultarlos en la sección El Lenguaje Interpretado Factory

    Por ejemplo: Si deseamos programar el evento VALIDACION DE CORREO DE LOS CLIENTES (asociado al gancho “Antes de Guardar Nuevo” del formulario de Clientes), el campo podría tener el código SQL siguiente:
    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.

  • Ejecutar Cuando: Debe contener una expresión LIF que indicará bajo qué condición se ejecutará el resto del evento. En algunos casos querremos que el resto de evento se ejecute siempre, por lo que en esos casos asignaremos el valor TRUE. En otros casos querremos que el resto del evento (el envío de correo, los avisos...) solo se ejecute si se cumple cierta condición. Por ejemplo, si se coloca la siguiente expresión:
    ({{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:


  • Ejecutar Sentencia SQL.
  • Generar Reporte.
  • Enviar Correo.
  • Enviar Aviso.
  • Enviar SMS.
  • Ejecutar Complemento.

- 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:


  • Generar Reporte: Debe contener una expresión LIF que indicará bajo qué condición se generará el reporte. En algunos casos querremos que el reporte siempre sea generado, por lo que en esos casos asignaremos el valor TRUE. En otros casos querremos que el reporte solo se genere si se cumple cierta condición. Por ejemplo, si se coloca la siguiente expresión:
  • {{lvData[0][0].llGenerar}}
  • Tipo de Reporte: Permite seleccionar si se desea generar un Reporte o un Formato.
  • Destino: Permite seleccionar el destino al que se generará el reporte, en este caso tenemos las opciones:
    1. Formato Acrobat (pdf)
    2. Microsoft Word (doc)
    3. Microsoft Excel (xls)
    4. Microsoft Excel - solo datos (xls)
    5. (definido por el reporte)
  • Código: En este campo debemos escribir el código del reporte que queremos generar.
  • Guardar en: En este campo debemos escribir la dirección de disco en la que queremos que se guarde el reporte.
  • Adjuntar reporte al correo: Esta casilla debemos activarla si configuramos el envío de correos en el evento y queremos que se adjunte el reporte.
  • Orden: En este campo debemos indicar el campo por el cual debe ordenar nuestro reporte. Normalmente este campo se encuentra en la definición del reporte y podemos tomarlo de la misma.
  • Nombre Archivo: En este campo debemos escribir el nombre con el cual queremos generar el archivo del reporte. Este campo admite expresiones LIF, por lo que podemos utilizar datos obtenidos en la consulta del evento. Por ejemplo, podemos utilizar la siguiente expresión para incluir una fecha en el nombre del archivo:
    "rCasos_EjecutorFechas_Detallado_Auto_" & FormatearFecha({{lvData[0][0].Fecha_Reporte}}; "dd-MM-yyyy"; "es-VE") & ".pdf"
  • Condición SQL: Si el tipo de reporte seleccionado es Formato, en este campo debemos escribir la condición SQl para generar el formato, por ejemplo:
    "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.
  • Parámetros del Reporte: en esta sección se deben definir los parámetros que utiliza el reporte para su generación. Para esto debemos:
    1. Presionar el botón .
    2. Seleccionar el número de parámetro.
    3. Asignar el valor en la columna Desde.
    4. Asignar el valor en la columna Hasta.
    Nota: Los parámetros del Reporte también admiten Expresiones LIF para utilizar los datos obtenidos en la consulta del evento.

- 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:


  • Destinatario: En este campo debemos indicar los destinatarios a los que se enviará el correo. Esto podemos hacerlo de 2 formas:
    1. Escribiendo los correos entre comillas, separados por punto y coma (;), por ejemplo: "correo1@efactoryerp.com; correo2@efactoryerp.com"
    2. Utilizando un parámetro obtenido en la consulta del evento, que devuelva una cadena con uno o mas destinatarios, por ejemplo:
      {{lvData[0][0].Destinatarios}}
    En este campo, debe haber al menos una dirección de correo válida para que el correo sea enviado.
  • CC: En este campo debemos indicar los correos a los que se enviará una copia del correo, y de la misma forma que en el campo Destinatario se pueden escribir los correos o utilizar un parámetro de la consulta del evento.
  • CCO: En este campo debemos indicar los correos a los que se enviará una copia oculta del correo, y de la misma forma que en el campo Destinatario se pueden escribir los correos o utilizar un parámetro de la consulta del evento.
  • Asunto: En este campo debemos escribir el asunto del correo. Este también puede escribirse directamente entre comillas o utilizando un parámetro de la consulta del evento.
  • Mensaje: En este campo debemos escribir el contenido o mensaje del correo. Este puede escribirse directamente entre comillas o utilizando expresiones LIF. Por ejemplo, si se indica el siguiente código LIF en este campo:
    "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}}
  • Adjuntos: En este campo debemos escribir la dirección de disco en la que se encuentra guardado el documento que queremos que se envíe adjunto.

- 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:


  • Usuarios: En este campo debemos indicar una lista de códigos de usuario separados por punto y coma, a los cuales se les enviará un mensaje por medio del sistema de mensajes en pantalla de eFactory. Esto podemos hacerlo de 2 formas:
    1. Escribiendo los códigos de usuario entre comillas, separados por punto y coma (;).
    2. Utilizando un parámetro obtenido en la consulta del evento, que devuelva una cadena con uno o mas códigos de usuario, por ejemplo:
      {{lvData[0][0].Usuarios}}
  • Grupos: En este campo podemos indicar una lista de códigos grupos de usuarios, y de la misma forma que en el campo Usuarios se pueden escribir los códigos grupos de usuarios o utilizar un parámetro de la consulta del evento.
  • Tipo de Aviso: En este campo podemos seleccionar la opción Mensaje para que el aviso se muestre solo en el panel de avisos de eFactory, o seleccionar la opción Ventana para que el aviso se muestre también en una ventana emergente.
  • Prioridad: En este campo podemos seleccionar la prioridad del complemento, este campo no tiene incidencia en el comportamiento del evento, sino que es utilizado para clasificar los avisos generados.
  • Contenido: En este campo debemos escribir el contenido del mensaje de la alerta. Este puede escribirse directamente entre comillas o utilizando expresiones LIF. Por ejemplo, si se indica el siguiente código LIF en este campo:
    "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}}
  • Url: En este campo podemos escribir una dirección URL que se mostrará como referencia en el contenido del aviso.

- 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:


  • Generar SMS: Debe contener una expresión LIF que indicará bajo qué condición se enviará el SMS. En algunos casos querremos que el SMS siempre sea enviado, por lo que en esos casos asignaremos el valor TRUE. En otros casos querremos que el SMS solo se envie si se cumple cierta condición. Por ejemplo, si se coloca la siguiente expresión:
  • {{lvData[0][0].llEnviarSms}}
  • Destinatarios: En este campo debemos indicar una lista de números de teléfonos separados por punto y coma, a los cuales se les enviará el SMS. Esto podemos hacerlo de 2 formas:
    1. Escribiendo los números de teléfono entre comillas, separados por punto y coma (;).
    2. Utilizando un parámetro obtenido en la consulta del evento, que devuelva una cadena con uno o mas números de teléfono, por ejemplo:
      {{lvData[0][0].Telefonos}}
  • Contenido: En este campo debemos escribir el contenido del mensaje de texto. Este puede escribirse directamente entre comillas o utilizando expresiones LIF. Por ejemplo, si se indica el siguiente código LIF en este campo:
    "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}}
  • Servicio SMS: En este campo debemos escribir el nombre del archivo .aspx del complemento donde están programados los servicios de envío de SMS.

- 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:


  • Abrir Complemento: Debe contener una expresión LIF que indicará bajo qué condición se abrirá el complemento. En algunos casos querremos que el complemento siempre se abran, por lo que en esos casos asignaremos el valor TRUE. En otros casos querremos que el complemento solo se abra si se cumple cierta condición. Por ejemplo, si se coloca la siguiente expresión:
  • {{lvData[0][0].llAbrirComplemento}}
  • Archivo: En este campo debemos escribir el nombre del archivo .aspx del complemento que querramos abrir.
  • Parámetros: En este campo debemos indicar el parámetro que contiene los datos que serán utilizados en el complemento. Esto lo haremos escribiento la expresión LIF {{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:


  • Continuar Operación Si: Debe contener una expresión LIF que indicará si el formulario que ejecutó el evento continuará ejecutando sus operaciones. En algunos casos querremos que el formulario siempre continue con sus operaciones, por lo que en esos casos asignaremos el valor TRUE. En otros casos querremos que el formulario solo continue su operación si se cumple cierta condición. Por ejemplo, si se coloca la siguiente expresión:
  • {{lvData[0][0].Continuar}}
  • Título del Mensaje: En este campo debemos escribir el título del mensaje que se mostrará al usuario si el evento detiene la operación.
  • Contenido del Mensaje: En este campo debemos escribir el contenido del mensaje que se mostrará al usuario si el evento detiene la operación. Este puede escribirse directamente entre comillas o utilizando expresiones LIF. Por ejemplo, si se indica el siguiente código LIF en este campo:
    "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.

El Lenguaje Interpretado Factory

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:


  • Objetos Globales: Que proveen información del entorno en el momento de ejecutar el evento (datos de la empresa actual, de la sucursal, del usuario...).
  • Vista del Registro/Documento: Que provee información del registro o documento actual desde el cual se generó el evento.
  • Opciones Globales y de Usuario: Que permiten leer el estado actual de cualquier opción del sistema, sea esta una poción global, o una opción especifica de algún usuario.

Objetos Globales Disponibles

goEmpresa: Hace referencia a la empresa activa al momento de ejecutarse el evento.
goEmpresa.pcCodigo 
goEmpresa.pcNombre 
goEmpresa.pcMonedaBase 
goEmpresa.pcMonedaAdicional 
goSucursal: Hace referencia a la sucursal activa al momento de ejecutarse el evento.
goSucursal.pcCodigo 
goSucursal.pcNombre 
goSucursal.pnNivel 
goUsuario: Hace referencia al usuario activo al momento de ejecutarse el evento.
goUsuario.pcCodigo  
goUsuario.pcNombre 
goUsuario.pnNivel 
goUsuario.pcCorreo  
gousuario.pcSeparadorDecimal 
goUsuario.pcSeparadorDeMiles  
goUsuario.pcSeparadorDeFecha 
goUsuario.pcFormatoDeFecha 
goEvento: Hace referencia al evento que se está ejecutando.
goEvento.pcCodigo 
goEvento.pcNombre  
goEvento.pnNivel  
goEvento.pcComentario  
goEvento.pcNotas 
goAuditoria: Almacena información adicional utilizada para guardar auditorias del evento que se está ejecutando.
goAuditoria.pcNombreEquipo 
goAuditoria.pcDetalleVacio 

Vista del Registro/Documento

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.

Opciones Globales y de Usuario

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.

Objeto de Datos de Ejecución

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.

Video relacionado