Avisos - Crear avisos personalizados (EN PROCESO)

Creado por David Miralpeix, Modificado el Vie, 16 Feb a 12:31 P. M. por David Miralpeix

Utilizando la funcionalidad de avisos del ERP, la cual podemos ver en la entrada Avisos - Introducción, podemos definir alertas personalizadas para que aparezcan de la misma forma que los avisos estándar.


Vamos a plantear el siguiente caso:

  • El cliente necesita que aparezca un aviso en el sistema cuando se da de alta un artículo de una determinada familia en la base de datos.


Para poder definir que avisos tienen que aparecer y cuando, necesitamos revisar los siguiente puntos:

- Dar de alta una configuración para los avisos

- Crear un proceso para insertar los avisos en el ERP

- Definir como y cuando queremos que se generen estos avisos


Lo primero sería añadir esta configuración, para ello tenemos que ejecutar la siguiente consulta personalizando mínimo los siguiente valores:

- idProcesoAviso: Indicar un id a partir del 1000

- Descrip: Una breve descripción del aviso

- Activado: Para que se marque como activo

- Store: Stored procedure que será la encargada de insertar el aviso

- Habilitado: Para habilitar el aviso

-- idProcesoAviso tiene que ser a partir del 1000 para los personalizados
INSERT INTO Avisos_Procesos (IdProcesoAviso,Descrip,Activado,IdEmpleado,Store,Habilitado,GeneraAviso,Clave,IdPlantillaFlujo,Script)
SELECT 1001,'Artículo de la familia Geralt insertado',1,0,'PPers_AVISOS_Articulo',1,1,NULL,NULL,NULL

Creamos la stored procedure, en este caso 'PPers_AVISOS_Articulo' que será la encargada de añadir los registros sobre la tabla 'Avisos' llamando a la stored 'Avisos_Insertar', como podemos ver definimos los parámetros de entrada que vayamos a necesitar, en este caso voy a utilizar el idArtículo, la familia, la descripción y las observaciones, ya que estos valores me van a servir para indicar el mensaje que contiene el aviso:

CREATE PROCEDURE [dbo].[PPers_AVISOS_Articulo]
   @IdArticulo     T_Id_Articulo OUTPUT,
  @idFamilia T_Id_Fami_Art OUTPUT,
  @Descrip VARCHAR(800) OUTPUT,
  @Observaciones  T_Descripcion_Larga OUTPUT
AS

DECLARE @idArt T_Id_Articulo
DECLARE @Fecha DATE
DECLARE @VRet BIT
SET @Fecha=GetDate()

  EXEC @Vret=Avisos_Insertar 1001, @Descrip, @Observaciones, @Fecha, @Fecha, 0
  RETURN @Vret
GO

zpermisos PPers_AVISOS_Articulo --Damos permisos a la stored

Una vez tenemos el proceso y el aviso configurado, tenemos que definir donde queremos que se realice la inserción del aviso, en este caso sería cuando el usuario inserta un artículo de la familia 'Geralt', como podemos ver en la siguiente imagen tengo un trigger de actualización sobre la tabla 'Artículos'.

CREATE TRIGGER [dbo].[Pers_Articulos_ITrig_AvisosArticulos] 
ON [dbo].[Articulos]
FOR INSERT
AS
  IF EXISTS(SELECT 1 FROM inserted) BEGIN

    DECLARE @Ins INT
    DECLARE @prt nvarchar(2000)
    DECLARE @idArticulo T_Id_Articulo
    DECLARE @idFamilia T_Id_Fami_Art
    DECLARE @Descrip VARCHAR(800)
    DECLARE @Observaciones  T_Descripcion_Larga

    IF OBJECT_ID('tempdb..#Articulos') IS NOT NULL
      DROP TABLE #Articulos

    SELECT IdArticulo,IdFamilia,Descrip,Observaciones INTO #Articulos
    FROM inserted WHERE IdFamilia = 'Geralt'

    WHILE EXISTS(
      SELECT IdArticulo,IdFamilia,Descrip,Observaciones FROM #Articulos
    ) BEGIN
      SELECT TOP 1 @IdArticulo = IdArticulo, @idFamilia = idFamilia, @Descrip ='Artículo ( ' +ISNULL(IdArticulo,'') +' - ' +ISNULL(Descrip,'') +' )', @Observaciones = Observaciones
      FROM #Articulos

      EXEC @Ins=PPers_AVISOS_Articulo @IdArticulo, @idFamilia, @Descrip, @Observaciones
      IF @Ins=0 BEGIN    
        RAISERROR('Error en el proceso de inserción de avisos para artículos de la familia Geralt.',12,1)  
      END
      
      DELETE FROM #Articulos WHERE IdArticulo = @idArticulo
        
    END
  END
GO




¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo