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);
        }
Esempio n. 3
0
 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;
 }
Esempio n. 4
0
 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;
 }
Esempio n. 5
0
 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());
        }