/// <summary> /// Creates the workflow. /// </summary> /// <param name="id">Id to use for this workflow.</param> /// <param name="externalServiceUrl">External URL to invoke.</param> /// <param name="serviceIdentityTokenSource">The token source to use when authenticating to external services.</param> /// <param name="serializerSettingsProvider">The serialization settings provider.</param> /// <param name="externalServiceActionLogger">The logger for <see cref="InvokeExternalServiceAction"/>s.</param> /// <returns>The workflow definition.</returns> public static Workflow Create( string id, string externalServiceUrl, IServiceIdentityAccessTokenSource serviceIdentityTokenSource, IJsonSerializerSettingsProvider serializerSettingsProvider, ILogger <InvokeExternalServiceAction> externalServiceActionLogger) { var workflow = new Workflow( id, "External Action workflow", "Simple workflow using an external action"); WorkflowState waitingToRun = workflow.CreateState(displayName: "Waiting to run"); WorkflowState done = workflow.CreateState(displayName: "Done"); workflow.SetInitialState(waitingToRun); WorkflowTransition transition = waitingToRun.CreateTransition(done); var action = new InvokeExternalServiceAction( serviceIdentityTokenSource, serializerSettingsProvider, externalServiceActionLogger) { Id = Guid.NewGuid().ToString(), AuthenticateWithManagedServiceIdentity = true, MsiAuthenticationResource = "foobar", ExternalUrl = externalServiceUrl, ContextItemsToInclude = new[] { "include1", "include2" }, }; transition.Actions.Add(action); return(workflow); }
public async Task GivenGivenIHaveCreatedAndPersistedAWorkflowContainingAnExternalActionWithIdAsync(string workflowId) { ExternalServiceBindings.ExternalService externalService = ExternalServiceBindings.GetService(this.scenarioContext); IServiceProvider container = ContainerBindings.GetServiceProvider(this.featureContext); IServiceIdentityAccessTokenSource serviceIdentityTokenSource = container.GetRequiredService <IServiceIdentityAccessTokenSource>(); IJsonSerializerSettingsProvider serializerSettingsProvider = container.GetRequiredService <IJsonSerializerSettingsProvider>(); ILogger <InvokeExternalServiceAction> logger = container.GetRequiredService <ILogger <InvokeExternalServiceAction> >(); Workflow workflow = ExternalActionWorkflowFactory.Create( workflowId, externalService.TestUrl.ToString(), serviceIdentityTokenSource, serializerSettingsProvider, logger); this.action = workflow.GetInitialState().Transitions.Single().Actions.OfType <InvokeExternalServiceAction>().Single(); ITenantedWorkflowStoreFactory storeFactory = container.GetRequiredService <ITenantedWorkflowStoreFactory>(); ITenantProvider tenantProvider = container.GetRequiredService <ITenantProvider>(); IWorkflowStore store = await storeFactory.GetWorkflowStoreForTenantAsync(tenantProvider.Root).ConfigureAwait(false); await WorkflowRetryHelper.ExecuteWithStandardTestRetryRulesAsync(async() => { try { Workflow oldWorkflow = await store.GetWorkflowAsync(workflowId).ConfigureAwait(false); workflow.ETag = oldWorkflow.ETag; } catch (WorkflowNotFoundException) { // Don't care if there is no old workflow. } await store.UpsertWorkflowAsync(workflow).ConfigureAwait(false); }).ConfigureAwait(false); }