internal/functions/invoke-dequeuedatamanagement.ps1

function Invoke-DequeueDataManagement {
    param(
        [Parameter(Mandatory = $true, Position = 1)]
        [string]$JobId,
        [Parameter(Mandatory = $true, Position = 2)]
        [string]$FileName
        
    )

    $requestUrl = "$Script:D365FOURL/api/connector/dequeue/$JobId"

    Write-PSFMessage -Level Verbose -Message "Dequeue url : $requestUrl"

    $webRequest = New-WebRequest $requestUrl  "GET"
    if (Test-PSFFunctionInterrupt) {
        Stop-PSFFunction -Message "Stopping" -StepsUpward 1   
        return
    }
    $dequeueResponse = Get-IntegrationResponse -WebRequest $webRequest -ExpectedResult ([System.Net.HttpStatusCode]::Ok) -GetContent 
    
    if (Test-PSFFunctionInterrupt) {
        Stop-PSFFunction -Message "Stopping" -StepsUpward 1   
        return
    }
    $jsonResponse = ConvertFrom-Json  $dequeueResponse

    Write-PSFMessage -Level Verbose -Message "Response: $jsonResponse"
    #TODO The download failes sometimes, but why ?
    
    $retries = 4;

    while ($retries -gt 0 ) {


        Write-PSFMessage -Level Verbose -Message "DownloadLocation: $($jsonResponse.DownloadLocation)"

        $webRequest = New-WebRequest $jsonResponse.DownloadLocation "GET"
        if (Test-PSFFunctionInterrupt) {
            Stop-PSFFunction -Message "Stopping" -StepsUpward 1   
            return
        }

        $response = Save-IntegrationResult $webRequest $FileName
        if (Test-PSFFunctionInterrupt) {
            if ($response -like "*(500)*") { $retries = $retries - 1; }
            else {
                Write-PSFMessage -Level Critical "Error occured $response"
                Stop-PSFFunction -Message "Stopping" -StepsUpward 1 
                return
            }
            if ($retries -eq 0) {
                Write-PSFMessage -Level Critical "Retries exhausted for $JobId"
                Stop-PSFFunction -Message "Stopping" -StepsUpward 1                
                return
            }
        }
        else { $retries = 0}

    }

    $ackUrl = "$Script:D365FOURL/api/connector/ack/$jobId"
    Write-PSFMessage -Level Verbose -Message "Ack url : $ackUrl"

    $webRequest = New-WebRequest $ackUrl "POST" $dequeueResponse "JSON" "application/json"
    if (Test-PSFFunctionInterrupt) {
        Stop-PSFFunction -Message "Stopping" -StepsUpward 1   
        return
    }
    
    $ackResponse = Get-IntegrationResponse -WebRequest $webRequest -ExpectedResult ([System.Net.HttpStatusCode]::Ok) -GetContent
    if (Test-PSFFunctionInterrupt) {
        Stop-PSFFunction -Message "Stopping" -StepsUpward 1   
        return
    }
    Write-PSFMessage -Level Verbose -Message "Ack : $ackResponse"
    
}