Пример #1
0
        protected override BaseCaseEltInstance InternalBuild()
        {
            var result = new HumanTaskElementInstance
            {
                PerformerRef         = PerformerRef,
                ManualActivationRule = ManualActivationRule,
                RepetitionRule       = RepetitionRule
            };

            SeedCasePlanItem(result);
            return(result);
        }
        protected override BaseCaseEltInstance InternalBuild()
        {
            var result = new HumanTaskElementInstance
            {
                PerformerRef         = PerformerRef,
                ManualActivationRule = ManualActivationRule,
                RepetitionRule       = RepetitionRule,
                Implemention         = Implementation,
                InputParameters      = InputParameters,
                NbOccurrence         = Version
            };

            SeedCasePlanItem(result);
            return(result);
        }
Пример #3
0
        public async Task When_Execute_Human_Task()
        {
            var humanTaskInstanceId = Guid.NewGuid().ToString();
            var instance            = CasePlanInstanceBuilder.New("1", "firstCase")
                                      .AddHumanTask("2", "humanTask", null, (_) =>
            {
            })
                                      .Build();
            var jobServer = FakeCaseJobServer.New();

            try
            {
                jobServer.HttpMessageHandler.Protected()
                .As <IHttpMessageHandler>()
                .Setup(x => x.SendAsync(It.IsAny <HttpRequestMessage>(), It.IsAny <CancellationToken>()))
                .ReturnsAsync(new HttpResponseMessage
                {
                    Content = new StringContent("{ 'id' : '{" + humanTaskInstanceId + "}' }")
                });
                await jobServer.RegisterCasePlanInstance(instance, CancellationToken.None);

                jobServer.Start();
                await jobServer.EnqueueCasePlanInstance("1", CancellationToken.None);

                await jobServer.PublishExternalEvt("complete", "1", HumanTaskElementInstance.BuildId("1", "2", 0), new Dictionary <string, string> {
                    { "firstname", "firstname" }
                }, CancellationToken.None);

                var casePlanInstance = await jobServer.MonitorCasePlanInstance("1", (c) =>
                {
                    if (c == null)
                    {
                        return(false);
                    }

                    return(c.State == CaseStates.Completed);
                }, CancellationToken.None);

                var firstHumanTask = casePlanInstance.StageContent.Children.ElementAt(0) as HumanTaskElementInstance;
                Assert.Equal(CaseStates.Completed, casePlanInstance.State);
                Assert.Equal(TaskStageStates.Completed, firstHumanTask.State);
            }
            finally
            {
                jobServer.Stop();
            }
        }
Пример #4
0
        public async Task When_Execute_Human_Task()
        {
            var instance = CasePlanInstanceBuilder.New("1", "firstCase")
                           .AddHumanTask("2", "humanTask", null, (_) =>
            {
            })
                           .Build();
            var jobServer = FakeCaseJobServer.New();

            try
            {
                await jobServer.RegisterCasePlanInstance(instance, CancellationToken.None);

                jobServer.Start();
                await jobServer.EnqueueCasePlanInstance("1", CancellationToken.None);

                await jobServer.PublishExternalEvt("complete", "1", HumanTaskElementInstance.BuildId("1", "2", 0), CancellationToken.None);

                var casePlanInstance = await jobServer.MonitorCasePlanInstance("1", (c) =>
                {
                    if (c == null)
                    {
                        return(false);
                    }

                    return(c.State == CaseStates.Completed);
                }, CancellationToken.None);

                var firstHumanTask = casePlanInstance.StageContent.Children.ElementAt(0) as HumanTaskElementInstance;
                Assert.Equal(CaseStates.Completed, casePlanInstance.State);
                Assert.Equal(TaskStageStates.Completed, firstHumanTask.State);
            }
            finally
            {
                jobServer.Stop();
            }
        }
Пример #5
0
 protected override string BuildId()
 {
     return(HumanTaskElementInstance.BuildId(CasePlanInstanceId, EltId, 0));
 }
Пример #6
0
        public async Task <string> Create(CMMNExecutionContext executionContext, HumanTaskElementInstance humanTaskElt, CancellationToken token)
        {
            using (var httpClient = _httpClientFactory.Build())
            {
                var operationParameters = new JObject
                {
                    { "nameIdentifier", executionContext.Instance.NameIdentifier }
                };

                if (humanTaskElt.InputParameters != null && humanTaskElt.InputParameters.Any())
                {
                    foreach (var inputParameter in humanTaskElt.InputParameters)
                    {
                        if (string.IsNullOrWhiteSpace(inputParameter.Value))
                        {
                            continue;
                        }

                        var value = ExpressionParser.GetString(inputParameter.Value, executionContext.Instance.ExecutionContext);
                        operationParameters.Add(inputParameter.Key, value);
                    }
                }

                var tokenResponse = await httpClient.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
                {
                    Address      = _options.OAuthTokenEndpoint,
                    ClientId     = _options.ClientId,
                    ClientSecret = _options.ClientSecret,
                    Scope        = "create_humantaskinstance"
                }, token);

                if (tokenResponse.IsError)
                {
                    throw new CMMNProcessorException(tokenResponse.Error);
                }

                var jArr = new JArray();
                var link = _options.CallbackUrl.Replace("{id}", executionContext.Instance.AggregateId);
                link = link.Replace("{eltId}", humanTaskElt.Id);
                jArr.Add(link);
                var obj = new JObject
                {
                    { "humanTaskName", humanTaskElt.FormId },
                    { "operationParameters", operationParameters },
                    { "callbackUrls", jArr }
                };
                var content = new StringContent(obj.ToString(), Encoding.UTF8, "application/json");
                var request = new HttpRequestMessage
                {
                    Method     = HttpMethod.Post,
                    Content    = content,
                    RequestUri = new Uri($"{_options.WSHumanTaskAPI}/humantaskinstances")
                };
                request.Headers.Add("Authorization", $"Bearer {tokenResponse.AccessToken}");
                var httpResult = await httpClient.SendAsync(request, token);

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

                var o = JObject.Parse(str);
                var humanTaskInstancId = o["id"].ToString();
                return(humanTaskInstancId);
            }
        }