private async void CheckNotClaimedAndNotDeligatedBefore(HttpClient httpClient, WorkflowContinueRequest continueRequest) { if (EngineTask == null) { EngineTask = await CheckTaskExists(httpClient, continueRequest); } if (EngineTask.DelegationState == "pending") { throw new AccessViolationException("این Task به یک نفر دیگر Deligate شده است " + EngineTask.Assignee); } if (EngineTask.Suspended) { throw new AccessViolationException("این Task به یک نفر دیگر Suspended شده است " + EngineTask.Assignee); } if (string.IsNullOrEmpty(EngineTask.Assignee)) { throw new AccessViolationException("باید قبل از انجام این Task ابتدا آن را در وضعیت انحصار قرار دهید"); } if (EngineTask.Assignee != continueRequest.Username) { throw new AccessViolationException( "این Task توسط یک نفر دیگر در وضعیت انحصار انجام قرار گرفته است یا نام کاربری اشتباه است " + EngineTask.Assignee); } }
private async Task <WorkflowContinueResponse> PostTaskAction(HttpClient httpClient, WorkflowContinueRequest continueRequest) { var baseUrl = WorkflowSettingSingleTon.WorkflowSetting.BaseUrl; var rContinue = new WorkflowContinueResponse(); Variable[] variables = ToVariables(continueRequest.variables, continueRequest); var actionReq = new EngineTaskActionRequest { Action = Enum.GetName(typeof(WorkflowContinueRequestStatus), continueRequest.RequestStatus).ToLower(), Assignee = continueRequest.Assignee, Variables = variables, }; var jsonInString = JsonConvert.SerializeObject(actionReq); var url = $@"{baseUrl}/runtime/tasks/{continueRequest.TaskId}"; var resp = await _httpClient.PostAsync(url, new StringContent(jsonInString, Encoding.UTF8, "application/json")); if ((int)resp.StatusCode == 200) { rContinue.Status = EngineResponseStatus.Success; } else if ((int)resp.StatusCode == 400) { rContinue.Status = EngineResponseStatus.Fail; var errorxml = await resp.Content.ReadAsStringAsync(); rContinue.Message = "مقادیر ارسالی اشتباه است یا assignee خالی است" + errorxml; } else if ((int)resp.StatusCode == 404) { rContinue.Status = EngineResponseStatus.Fail; var errorxml = await resp.Content.ReadAsStringAsync(); rContinue.Message = "Task مورد نظر یافت نشد" + errorxml; } else if ((int)resp.StatusCode == 409) { rContinue.Status = EngineResponseStatus.Fail; var errorxml = await resp.Content.ReadAsStringAsync(); rContinue.Message = "Task به دلیل کانفلیکت انجام نمیشود یا Task بطور همزمان آپدیت میشود یا این Task توسط کاربر دیگر در انحصار انجام قرار دارد" + errorxml; } else { throw new ActivitiEngineClientException("این کد رسپانس پیاده سازی نشده"); } return(rContinue); }
public void Setup3() { cont_wrongTaskId = new WorkflowContinueRequest(); cont_wrongTaskId.Username = "******"; cont_wrongTaskId.UpperUsername = "******"; cont_wrongTaskId.variables.Add("upper", "amin"); cont_wrongTaskId.TaskId = new Random().Next().ToString(); cont_wrongTaskId.RequestStatus = WorkflowContinueRequestStatus.Complete; }
public void Setup6() { cont_forClaim = new WorkflowContinueRequest(); cont_forClaim.Username = "******"; cont_forClaim.UpperUsername = "******"; cont_forClaim.variables.Add("upper", "amin"); cont_forClaim.TaskId = new Random().Next().ToString(); cont_forClaim.RequestStatus = WorkflowContinueRequestStatus.Claim; }
public void Setup7() { cont_notClaimedBefore = new WorkflowContinueRequest(); cont_notClaimedBefore.Username = "******"; cont_notClaimedBefore.UpperUsername = "******"; cont_notClaimedBefore.variables.Add("upper", "amin"); cont_notClaimedBefore.TaskId = new Random().Next().ToString(); cont_notClaimedBefore.RequestStatus = WorkflowContinueRequestStatus.Complete; }
public async Task <WorkflowContinueResponse> Continue(WorkflowContinueRequest continueRequest) { using (_httpClient = new HttpClient()) { SetDefaultHeaders(_httpClient); // چک میکند TaskId اشتباه نباشد await CheckTaskExists(_httpClient, continueRequest); // چک میکند که این Task قبلا انحصار نشده باشد // چک میکند نام کاربری اشتباه داده نشده باشد CheckNotClaimedAndNotDeligatedBefore(_httpClient, continueRequest); var rContinue = PostTaskAction(_httpClient, continueRequest); return(await rContinue); } }
private Variable[] ToVariables (Dictionary <string, string> startModelVariables, WorkflowContinueRequest rStart) { // startModelVariables.Add("id", rStart.Id.ToString()); startModelVariables.Add("username", rStart.Username.ToString()); startModelVariables.Add("upperUsername", rStart.UpperUsername.ToString()); List <Variable> vars = new List <Variable>(); foreach (var variable in startModelVariables) { vars.Add(new Variable { Name = variable.Key, Value = variable.Value }); } return(vars.ToArray()); }
private async Task <EngineTask> CheckTaskExists(HttpClient httpClient, WorkflowContinueRequest continueRequest) { var baseUrl = WorkflowSettingSingleTon.WorkflowSetting.BaseUrl; var url = $@"{baseUrl}/runtime/tasks/{continueRequest.TaskId}"; var resp = await httpClient.GetAsync(url); if ((int)resp.StatusCode == 200) { return(this.EngineTask = await ActivitiEngineClientHelper.ParseTask(resp)); } else if ((int)resp.StatusCode == 404) { throw new ActivitiEngineClientException("این Task با TaskId داده شده یافت نشد"); } else { var errorxml = await resp.Content.ReadAsStringAsync(); throw new Exception(errorxml); } }
private Variable[] ToVariables (Dictionary <string, string> startModelVariables, WorkflowContinueRequest rStart) { if (startModelVariables == null) { startModelVariables = new Dictionary <string, string>(); } // startModelVariables.Add("id", rStart.Id.ToString()); startModelVariables.Add("username", rStart.Username.ToString()); // startModelVariables.Add("upperUsername", rStart.UpperUsername.ToString()); List <Variable> vars = new List <Variable>(); foreach (var variable in startModelVariables) { vars.Add(new Variable { Name = variable.Key, Value = variable.Value, Scope = "local" }); /*if(variable.Key=="upperUsername"){ * * }*/ /*else * { * vars.Add(new Variable * { * Name = variable.Key, * Value = variable.Value, * Scope = "global" * }); * }*/ } return(vars.ToArray()); }