Ejemplo n.º 1
0
        private static void EjecutarTrabajo(EntornoDeTrabajo entorno)
        {
            try
            {
                var metodo = GestorDeTrabajosSometido.ValidarExisteTrabajoSometido(entorno.TrabajoSometido);
                using (var contextoDelProceso = ContextoSe.ObtenerContexto(entorno.ContextoDelEntorno))
                {
                    entorno.contextoDelProceso = contextoDelProceso;
                    metodo.Invoke(null, new object[] { entorno });
                }
                entorno.TrabajoDeUsuario.Estado = !entorno.HayErrores
                    ? TrabajoSometido.ToDtm(enumEstadosDeUnTrabajo.Terminado)
                    : TrabajoSometido.ToDtm(enumEstadosDeUnTrabajo.conErrores);
                entorno.ComunicarFinalizacion();
            }
            catch (Exception e)
            {
                entorno.TrabajoDeUsuario.Estado = TrabajoSometido.ToDtm(enumEstadosDeUnTrabajo.Error);
                if (e.InnerException != null)
                {
                    entorno.ComunicarError(e.InnerException);
                    throw e.InnerException;
                }

                entorno.ComunicarError(e);
                throw;
            }
            finally
            {
                entorno.TrabajoDeUsuario.Terminado = DateTime.Now;
                var parametros = new ParametrosDeNegocio(enumTipoOperacion.Modificar);
                parametros.Parametros[EnumParametro.accion] = EnumParametroTu.terminando;
                entorno.GestorDelEntorno.PersistirRegistro(entorno.TrabajoDeUsuario, parametros);
                entorno.QuitarSemaforo($"Trabajo finalizado: {(entorno.TrabajoDeUsuario.Estado == TrabajoSometido.ToDtm(enumEstadosDeUnTrabajo.Terminado) ? "sin errores" : "con errores")}");
            }
        }
Ejemplo n.º 2
0
        public static void Iniciar(ContextoSe contextoDelEntorno, int idTrabajoDeUsuario, bool iniciadoPorLaCola)
        {
            var gestorDelEntorno    = Gestor(contextoDelEntorno);
            var trabajoDeUsuarioDtm = gestorDelEntorno.LeerRegistroPorId(idTrabajoDeUsuario, true, true, true, aplicarJoin: false);
            var entorno             = new EntornoDeTrabajo(gestorDelEntorno, trabajoDeUsuarioDtm);

            entorno.ProcesoIniciadoPorLaCola = iniciadoPorLaCola;

            entorno.PonerSemaforo();
            try
            {
                trabajoDeUsuarioDtm.Iniciado = DateTime.Now;
                trabajoDeUsuarioDtm.Estado   = TrabajoSometido.ToDtm(enumEstadosDeUnTrabajo.iniciado);
                trabajoDeUsuarioDtm          = entorno.GestorDelEntorno.PersistirRegistro(trabajoDeUsuarioDtm, new ParametrosDeNegocio(enumTipoOperacion.Modificar));
            }
            catch (Exception e)
            {
                entorno.AnotarError(e);
                entorno.QuitarSemaforo("Iniciación cancelada");
                throw;
            }

            EjecutarTrabajo(entorno);
        }