Пример #1
0
        public async Task EjecutarTareaAsync(int idTarea, int idProcesoWorkflow)
        {
            var dbe  = new WorkflowNetEntities();
            var item = dbe.tareas_estado.Find(idTarea);
            await Task.Factory.StartNew(() =>
            {
                try
                {
                    string metodo     = item.metodo;
                    string rutaDll    = item.ruta_dll;
                    string parametros = item.parametros;
                    string stringType = item.nombre_libreria + "." + item.nombre_clase;

                    Assembly AssemblyClase;
                    object result = null;
                    if (!File.Exists(rutaDll))
                    {
                        throw new FileNotFoundException("el archivo dll no existe");
                    }

                    AssemblyClase = Assembly.LoadFile(rutaDll);

                    Type type = Type.GetType(stringType);
                    if (string.IsNullOrEmpty(type.ToString()))
                    {
                        throw new FileLoadException("la variable " + item.nombre_libreria + " de la clase " + item.nombre_clase + " es nula");
                    }

                    ConstructorInfo magicConstructor = type.GetConstructor(Type.EmptyTypes);
                    object magicClassObject          = magicConstructor.Invoke(new object[] { });

                    MethodInfo magicMethod = type.GetMethod(metodo);
                    if (magicMethod == null)
                    {
                        throw new InvalidOperationException("el metodo no existe");
                    }

                    ParameterInfo[] parameters = magicMethod.GetParameters();
                    /////////////////validacion para metodos con parametros
                    if (parameters.Length == 0)
                    {
                        result = magicMethod.Invoke(magicClassObject, null);
                    }
                    else
                    {
                        var parametersArray = new object[] { parametros.Split(';') };
                        result = magicMethod.Invoke(magicClassObject, parametersArray);
                    }
                    trackAsync.Add(Task.Run(() => TrackAsync("resultado", "EjecutarTareaAsync", result.ToString(), "idProcesoWorkflow:" + idProcesoWorkflow + ",estado:" + item.id_estado + ",metodo:" + metodo + ",stringType:" + stringType + ",rutaDll:" + rutaDll + ",parametros:" + parametros)));
                    return(result);
                }
                catch (Exception ex)
                {
                    trackAsync.Add(Task.Run(() => TrackAsync("excepcion", "EjecutarTareaAsync", ex.ToString(), "idProcesoWorkflow:" + idProcesoWorkflow + ",idTarea:" + idTarea)));
                    throw ex;
                }
            });
        }
Пример #2
0
 private async Task TrackAsync(string tipo, string metodo, string resultado, string descripcion)
 {
     await Task.Factory.StartNew(() =>
     {
         var dbe              = new WorkflowNetEntities();
         tracks track         = dbe.tracks.Add(new tracks());
         track.tipo_respuesta = tipo;
         track.metodo         = metodo;
         track.respuesta      = resultado;
         track.descripcion    = descripcion;
         track.fecha          = DateTime.Now;
         dbe.SaveChanges();
     });
 }
Пример #3
0
 public WorkflowControl()
 {
     db = new WorkflowNetEntities();
 }