Public/New-ConfluenceContentJiraIssue.ps1
|
function New-ConfluenceContentJiraIssue { <# .SYNOPSIS Creates a Confluence Jira macro for one issue or a JQL query. .DESCRIPTION New-ConfluenceContentJiraIssue returns the storage-format markup for the Confluence "jira" macro. With -IssueKey it shows a single issue (key, summary and status); with -JqlQuery it shows a table of the issues the query returns. On Confluence Cloud connected to one Jira site the macro works without -Server and -ServerId. When several Jira sites are linked, pass the application link name (-Server) and ID (-ServerId); the easiest way to find them is to insert the macro once in the editor and look at the page's storage format. .PARAMETER IssueKey The key of the issue, for example OPS-123. .PARAMETER JqlQuery A JQL query, for example 'project = OPS AND status = Open'. .PARAMETER Columns With -JqlQuery, the columns to show, for example key, summary, status, assignee. .PARAMETER MaximumIssues With -JqlQuery, the maximum number of issues to show. Default 20. .PARAMETER ShowSummary With -IssueKey, whether to show the issue summary next to the key. Default $true. .PARAMETER Server The name of the Jira application link. .PARAMETER ServerId The ID of the Jira application link. .EXAMPLE New-ConfluenceContentJiraIssue -IssueKey OPS-123 Returns a macro that shows issue OPS-123. .EXAMPLE New-ConfluenceContentJiraIssue -JqlQuery 'project = OPS AND resolution = Unresolved' -Columns key, summary, status Returns a macro that shows the open OPS issues in a table. .OUTPUTS System.String #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '', Justification = 'Only builds a storage-format string in memory; nothing outside the session is changed.')] [CmdletBinding(DefaultParameterSetName = 'Issue')] [OutputType([string])] param ( [Parameter(Mandatory, ParameterSetName = 'Issue', HelpMessage = 'The issue key, for example OPS-123.')] [ValidatePattern('^[A-Za-z][A-Za-z0-9_]*-\d+$')] [string]$IssueKey, [Parameter(Mandatory, ParameterSetName = 'Jql', HelpMessage = 'The JQL query.')] [ValidateNotNullOrEmpty()] [string]$JqlQuery, [Parameter(ParameterSetName = 'Jql', HelpMessage = 'The columns to show.')] [string[]]$Columns, [Parameter(ParameterSetName = 'Jql', HelpMessage = 'The maximum number of issues to show.')] [ValidateRange(1, 1000)] [int]$MaximumIssues = 20, [Parameter(ParameterSetName = 'Issue', HelpMessage = 'Show the issue summary.')] [bool]$ShowSummary = $true, [Parameter(HelpMessage = 'The Jira application link name.')] [string]$Server, [Parameter(HelpMessage = 'The Jira application link ID.')] [string]$ServerId ) $TelemetryArgs = @{ ModuleName = $MyInvocation.MyCommand.Module.Name ModuleVersion = [string]$MyInvocation.MyCommand.Module.Version CommandName = $MyInvocation.MyCommand.Name ExecutionID = [guid]::NewGuid().ToString() } Invoke-TelemetryCollection @TelemetryArgs -Stage Start -ClearTimer $telemetryFailed = $false try { $parameters = New-Object -TypeName System.Collections.Generic.List[string] if ($PSCmdlet.ParameterSetName -eq 'Issue') { $parameters.Add('<ac:parameter ac:name="key">' + (ConvertTo-ConfluenceXmlText -Text $IssueKey.ToUpperInvariant()) + '</ac:parameter>') $showSummaryValue = if ($ShowSummary) { 'true' } else { 'false' } $parameters.Add("<ac:parameter ac:name=`"showSummary`">$showSummaryValue</ac:parameter>") } else { $parameters.Add('<ac:parameter ac:name="jqlQuery">' + (ConvertTo-ConfluenceXmlText -Text $JqlQuery) + '</ac:parameter>') if ($Columns) { $parameters.Add('<ac:parameter ac:name="columns">' + (ConvertTo-ConfluenceXmlText -Text ($Columns -join ',')) + '</ac:parameter>') } $parameters.Add("<ac:parameter ac:name=`"maximumIssues`">$MaximumIssues</ac:parameter>") } if ($Server) { $parameters.Add('<ac:parameter ac:name="server">' + (ConvertTo-ConfluenceXmlText -Text $Server) + '</ac:parameter>') } if ($ServerId) { $parameters.Add('<ac:parameter ac:name="serverId">' + (ConvertTo-ConfluenceXmlText -Text $ServerId) + '</ac:parameter>') } return ('<ac:structured-macro ac:name="jira">' + ($parameters -join '') + '</ac:structured-macro>') } catch { $telemetryFailed = $true Invoke-TelemetryCollection @TelemetryArgs -Stage End -Failed $true -Exception $_ throw } finally { if (-not $telemetryFailed) { Invoke-TelemetryCollection @TelemetryArgs -Stage End } } } |