public List <ProcessDefinition> LoadProcessDefinitions(bool onlyLatest)
        {
            var http = helper.HttpClient();
            HttpResponseMessage response = http.GetAsync("process-definition/?latestVersion=" + (onlyLatest ? "true" : "false")).Result;

            if (response.IsSuccessStatusCode)
            {
                var result = JsonConvert.DeserializeObject <IEnumerable <ProcessDefinition> >(response.Content.ReadAsStringAsync().Result);

                // Could be extracted into separate method call if you run a lot of process definitions and want to optimize performance
                foreach (ProcessDefinition pd in result)
                {
                    http = helper.HttpClient();
                    HttpResponseMessage response2 = http.GetAsync("process-definition/" + pd.Id + "/startForm").Result;
                    var startForm = JsonConvert.DeserializeObject <StartForm>(response2.Content.ReadAsStringAsync().Result);

                    pd.StartFormKey = startForm.Key;
                }
                return(new List <ProcessDefinition>(result));
            }
            else
            {
                return(new List <ProcessDefinition>());
            }
        }
        public string StartProcessInstance(string processDefinitionKey, string businessKey, Dictionary <string, object> variables)
        {
            var http = helper.HttpClient();

            var request = new CompleteRequest();

            request.Variables   = CamundaClientHelper.ConvertVariables(variables);
            request.BusinessKey = businessKey;



            var requestContent = new StringContent(JsonConvert.SerializeObject(request, new JsonSerializerSettings {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }), Encoding.UTF8, CamundaClientHelper.CONTENT_TYPE_JSON);
            var response = http.PostAsync("process-definition/key/" + processDefinitionKey + "/start", requestContent).Result;

            if (response.IsSuccessStatusCode)
            {
                var processInstance = JsonConvert.DeserializeObject <ProcessInstance>(response.Content.ReadAsStringAsync().Result);
                return(processInstance.Id);
            }
            else
            {
                var errorMsg = response.Content.ReadAsStringAsync();
                var error    = string.Concat(response.StatusCode.GetHashCode(), "-", errorMsg.Result);
                return(error);
                //throw new EngineException(response.ReasonPhrase);
            }
        }
        public IList <ExternalTask> FetchAndLockTasks(FetchAndLockRequest fetchAndLockRequest)
        {
            var http = helper.HttpClient("external-task/fetchAndLock");

            try
            {
                var requestContent = new StringContent(JsonConvert.SerializeObject(fetchAndLockRequest), Encoding.UTF8, CamundaClientHelper.CONTENT_TYPE_JSON);
                var response       = http.PostAsync("", requestContent).Result;
                if (response.IsSuccessStatusCode)
                {
                    var tasks = JsonConvert.DeserializeObject <IEnumerable <ExternalTask> >(response.Content.ReadAsStringAsync().Result);

                    http.Dispose();
                    return(new List <ExternalTask>(tasks));
                }
                else
                {
                    http.Dispose();
                    throw new EngineException("Could not fetch and lock tasks: " + response.ReasonPhrase);
                }
            }
            catch (Exception ex)
            {
                http.Dispose();
                Console.WriteLine(ex.Message);
                // TODO: Handle Exception, add back off
                return(new List <ExternalTask>());
            }
        }
Exemple #4
0
        public List <ProcessDefinition> LoadProcessDefinitions(bool onlyLatest)
        {
            var http = helper.HttpClient("process-definition/");
            HttpResponseMessage response = http.GetAsync("?latestVersion=" + (onlyLatest ? "true" : "false")).Result;

            if (response.IsSuccessStatusCode)
            {
                var result = response.Content.ReadAsAsync <IEnumerable <ProcessDefinition> >().Result;
                http.Dispose();

                // Could be extracted into seperate method call if you run a lot of process definitions and want to optimize performance
                foreach (ProcessDefinition pd in result)
                {
                    http = helper.HttpClient("process-definition/" + pd.id + "/startForm");
                    HttpResponseMessage response2 = http.GetAsync("").Result;
                    var startForm = response2.Content.ReadAsAsync <StartFormDto>().Result;
                    pd.startFormKey = startForm.key;
                    http.Dispose();
                }
                return(new List <ProcessDefinition>(result));
            }
            else
            {
                http.Dispose();
                return(new List <ProcessDefinition>());
            }
        }
        public string StartProcessInstance(string processDefinitionKey, string businessKey, Dictionary <string, object> variables)
        {
            var http = helper.HttpClient("process-definition/key/" + processDefinitionKey + "/start");

            var request = new CompleteRequest();

            request.Variables   = CamundaClientHelper.ConvertVariables(variables);
            request.BusinessKey = businessKey;

            var requestContent = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, CamundaClientHelper.CONTENT_TYPE_JSON);
            var response       = http.PostAsync("", requestContent).Result;

            if (response.IsSuccessStatusCode)
            {
                var processInstance = JsonConvert.DeserializeObject <ProcessInstance>(response.Content.ReadAsStringAsync().Result);

                http.Dispose();
                return(processInstance.Id);
            }
            else
            {
                //var errorMsg = response.Content.ReadAsStringAsync();
                http.Dispose();
                throw new EngineException(response.ReasonPhrase);
            }
        }
Exemple #6
0
        public string StartProcessInstance(string processDefinitionKey, string businessKey, Dictionary <string, object> variables, IDictionary <string, Action <IDictionary <string, object> > > events)
        {
            var http = helper.HttpClient();

            var request = new CompleteRequest();

            request.Variables   = CamundaClientHelper.ConvertVariables(variables);
            request.BusinessKey = businessKey;

            var requestContent = new StringContent(JsonConvert.SerializeObject(request, new JsonSerializerSettings {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }), Encoding.UTF8, CamundaClientHelper.CONTENT_TYPE_JSON);
            var response = http.PostAsync("process-definition/key/" + processDefinitionKey + "/start", requestContent).Result;

            if (response.IsSuccessStatusCode)
            {
                var processInstance = JsonConvert.DeserializeObject <Dto.ProcessInstance>(response.Content.ReadAsStringAsync().Result);

                this._userTasks.Add(processInstance.Id, null);

                if (events != null)
                {
                    foreach (var evt in events)
                    {
                        var externalTask = GetExternalTaskByTopicName(evt.Key);
                        if (externalTask != null)
                        {
                            if (externalTask.Events.ContainsKey(processInstance.Id))
                            {
                                var list_evt = externalTask.Events[processInstance.Id] ?? new List <Action <IDictionary <string, object> > >();
                                list_evt.Add(evt.Value);
                                externalTask.Events[processInstance.Id] = list_evt;
                            }
                            else
                            {
                                externalTask.Events.Add(processInstance.Id, new List <Action <IDictionary <string, object> > >()
                                {
                                    evt.Value
                                });
                            }
                        }
                    }
                }

                return(processInstance.Id);
            }
            else
            {
                //var errorMsg = response.Content.ReadAsStringAsync();
                throw new EngineException(response.ReasonPhrase);
            }
        }
        public IList <HumanTask> LoadTasks(IDictionary <string, string> queryParameters)
        {
            var queryString = string.Join("&", queryParameters.Select(x => x.Key + "=" + x.Value));
            var http        = helper.HttpClient();

            var response = http.GetAsync("task/?" + queryString).Result;

            if (response.IsSuccessStatusCode)
            {
                // Successful - parse the response body
                var tasks = JsonConvert.DeserializeObject <IEnumerable <HumanTask> >(response.Content.ReadAsStringAsync().Result);
                return(new List <HumanTask>(tasks));
            }
            else
            {
                //Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
                throw new EngineException("Could not load tasks: " + response.ReasonPhrase);
            }
        }
Exemple #8
0
        public IList <HumanTask> LoadTasks()
        {
            HttpClient http = helper.HttpClient("task/");

            HttpResponseMessage response = http.GetAsync("").Result;

            if (response.IsSuccessStatusCode)
            {
                // Successful - parse the response body
                var tasks = response.Content.ReadAsAsync <IEnumerable <HumanTask> >().Result;
                http.Dispose();
                return(new List <HumanTask>(tasks));
            }
            else
            {
                //Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
                http.Dispose();
                return(new List <HumanTask>());
            }
        }
        public string StartProcessInstance(String processDefinitionKey, Dictionary <string, object> variables)
        {
            HttpClient http = helper.HttpClient("process-definition/key/" + processDefinitionKey + "/start");

            StartProcessInstanceRequest request = new StartProcessInstanceRequest();

            request.variables = helper.convertVariables(variables);

            HttpResponseMessage response = http.PostAsJsonAsync("", request).Result;

            if (response.IsSuccessStatusCode)
            {
                var processInstance = response.Content.ReadAsAsync <ProcessInstance>().Result;
                http.Dispose();
                return(processInstance.id);
            }
            else
            {
                var errorMsg = response.Content.ReadAsStringAsync();
                http.Dispose();
                throw new EngineException(response.ReasonPhrase);
            }
        }
        public IEnumerable <Dto.ProcessInstance> GetInstances()
        {
            var http = helper.HttpClient();

            var response = http.GetAsync(API).Result;

            if (response.IsSuccessStatusCode)
            {
                var result = JsonConvert.DeserializeObject <IEnumerable <Dto.ProcessInstance> >(response.Content.ReadAsStringAsync().Result);
                return(result);
            }
            else
            {
                throw new EngineException("Could not get ProcessInstances: " + response.ReasonPhrase);
            }
        }