diff --git a/src/AzureFunctions.PowerShell.Durable.SDK.psm1 b/src/AzureFunctions.PowerShell.Durable.SDK.psm1 index 4806a49..998ec8b 100644 --- a/src/AzureFunctions.PowerShell.Durable.SDK.psm1 +++ b/src/AzureFunctions.PowerShell.Durable.SDK.psm1 @@ -22,6 +22,16 @@ function GetDurableClientFromModulePrivateData { } } +function GetInvocationIdFromModulePrivateData { + $PrivateData = $PSCmdlet.MyInvocation.MyCommand.Module.PrivateData + if ($null -eq $PrivateData -or $null -eq $PrivateData['InvocationId']) { + return $null + } + else { + $PrivateData['InvocationId'] + } +} + function Get-DurableStatus { [CmdletBinding()] param( @@ -114,6 +124,8 @@ function Start-DurableOrchestration { } $Body = $InputObject | ConvertTo-Json -Compress -Depth 100 + + $InvocationId = GetInvocationIdFromModulePrivateData $null = Invoke-RestMethod -Uri $Uri -Method 'POST' -ContentType 'application/json' -Body $Body diff --git a/src/DurableEngine/Utilities/IPowerShellServices.cs b/src/DurableEngine/Utilities/IPowerShellServices.cs index de2bbd9..d0ea11d 100644 --- a/src/DurableEngine/Utilities/IPowerShellServices.cs +++ b/src/DurableEngine/Utilities/IPowerShellServices.cs @@ -13,6 +13,8 @@ public interface IPowerShellServices { void SetDurableClient(object durableClient); + void SetInvocationId(string invocationId); + void SetOrchestrationContext(OrchestrationContext orchestrationContext); void ClearOrchestrationContext(); diff --git a/src/DurableEngine/Utilities/PowerShellServices.cs b/src/DurableEngine/Utilities/PowerShellServices.cs index 28669ce..c8b9884 100644 --- a/src/DurableEngine/Utilities/PowerShellServices.cs +++ b/src/DurableEngine/Utilities/PowerShellServices.cs @@ -45,6 +45,15 @@ public void SetDurableClient(object durableClient) _hasSetOrchestrationContext = true; } + public void SetInvocationId(string invocationId) + { + _pwsh.AddCommand(SetFunctionInvocationContextCommand) + .AddParameter("InvocationId", invocationId) + .InvokeAndClearCommands(); + + _hasSetOrchestrationContext = true; + } + public void SetOrchestrationContext(OrchestrationContext orchestrationContext) { _pwsh.AddCommand(SetFunctionInvocationContextCommand) diff --git a/src/DurableSDK/Commands/Internals/SetFunctionInvocationContextCommand.cs b/src/DurableSDK/Commands/Internals/SetFunctionInvocationContextCommand.cs index 2e3bc7f..a4381ea 100644 --- a/src/DurableSDK/Commands/Internals/SetFunctionInvocationContextCommand.cs +++ b/src/DurableSDK/Commands/Internals/SetFunctionInvocationContextCommand.cs @@ -23,6 +23,7 @@ public class SetFunctionInvocationContextCommand : PSCmdlet { private const string ContextKey = "OrchestrationContext"; private const string DurableClientKey = "DurableClient"; + private const string InvocationIdKey = "InvocationId"; /// /// The orchestration context. @@ -36,6 +37,12 @@ public class SetFunctionInvocationContextCommand : PSCmdlet [Parameter(Mandatory = true, ParameterSetName = DurableClientKey)] public object DurableClient { get; set; } + /// + /// The function invocation ID. + /// + [Parameter(Mandatory = true, ParameterSetName = InvocationIdKey)] + public string InvocationId { get; set; } + /// /// Whether or not to clear the privateData of this module. /// @@ -70,11 +77,16 @@ protected override void EndProcessing() privateData[DurableClientKey] = DurableClient; break; + case InvocationIdKey: + privateData[InvocationIdKey] = InvocationId; + break; + default: if (Clear.IsPresent) { privateData.Remove(ContextKey); privateData.Remove(DurableClientKey); + privateData.Remove(InvocationIdKey); } break; }