Public/func_Get-LogicAppStdWorkflowTrigger.ps1
|
function Get-LogicAppStdWorkflowTrigger { Param ( [Parameter(ValueFromPipeline = $true, Mandatory = $false, HelpMessage = "CDF Configuration hashtable")] [hashtable]$CdfConfig, [Parameter(Mandatory = $true, Position = 1, HelpMessage = "Name of workflow get triggers for.")] [string]$workflowName, [Parameter(Mandatory = $false, Position = 2, HelpMessage = "Name of trigger to get details for. If not provided a list of triggers will be returned.")] [string]$TriggerName = "", [Parameter(Mandatory = $false, HelpMessage = "Get the callback url of the trigger.")] [switch]$CallbackUrl, [Parameter(Mandatory = $false, HelpMessage = "Get trigger run history.")] [switch]$History, [Parameter(Mandatory = $false, HelpMessage = "Initiate manual run of the trigger.")] [switch]$Run, [Parameter(Mandatory = $false, HelpMessage = "Invoke the callback url (if available).")] [switch]$Invoke, [Parameter(Mandatory = $false, HelpMessage = "Optional body content for manual run and invoke. Defaults to 'POST'")] [string]$Method = 'POST', [Parameter(Mandatory = $false, HelpMessage = "Optional body content for manual run and invoke.")] [Object]$Body, [Parameter(Mandatory = $false, HelpMessage = "Optional content type of the body content.")] [string]$ContentType = 'application/json', [Parameter(Mandatory = $false, HelpMessage = "Indicates local development (Mgmt base url: http://7071)")] [switch]$Local ) if ($null -eq $Local -and ($null -eq $CdfConfig.Service -or $false -eq $CdfConfig.Service.IsDeployed )) { throw "Function requires a CDF Config with deployed runtime details for Platform, Application, Domain and Service" } if ($History -and !$TriggerName) { Write-Warning "Trigger name is required for -History, listing triggers." } if ($TriggerName -and $CallbackUrl) { $result = Invoke-LogicAppStdMgmtApi -CdfConfig $CdfConfig -Local:$Local -Method POST /workflows/$workflowName/triggers/$TriggerName/listCallbackUrl if ($result.StatusCode -lt 400) { if ($result.Content) { return ($result.Content | ConvertFrom-Json).value } else { return $result.value } } $result throw "Could not get callback url for [$workflowName/$TriggerName]. Did not return successful HTTP Status [$($result.Status)]" } if ($TriggerName -and $Invoke) { $result = Invoke-LogicAppStdMgmtApi -CdfConfig $CdfConfig -Local:$Local -Method POST /workflows/$workflowName/triggers/$TriggerName/listCallbackUrl if ($result.StatusCode -lt 400) { if ($result.Content) { $url = ($result.Content | ConvertFrom-Json).value $traceparent = New-CdfTraceParent $result = Invoke-RestMethod -Headers @{ traceparent = $traceparent } -SkipHttpErrorCheck -Method $Method -Uri $url -Body $Body -ContentType $ContentType if ($result.StatusCode -lt 400) { if ($result.Content) { $triggers = ConvertFrom-Json -InputObject $result.Content if ($triggers.GetType().Name -eq "PSCustomObject" -and $triggers.properties) { return $triggers.properties } if ($triggers.GetType().Name -eq "PSCustomObject" -and $triggers.error) { return $triggers.error } return $triggers } return $result } $result throw "Initiate callback url for [$TriggerName] was not successful HTTP Status [$($result.StatusCode)]" } } $result throw "Could not get callback url for [$workflowName/$TriggerName]. Did not return successful HTTP Status [$($result.Status)]" } # Trigger a manual run of the workflow if ($TriggerName -and $Run) { $result = Invoke-LogicAppStdMgmtApi -CdfConfig $CdfConfig -Local:$Local -Method "POST" /workflows/$workflowName/triggers/$TriggerName/run -Body $Body if ($result.StatusCode -lt 400) { if ($result.Content) { $triggers = ConvertFrom-Json -InputObject $result.Content if ($triggers.GetType().Name -eq "PSCustomObject" -and $triggers.properties) { return $triggers.properties } if ($triggers.GetType().Name -eq "PSCustomObject" -and $triggers.error) { return $triggers.error } return $triggers } return $result } throw "Initiate run for [$TriggerName] was not successful HTTP Status [$($result.StatusCode)]" } if ($TriggerName -and $History) { $result = Invoke-LogicAppStdMgmtApi -CdfConfig $CdfConfig -Local:$Local -Method "GET" /workflows/$workflowName/triggers/$TriggerName/histories if ($result.StatusCode -lt 400) { if ($result.Content) { $histories = ConvertFrom-Json -InputObject $result.Content if ($histories.GetType().Name -eq "PSCustomObject" -and $histories.value.properties.Length -eq 1) { Write-Verbose "Returning one object" return Format-LogicAppStdHistoryRecord $histories.value } if ($histories.GetType().Name -eq "PSCustomObject" -and $histories.error) { return $histories.error } Write-Verbose "Returning list of objects" $out = @() foreach ($entry in $histories.value) { $out += (Format-LogicAppStdHistoryRecord $entry) } [array]::Reverse($out) return $out } } } $result = Invoke-LogicAppStdMgmtApi -CdfConfig $CdfConfig -Local:$Local /workflows/$workflowName/triggers if ($result.StatusCode -lt 400) { if ($Local) { $triggers = $result } else { $triggers = ConvertFrom-Json -InputObject $result.Content } if ($triggers.GetType().Name -eq "PSCustomObject" -and $triggers.error) { return $triggers.error } $out = @() foreach ($entry in $triggers.value) { $out += Format-LogicAppStdTriggerRecord $entry } [array]::Reverse($out) return $out #return $triggers.value.properties } return $null } Function Format-LogicAppStdTriggerRecord { Param( [Parameter(Mandatory = $true, Position = 0, HelpMessage = "Logic App Standard trigger record.")] $Entry ) # Write-Host $Entry $culture = Get-Culture $dtFormat = $culture.DateTimeFormat.ShortDateTimePattern $createdTime = [datetime]$Entry.properties.createdTime $changedTime = [datetime]$Entry.properties.changedTime $props = [ordered] @{ Name = $Entry.name ProvisioningState = $Entry.properties.provisioningState State = $Entry.properties.state Created = $createdTime.ToString($dtFormat) Changed = $changedTime.ToString($dtFormat) WorkflowVersion = $Entry.properties.workflow.name } # Few properties - adding all as default $DefaultProps = @("Name", "State", "Created", "Changed") $DefaultDisplay = New-Object System.Management.Automation.PSPropertySet("DefaultDisplayPropertySet", [string[]]$DefaultProps) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($DefaultDisplay) $nvPair = [PSCustomObject] $props $nvPair | Add-Member MemberSet PSStandardMembers $PSStandardMembers return $nvPair } Function Format-LogicAppStdHistoryRecord { Param( [Parameter(Mandatory = $true, Position = 0, HelpMessage = "Logic App Standard history record.")] $Entry ) $culture = Get-Culture $dtFormat = $culture.DateTimeFormat.ShortDateTimePattern $startTime = [datetime]$Entry.properties.startTime $endTime = [datetime]$Entry.properties.endTime $duration = $endTime - $startTime if ($duration.TotalMinutes -ge 1) { $durationText = (([math]::Round($duration.TotalMinutes, 2)).ToString()) + ' min' } elseif ($duration.TotalSeconds -ge 1) { $durationText = (([math]::Round($duration.TotalSeconds, 2)).ToString()) + ' s' } else { $durationText = (([math]::Round($duration.TotalMilliseconds, 2)).ToString()) + ' ms' } $props = [ordered] @{ RunId = $Entry.name Status = $Entry.properties.status CorrelationId = $Entry.properties.correlation.clientTrackingId StartTime = $startTime.ToString($dtFormat) EndTime = $endTime.ToString($dtFormat) Duration = $durationText WorkflowVersion = $Entry.properties.workflow.name OutputsLinkUri = $entry.properties.outputsLink.uri } # Few properties - adding all as default $DefaultProps = @("RunId", "Status", "CorrelationId", "StartTime", "Duration") $DefaultDisplay = New-Object System.Management.Automation.PSPropertySet("DefaultDisplayPropertySet", [string[]]$DefaultProps) $PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($DefaultDisplay) $nvPair = [pscustomobject] $props $nvPair | Add-Member MemberSet PSStandardMembers $PSStandardMembers return $nvPair } |