Search Results for

    Show / Hide Table of Contents

    Complete Example

    Warning

    This example is somewhat out-dated and will be replaced soon, but can be useful to some degree.

    param(
        $IdPrefix = 'my-app',
        $NamePrefix = 'My App',
        $VersionPrefix = 'MyApp',
        $Version = '1.0',
        $LsNavVersion = '11.04',
        $SetupDir = (Join-Path $PSScriptRoot 'v1.0'),
        $OutputDir = (Join-Path $PSScriptRoot 'Output'),
        $Subscription = 'aa6f87dc-dcc2-4915-b037-1853b31f1d9b',
        $SourceServer = 'gocurrent.lsretail.com',
    
        $Server = 'localhost',
        $Port = $null
    )
    
    $ErrorActionPreference = 'stop'
    
    Import-Module LsPackageTools\DatabasePackageCreator
    Import-Module LsPackageTools\AddinPackageCreator
    Import-Module LsPackageTools\LicensePackageCreator
    Import-Module LSPackageTools\ObjectPackageCreator
    Import-Module UpdateServiceServer
    
    function Get-SqlInstance()
    {
        Import-Module UpdateService
    
        $System = Get-UscInstalledPackage -Id 'system'
        $System.Arguments.SqlServerInstance
    }
    
    $Packages = @(
        @{ Id = 'ls-central-demo-database'; Version = $LsNavVersion }
        @{ Id = 'ls-central-web-pos-addin'; Version = $LsNavVersion }
        @{ Id = 'ls-central-toolbox-client'; Version = $LsNavVersion }
        @{ Id = 'ls-central-objects'; Version = $LsNavVersion }
        @{ Id = 'ls-hardware-station'; Version = $LsNavVersion }
    )
    $Packages | Copy-UssPackageFromServer -SourceServer $SourceServer
    
    # Get BC version for LS Central
    $BcPackage = Resolve-UssDependencies -Id 'ls-central-toolbox-server' -Version $LsNavVersion -Server $Server -Port $Port | Where-Object { $_.Id -eq 'bc-server'}
    $BcVersion = $BcPackage.Version
    
    Write-Host 'Creating new database package...'
    $Arguments = @{
        Id = "$IdPrefix-database"
        Name = "$NamePrefix Database"
        Version = $Version
        OutputDir = $OutputDir
        Path = (Join-Path $SetupDir '*.bak')
        AllowOverwriteOnUpdate = $false
        BcVersion = $BcVersion
        Force = $true
    }
    
    New-DatabasePackage @Arguments | Import-UssPackage -Server $Server -Port $Port
    
    $Arguments = @{
        Id = "$IdPrefix-dotnet-server-addin"
        Name = "$NamePrefix .Net Addin"
        Version = $Version
        InputPath = (Join-Path $SetupDir 'Addin\*')
        OutputDir = $OutputDir
        MinBcVersion = '8.0'
        InstallInServer = $true
        AddinDestinationDir = $VersionPrefix
    }
    
    Write-Host "Creating new addin package for server..."
    New-AddinPackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
    
    $Arguments.Id = "$IdPrefix-dotnet-client-addin"
    $Arguments.InstallInServer = $false 
    $Arguments.InstallInWindowsClient = $true
    
    Write-Host "Creating new addin package for Windows client..."
    New-AddinPackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
    
    $Arguments = @{
        Id = "$IdPrefix-license"
        Name = "$NamePrefix License"
        Version = $Version
        LicensePath = (Join-Path $SetupDir '*.flf')
        OutputDir = $OutputDir
    }
    
    if (Resolve-Path $Arguments.LicensePath -ErrorAction SilentlyContinue)
    {
        Write-Host "Creating license package..."
        New-LicensePackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
    }
    else
    {
        try
        {
            Get-UssPackageVersion -Id $Arguments.Id -VersionQuery '' -Server $Server -Port $Port
        }
        catch
        {
            throw "You must provide a valid Dynamics 365 Business Central license for a successfull upgrade, put your license file into $SetupDir."
        }
    }
    
    $Dependencies = @(
        @{ Id = 'bc-objects'; Version = "=$BcVersion"}
        @{ Id = 'ls-central-objects'; Version = "$LsNavVersion"}
    )
    
    $FobPath = Join-Path $OutputDir "$VersionPrefix.fob"
    
    $Arguments = @{
        VersionPrefix = $VersionPrefix
        OutputFobPath = $FobPath
        Dependencies = $Dependencies
        DatabaseBackupPath = (Join-Path $SetupDir '*.bak')
        DatabaseServerInstance = Get-SqlInstance
    }
    
    Write-Host "Exporting objects from database backup..."
    Export-ObjectsForPackage @Arguments -Force
    
    $Arguments = @{
        Id = "$IdPrefix-objects"
        Name = "$NamePrefix Objects"
        Version = $Version
        FobPath = $FobPath
        ForceDestructiveChanges = $true
        Dependencies = $Dependencies
        VersionPrefix = $VersionPrefix
        OutputDir = $OutputDir
    }
    
    Write-Host "Creating new object package..."
    New-ObjectPackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
    
    # Create subscription package
    
    $Arguments = @{
        Id = "bundle/$IdPrefix-full"
        Version = $Version
        Name = "$NamePrefix Full Install"
        DisplayName = "$NamePrefix Full Install $Version"
        Instance = $true
        Dependencies = @(
            # The database package must be placed before bc-server package or his depentant.
            @{ Id = "$IdPrefix-database"; Version = $Version} 
            @{ Id = "$IdPrefix-dotnet-server-addin"; Version = ">=$Version"} 
            # Skip this package if you do not want the Windows Client:
            @{ Id = "$IdPrefix-dotnet-client-addin"; Version = ">=$Version"} 
            @{ Id = "$IdPrefix-objects"; Version = $Version}
            # We always want the newest license:
            @{ Id = "$IdPrefix-license"; Version = '!^'}
            # Skip this package if you do not want the Web Client
            @{ Id = "bc-web-client"; Version = $BcVersion} 
        )
        AlwaysUpdateDependencies = $true
        OutputDir = $OutputDir
    }
    
    New-UssPackage @Arguments -Force | Import-UssPackage -Server $Server -Port $Port
    
    if (!(Test-UssInstaller -Subscription $Subscription -Server $Server -Port $Port))
    {
        Write-Host "Creating subscription..."
        New-UssInstaller -Subscription $Subscription -Name "$NamePrefix Setup" -Server $Server -Port $Port
    }
    
    $Arguments = @{
        Subscription = $Subscription 
        Id = "bundle/$IdPrefix-full"
        Version = $Version 
        UpdateStrategy = 'Automatic'
        InstanceNameSuggestion = $IdPrefix 
        Server = $Server 
        Port = $Port
    }
    Write-Host "Updating subscription..."
    Set-UssInstallerPackage @Arguments
    
    Write-Host "Fetching installer for subscription..."
    $InstallerPath = Get-UssInstaller -Subscription $Subscription -OutputDir $OutputDir
    
    Write-Host "Its all done!"
    Write-Host ''
    Write-Host "Now lets install your setup:"
    Write-Host "  - Using installer: $InstallerPath"
    Write-Host "  - Using PS: Install-UscPackage -Id 'bundle/$IdPrefix-full'"
    
    In This Article
    Back to top Generated by DocFX