public HttpResponseMessage <string> Run(string idOrAlias, [FromBody] List <ParameterValue> values, bool trace = false) { using (Profiler.Measure("WorkflowController.Run")) { MDL.EntityRef eid = GetId(idOrAlias); var workflow = MDL.Entity.Get <MDL.Workflow>(eid); var parameterValues = new Dictionary <string, object>( ); // { { "ResourceId", new EntityRef(resourceId) } }; using (new SecurityBypassContext()) { if (values != null) { foreach (ParameterValue kv in values) { EventLog.Application.WriteTrace("Running workflow {0} with {1}={2} ({3})", eid.Id, kv.Name, kv.Value, kv.TypeName); var argType = MDL.Entity.Get <MDL.ArgumentType>(kv.TypeName, MDL.ArgumentType.InternalDisplayName_Field); switch (argType.Alias) { case "core:objectArgument": throw new ApplicationException("Object arguments not implemented."); case "core:resourceListArgument": var ids = Jil.JSON.Deserialize <IEnumerable <long> >(kv.Value); parameterValues.Add(kv.Name, Factory.EntityRepository.Get <MDL.IEntity>(ids)); break; case "core:resourceArgument": parameterValues.Add(kv.Name, GetId(kv.Value).Entity); break; default: DatabaseType dbType = DatabaseType.ConvertFromDisplayName(argType.InternalDisplayName); parameterValues.Add(kv.Name, dbType.ConvertFromString(kv.Value)); break; } } } } var taskId = WorkflowRunner.Instance.RunWorkflowAsync(new WorkflowStartEvent(workflow) { Arguments = parameterValues, Trace = trace }); return(new HttpResponseMessage <string>(taskId)); } }