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 }); } }
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 }); } }
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")); }
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} ارسال نشده است"); } }
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()); }