functions/new-d365rest.ps1

<#
.SYNOPSIS
User for creating new entries with odata integration
 
.DESCRIPTION
Long description
 
.PARAMETER Configuration
Parameter contains either a string containing json or a filename containing the configuration used for calling D365.
use Get-ODataTemplate to get format
 
.PARAMETER Entity
Name of the Entity ex. data/CurrencyISOCodes.
 
.PARAMETER Payload
The payload is either a string containing json or a path to a file
 
.PARAMETER PayloadFiles
The Array must be like
$arr = 'Entity','FilePathToJson','Entity','FilePathToJson' and so on
 
.EXAMPLE
$payload = Get-content C:\Integration\DefGroup1.json | out-string
 
New-ODataEntity "c:\Integration\odataPost.json" -Entity "data/DataManagementDefinitionGroups" -payload $payload -payloadType "JSON" -verbose
 
OR
 
New-ODataEntity "c:\Integration\odataPost.json" -Entity "data/DataManagementDefinitionGroups" -payload C:\Integration\DefGroup1.json -payloadType "File" -verbose
 
OR
 
$arr = "data/DataManagementDefinitionGroups","C:\Integration\DefGroup1.json","data/DataManagementDefinitionGroups","C:\Integration\DefGroup2.json"
 
New-ODataEntity "c:\Integration\odataPost.json" -Entity "data/DataManagementDefinitionGroups" -payload $arr -payloadType "Files" -verbose
 
 
.NOTES
General notes
#>

function New-D365Rest {
    [CmdletBinding(DefaultParameterSetName = 'File')]
    param(
        [Parameter(Mandatory = $true, Position = 1, ParameterSetName = "File")]
        [Parameter(Mandatory = $true, Position = 1, ParameterSetName = "Files")]
        [string]$Configuration,
        
        [Parameter(Mandatory = $true, Position = 2, ParameterSetName = "File")]
        [string]$Entity,
        
        [Parameter(Mandatory = $true, Position = 3, ParameterSetName = "Files")]
        [Array]$PayloadFiles,
        
        [Parameter(Mandatory = $true, Position = 3, ParameterSetName = "File")]
        [string]$Payload
    )

    if (Test-Path $Configuration) {
        $config = Get-Content $Configuration | Out-String | ConvertFrom-Json -ErrorAction Stop
    }
    else {
        $config = $Configuration | ConvertFrom-Json -ErrorAction Stop
    }

    $null = add-type -path "$script:PSModuleRoot\internal\dll\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"

    $d365FO = $Config.D365FO
    $authority = $Config.Authority
    $clientId = $Config.ClientId
    $clientSecret = $Config.ClientSecret



    if($PSCmdlet.ParameterSetName -eq "File")
    {
        if (Test-Path $Configuration) {
            $Payload = Get-Content $Payload
        }
        $PayLoadType = "JSON"
    
    }

    $authorizationHeader = New-AuthorizationHeader $authority $clientId $clientSecret $d365FO


    if($PayLoadType -eq "JSON")
    {
        $Payload = $Payload.Trim()
        $webRequest =  New-WebRequest "$d365FO/$Entity"  $authorizationHeader "POST"  $Payload  $PayLoadType "application/json;odata.metadata=minimal"
    }
    else {
        $webRequest = New-WebRequestBatch $d365FO "data/`$batch" $authorizationHeader "POST" $PayloadFiles
    }

    Get-IntegrationResponse $webRequest


}