Duración 3 horas y media. 1:00pm - 4:30pm
Se realizó el SP de Insertar empleado, corrigiendo el realizado anteriormente ya que este presentaba fallas a la hora de registrar los errores en la Bitácora de eventos. Esto se corrigió al ver que la cantidad de ENDs no era igual a la cantidad de BEGINs, esto ocacionaba que nunca entrara a la condición ELSE que añade el evento a la bitácora.
La versión corregida del SP es la siguiente:
ALTER PROCEDURE [dbo].[InsertarEmpleado]
@Puesto VARCHAR(128),
@ValorDocumentoIdentidad VARCHAR(128),
@Nombre VARCHAR(128),
@FechaContratacion DATE,
@Username VARCHAR(128),
@PostInIP VARCHAR(64),
@OutResultCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SET @OutResultCode = 0;
IF EXISTS (SELECT 1 FROM dbo.Empleado WHERE Nombre = @Nombre)
BEGIN
SET @OutResultCode = 50005;
INSERT INTO dbo.bitacoraEvento(
IdTipoEvento,
IdUsuario,
Fecha,
Descripcion,
PostInIP,
PostTime
) VALUES (
5,
(SELECT Id FROM dbo.Usuario WHERE Username = @Username),
GETDATE(),
'Error: Nombre duplicado en la inserción del empleado',
@PostInIP,
GETDATE()
);
END
ELSE
BEGIN
IF EXISTS (SELECT 1 FROM dbo.Empleado WHERE ValorDocumentoIdentidad = @ValorDocumentoIdentidad)
BEGIN
SET @OutResultCode = 50004;
INSERT INTO dbo.bitacoraEvento(
IdTipoEvento,
IdUsuario,
Fecha,
Descripcion,
PostInIP,
PostTime
) VALUES (
5,
(SELECT Id FROM dbo.Usuario WHERE Username = @Username),
GETDATE(),
'Error: Documento de identidad duplicado en la inserción del empleado',
@PostInIP,
GETDATE()
);
END
ELSE
BEGIN
DECLARE @IdPuesto INT;
SELECT @IdPuesto = Id FROM dbo.Puesto WHERE Nombre = @Puesto;
IF @IdPuesto IS NULL
BEGIN
SET @OutResultCode = 50008;
END
ELSE
BEGIN
BEGIN TRANSACTION;
INSERT INTO dbo.Empleado (IdPuesto, ValorDocumentoIdentidad, Nombre, FechaContratacion)
VALUES (@IdPuesto, @ValorDocumentoIdentidad, @Nombre, @FechaContratacion);
INSERT INTO dbo.bitacoraEvento(
IdTipoEvento,
IdUsuario,
Fecha,
Descripcion,
PostInIP,
PostTime
) VALUES (
6,
(SELECT Id FROM dbo.Usuario WHERE Username = @Username),
GETDATE(),
'Inserción exitosa del empleado',
@PostInIP,
GETDATE()
);
COMMIT TRANSACTION;
SET @OutResultCode = 0;
END
END
END
SELECT @OutResultCode AS OutResultCode;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
BEGIN
ROLLBACK TRANSACTION;
END
INSERT INTO dbo.DBErrors VALUES (
SUSER_SNAME(),
ERROR_NUMBER(),
ERROR_STATE(),
ERROR_SEVERITY(),
ERROR_LINE(),
ERROR_PROCEDURE(),
ERROR_MESSAGE(),
GETDATE()
);
SET @OutResultCode = 50008;
SELECT @OutResultCode AS OutResultCode;
END CATCH;
SET NOCOUNT OFF;
END;
GO
También para acceder de manera correcta a los puestos y que estos se muestren en una barra desplegable, se creó un SP peuqeño que unicamente obtiene los nombres de la tabla puestos
CREATE PROCEDURE [dbo].[GetPuestos]
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SELECT Nombre FROM dbo.Puesto;
END TRY
BEGIN CATCH
INSERT INTO dbo.DBErrors VALUES (
SUSER_SNAME(),
ERROR_NUMBER(),
ERROR_STATE(),
ERROR_SEVERITY(),
ERROR_LINE(),
ERROR_PROCEDURE(),
ERROR_MESSAGE(),
GETDATE()
);
END CATCH;
SET NOCOUNT Off;
END;
GO
Así mismo, se creó un SP de la misma naturaleza para acceder a los errores en la tabla Error, esto permite que a la hora de capturar un OutResultCode diferente a 0, se ejecute este SP para obenter el error correspondiente.
CREATE PROCEDURE [dbo].[GetError]
@Codigo INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SELECT Descripcion FROM dbo.Error
WHERE Codigo = @Codigo;
END TRY
BEGIN CATCH
INSERT INTO dbo.DBErrors VALUES (
SUSER_SNAME(),
ERROR_NUMBER(),
ERROR_STATE(),
ERROR_SEVERITY(),
ERROR_LINE(),
ERROR_PROCEDURE(),
ERROR_MESSAGE(),
GETDATE()
);
END CATCH;
SET NOCOUNT Off;
END;
GO
Finalmente se realzó la capa de presentación de insertar empleado que hubo que realizarle una modificación a la presentada el semestre pasado para que la misma mostrara los mensajes de error obtenidos del Servidor, esto mediante el uso del framework AJAX, que permite una interacción fácil de archivos JSON entre el servidor y el cliente.
Comentarios
Publicar un comentario