Public/JSM/Request/New-AtlassianCloudJsmRequest.ps1

function New-AtlassianCloudJsmRequest{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, Position=0)]
        [ValidateNotNullOrEmpty()]
        [string]$AtlassianOrgName,

        [Parameter(Mandatory, Position=1)]
        [ValidateNotNullOrEmpty()]
        [string]$ServiceDeskId,

        [Parameter(Mandatory, Position=2)]
        [ValidateNotNullOrEmpty()]
        [string]$RequestTypeId,

        [Parameter(Mandatory = $false, Position=3)]
        [psobject]$Fields,

        [Parameter(Mandatory = $false, Position=4)]
        [psobject]$Form,

        [Parameter(Mandatory = $false, Position=5)]
        [string]$RaiseOnBehalfOf,
        
        [Parameter(Mandatory = $false, Position=6)]
        [string]$RequestParticipants,

        [Parameter(Mandatory = $false, Position=7)]
        [string]$Channel,

        [Parameter(Mandatory, Position=8)]
        [ValidateNotNullOrEmpty()]
        [string]$Pat,

        [Parameter()]
        [switch]$AdfRequest
    )

    $data = @{
          isAdfRequest = $AdfRequest.IsPresent
          requestTypeId = $RequestTypeId
          serviceDeskId = $ServiceDeskId
    }

    if ($Fields) {
        $data += @{
            requestFieldValues = $Fields
        }
    }

    if ($Form) {
        $data += @{
            form = $Form
        }
    }

    if ($RaiseOnBehalfOf) {
        $data += @{
            raiseOnBehalfOf = $RaiseOnBehalfOf
        }
    }

    if ($RequestParticipants) {
        $data += @{
            requestParticipants = @()
        }
        foreach ($requestParticipant in $RequestParticipants) {
            $data.requestParticipants += $requestParticipant
        }
    }

    if ($Channel) {
        $data += @{
            channel = $Channel
        }
    }

    return Invoke-AtlassianCloudJsmMethod -AtlassianOrgName $AtlassianOrgName -Endpoint 'request' -Data $data -Pat $Pat -Experimental:($Channel.Length -gt 0) -Verbose:($Verbose.IsPresent)
}