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")}"); } }
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); }