functions/dynamicsnav/servicesetup/Enable-ServiceExcelAddIn.ps1

function Enable-NavServerExcelAddIn {
    param (
        [Parameter(Mandatory)]
        [string]$ServerInstance,
        [Parameter(Mandatory)]
        [string]$ExcelAppId,

        # Optional, should already be set
        [string]$PublicWebBaseUrl,
        [string]$PublicODataBaseUrl,

        [switch]$Force
    )
    
    $CurrentExcelAppId = Get-NAVServerConfiguration -ServerInstance $ServerInstance -KeyName ExcelAddInAzureActiveDirectoryClientId

    if (-not [string]::IsNullOrWhiteSpace($CurrentExcelAppId) -and ($ExcelAppId -ne $CurrentExcelAppId) -and -not $Force) {
        Write-Error "Server already has ExcelAddInAzureActiveDirectoryClientId set to $CurrentExcelAppId! Use -Force to overwrite."
        return $false
    }

    if ($CurrentExcelAppId -ne $ExcelAppId) {
        Set-NAVServerConfiguration -ServerInstance $ServerInstance -KeyName ExcelAddInAzureActiveDirectoryClientId -KeyValue $ExcelAppId
    }

    if ($PublicWebBaseUrl) {
        $CurrentPublicWebBaseUrl = Get-NAVServerConfiguration -ServerInstance $ServerInstance -KeyName PublicWebBaseUrl
        if (-not [string]::IsNullOrWhiteSpace($CurrentPublicWebBaseUrl) -and ($PublicWebBaseUrl -ne $CurrentPublicWebBaseUrl) -and -not $Force) {
            Write-Error "Server already has PublicWebBaseUrl set to $CurrentPublicWebBaseUrl! Use -Force to overwrite."
            return $false
        }

        Set-NAVServerConfiguration -ServerInstance $ServerInstance -KeyName PublicWebBaseUrl -KeyValue $PublicWebBaseUrl
    }

    if ($PublicODataBaseUrl) {
        $CurrentPublicODataBaseUrl = Get-NAVServerConfiguration -ServerInstance $ServerInstance -KeyName PublicODataBaseUrl
        if (-not [string]::IsNullOrWhiteSpace($CurrentPublicODataBaseUrl) -and ($PublicODataBaseUrl -ne $CurrentPublicODataBaseUrl) -and -not $Force) {
            Write-Error "Server already has PublicODataBaseUrl set to $CurrentPublicODataBaseUrl! Use -Force to overwrite."
            return $false
        }

        Set-NAVServerConfiguration -ServerInstance $ServerInstance -KeyName PublicODataBaseUrl -KeyValue $PublicODataBaseUrl
    }

    [bool]$ODataServicesEnabled = Get-Navserverconfiguration -ServerInstance $ServerInstance -KeyName ODataServicesEnabled
    if (-not $ODataServicesEnabled) {
        Set-Navserverconfiguration -ServerInstance $ServerInstance -KeyName ODataServicesEnabled -KeyValue true
    }

    [bool]$ODataServicesSSLEnabled = Get-NavServerConfiguration -ServerInstance $ServerInstance -KeyName ODataServicesSSLEnabled
    if (-not $ODataServicesSSLEnabled) {
        Set-NavServerConfiguration -ServerInstance $ServerInstance -KeyName ODataServicesSSLEnabled -KeyValue True
    }

    [bool]$ApiServicesEnabled = Get-NAVServerConfiguration -ServerInstance $ServerInstance -KeyName ApiServicesEnabled
    if (-not $ApiServicesEnabled) {
        Set-NAVServerConfiguration -ServerInstance $ServerInstance -KeyName ApiServicesEnabled -KeyValue true
    }

    return $true
}