예제 #1
0
        private void Validate(WorkflowStart startModel)
        {
            if (startModel == null)
            {
                throw new WorkflowServiceException("ابجکت نال ارسال شده است");
            }

            if (string.IsNullOrEmpty(startModel.Username))
            {
                throw new WorkflowServiceException($@"نام کاربری خالی است");
            }

            if (string.IsNullOrEmpty(startModel.Group))
            {
                throw new WorkflowServiceException($@"نام کاربری تایید کننده است");
            }

            if (string.IsNullOrEmpty(startModel.Id))
            {
                throw new WorkflowServiceException($@"کد رکورد  صفر است");
            }


            if (string.IsNullOrEmpty(startModel.ProcessDefinitionKey))
            {
                throw new WorkflowServiceException($@"ProcessDefinitionKey ارسال نشده است");
            }

            //todo: باید بررسی شود آیا این key وجورد دارد یا خیر
        }
        public async Task <Result <VoidResult> > SaveAndSendToWorkflow(Vacation model)
        {
            try
            {
                Save(model);
                var ws = new WorkflowStart
                {
                    Id                   = model.Id.ToString(),
                    Username             = User.Identity.Name,
                    UpperUsername        = _orgChartService.GetUpperUsername(User.Identity.Name),
                    ProcessDefinitionKey = "vacationRequest",
                };

                var res = await _workflowService.SendToWorkflow(ws);

                return(new Result <VoidResult>
                {
                    Type = res.Status == EngineResponseStatus.Success ? ResultType.Success : ResultType.Fail,
                    Message = res.Message,
                });
            }
            catch (Exception e)
            {
                return(new Result <VoidResult> {
                    Message = e.Message, Type = ResultType.Fail
                });
            }
        }
예제 #3
0
        public async Task <WorkflowStartResponse> SendToWorkflow(WorkflowStart startModel)
        {
            Validate(startModel);

            var engineClient = InjectorSingleTon.Inject <IWorkflowEngineClient>();

            return(await engineClient.SendToWorkflow(startModel));
        }
        public async Task <Result <VoidResult> > SaveAndSendToWorkflow(TModel model)
        {
            try
            {
                BeforeSave(model);
                Save(model);
                AfterSave(model);

                if (string.IsNullOrEmpty(FormName))
                {
                    throw new Exception("نام فارسی این گردش کار داده نشده است");
                }

                if (string.IsNullOrEmpty(thisControllerProcessDefinitionKey))
                {
                    throw new Exception("thisControllerProcessDefinitionKey این گردش کار داده نشده است");
                }

                if (string.IsNullOrEmpty(GetUsername()))
                {
                    throw new Exception("username این گردش کار داده نشده است");
                }


                Dictionary <string, string> dic = new Dictionary <string, string>();
                dic.Add("formName", FormName);


                var ws = new WorkflowStart
                {
                    Id                   = model.Id.ToString(),
                    Username             = GetUsername(),
                    Group                = GetGroup(),
                    ProcessDefinitionKey = thisControllerProcessDefinitionKey,
                    variables            = dic
                };

                _workflowService = InjectorSingleTon.Inject <IWorkflowService>();
                BeforeSendToWorkflow(ws, model);

                var res = await _workflowService.SendToWorkflow(ws);

                AfterSendToWorkflow(ws, model);

                return(new Result <VoidResult>
                {
                    Type = res.Status == EngineResponseStatus.Success ? ResultType.Success : ResultType.Fail,
                    Message = res.Message,
                });
            }
            catch (Exception e)
            {
                ErrorSendToWorkflow(e, model);
                return(new Result <VoidResult> {
                    Message = e.Message, Type = ResultType.Fail
                });
            }
        }
예제 #5
0
 public async Task <WorkflowResult> StartWorkflowAsync(WorkflowStart entity)
 {
     return(await ExecuteHelper(async() =>
     {
         _httpClient.SetEntityRest <WorkflowStart>();
         return await _httpClient.PostAsync(entity)
         .ResponseToModelAsync <WorkflowResult>();
     }, $"WebAPIClient.StartWorkflowAsync -> POST entities error"));
 }
예제 #6
0
        private void ValidateVariable(string id, WorkflowStart startModel)
        {
            if (!startModel.variables.ContainsKey(id))
            {
                throw new WorkflowServiceException($@" {id} ارسال نشده است");
            }

            if (startModel.variables[id] == null)
            {
                throw new WorkflowServiceException($@"{id} ارسال نشده است");
            }
        }
예제 #7
0
 public void Setup()
 {
     workflowService            = new WorkflowService();
     model                      = new WorkflowStart();
     model.ProcessDefinitionKey = "vacationRequest";
     model.Username             = "******";
     model.Id                   = new Random().Next().ToString();
     model.UpperUsername        = "******";
     model.variables.Add("vacationType", new Random().Next(1, 3).ToString());
     model.variables.Add("title", new Random().Next(1, 10).ToString());
     model.variables.Add("days", new Random().Next(1, 10).ToString());
     model.variables.Add("upper", "noori");
 }
        private Variable[] ToVariables
            (Dictionary <string, string> startModelVariables, WorkflowStart 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());
        }
 protected virtual void BeforeSendToWorkflow(WorkflowStart ws, TModel model)
 {
 }
 protected virtual void AfterSendToWorkflow(WorkflowStart ws, TModel model)
 {
 }
        public async Task <WorkflowStartResponse> SendToWorkflow(WorkflowStart startModel)
        {
            var rStart = new WorkflowStartResponse();

            using (_httpClient = new HttpClient())
            {
                var baseUrl = WorkflowSettingSingleTon.WorkflowSetting.BaseUrl;


                SetDefaultHeaders(_httpClient);


                Variable[] variables = ToVariables(startModel.variables, startModel);

                var startReq = new EngineActivateProcessDefinitionRequest
                {
                    ProcessDefinitionKey = startModel.ProcessDefinitionKey,
                    Variables            = variables,
                };


                var jsonInString = JsonConvert.SerializeObject(startReq);
                var url          = $@"{baseUrl}/runtime/process-instances";
                var resp         = await _httpClient.PostAsync(url,
                                                               new StringContent(jsonInString, Encoding.UTF8, "application/json"));


                var str = await resp.Content.ReadAsStringAsync();

                var activateResponse = JsonConvert.DeserializeObject <EngineActivateProcessDefinitionResponse>(str);

                if ((int)resp.StatusCode == 201)
                {
                    rStart.Status = EngineResponseStatus.Success;
                    rStart.Id     = activateResponse.Id;

                    if (activateResponse.Suspended)
                    {
                        throw new ActivitiEngineClientException("این گردش کار در وضعیت suspended قرار دارد");
                    }
                }
                else if ((int)resp.StatusCode == 400)
                {
                    rStart.Status  = EngineResponseStatus.Fail;
                    rStart.Message = "گردش کار با key داده شده یافت نشد یا variable های اشتباه داده شده یا :"
                                     + resp.ReasonPhrase;
                }
                else if (resp.StatusCode == HttpStatusCode.InternalServerError)
                {
                    // Try to read response, log error etc.
                    var errorxml = await resp.Content.ReadAsStringAsync();

                    throw new Exception(errorxml);
                }
                else
                {
                    throw new Exception("این کد رسپانس پیاده سازی نشده");
                }
            }

            return(await Task.FromResult(rStart));
        }
 protected override void BeforeSendToWorkflow(WorkflowStart ws, Vacation model)
 {
     ws.variables.Add("vacationType", ((int)model.Type).ToString());
 }