diff --git a/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs b/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs index ae66ee8..ad2f9c7 100644 --- a/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs +++ b/src/Camunda.Worker/CamundaWorkerBuilderExtensions.cs @@ -36,7 +36,7 @@ private static HandlerMetadata CollectMetadataFromAttributes(Type handlerType) return new HandlerMetadata(topicsAttribute.TopicNames, topicsAttribute.LockDuration) { LocalVariables = variablesAttribute?.LocalVariables ?? false, - Variables = variablesAttribute?.Variables, + Variables = variablesAttribute?.AllVariables ?? false ? null : variablesAttribute?.Variables, IncludeExtensionProperties = topicsAttribute.IncludeExtensionProperties }; } diff --git a/src/Camunda.Worker/Execution/HandlerMetadata.cs b/src/Camunda.Worker/Execution/HandlerMetadata.cs index b19b88a..dd96692 100644 --- a/src/Camunda.Worker/Execution/HandlerMetadata.cs +++ b/src/Camunda.Worker/Execution/HandlerMetadata.cs @@ -21,7 +21,7 @@ public HandlerMetadata(IReadOnlyList topicNames, int lockDuration = Cons /// Determines whether custom extension properties defined in the BPMN activity of the external task (e.g. via the Extensions tab in the Camunda modeler) should be included in the response. Default: false. public bool IncludeExtensionProperties { get; set; } - + public IReadOnlyList? Variables { get; set; } public IReadOnlyList? ProcessDefinitionIds { get; set; } diff --git a/src/Camunda.Worker/HandlerVariablesAttribute.cs b/src/Camunda.Worker/HandlerVariablesAttribute.cs index 824d6e5..264297a 100644 --- a/src/Camunda.Worker/HandlerVariablesAttribute.cs +++ b/src/Camunda.Worker/HandlerVariablesAttribute.cs @@ -14,5 +14,10 @@ public HandlerVariablesAttribute(params string[] variables) public IReadOnlyList Variables { get; } public bool LocalVariables { get; set; } + + /// + ///Setting this to true will retrieve all the process variables from Camunda without the need of knowing their names + /// + public bool AllVariables { get; set; } } } diff --git a/test/Camunda.Worker.Tests/CamundaWorkerBuilderExtensionsTest.cs b/test/Camunda.Worker.Tests/CamundaWorkerBuilderExtensionsTest.cs index 33f256b..e1bdc32 100644 --- a/test/Camunda.Worker.Tests/CamundaWorkerBuilderExtensionsTest.cs +++ b/test/Camunda.Worker.Tests/CamundaWorkerBuilderExtensionsTest.cs @@ -90,6 +90,45 @@ public void TestAddHandlerWithoutTopic() Assert.Throws(() => _builderMock.Object.AddHandler()); } + [Fact] + public void TestAddHandlerWithAllVariables() + { + // Arrange + var savedMetadata = new List(); + + _builderMock + .Setup(builder => builder.AddHandler(It.IsAny(), It.IsAny())) + .Callback((ExternalTaskDelegate _, HandlerMetadata metadata) => savedMetadata.Add(metadata)) + .Returns(_builderMock.Object); + + // Act + _builderMock.Object.AddHandler(); + + // Assert + _builderMock.Verify( + builder => builder.AddHandler(It.IsAny(), It.IsAny()), + Times.Once()); + Assert.Contains(_services, d => d.Lifetime == ServiceLifetime.Transient && + d.ServiceType == typeof(HandlerWithAllVariables)); + + var metadata = Assert.Single(savedMetadata); + Assert.NotNull(metadata); + Assert.Null(metadata.Variables); + } + + [HandlerTopics("testTopic")] + [HandlerVariables(AllVariables = true)] + private class HandlerWithAllVariables : IExternalTaskHandler + { + public Task HandleAsync(ExternalTask externalTask, CancellationToken cancellationToken) + { + return Task.FromResult(new CompleteResult + { + Variables = externalTask.Variables + }); + } + } + [HandlerTopics("testTopic_1", "testTopic_1")] [HandlerVariables("testVariable", LocalVariables = true)] private class HandlerWithTopics : IExternalTaskHandler