Private/NavUtil.ps1
function Set-NAVParameters( [string]$Tenant, [string]$Server, [int]$SOAPPort, [string]$AuthenticationMode, [bool]$SSL, [int]$ClientPort, [string]$InstanceName, [string]$Domain, [string]$Login, [string]$Password) { if ($Server -eq "") { $Server = $Env:COMPUTERNAME } if ($SOAPPort -eq 0) { $SOAPPort = 7047 } if ($AuthenticationMode -eq "") { $AuthenticationMode = "Negotiate" if ($Domain -eq "") { $Domain = $Env:COMPUTERNAME } } if ($ClientPort -eq 0) { $ClientPort = -1; } $configuration = @{ UId = [System.Guid]::NewGuid(); Version = 0; Server = $Server; Port = $SOAPPort; Digest = $false; AuthenticationMode = $AuthenticationMode; SSL = $SSL; ClientPort = $ClientPort; InstanceName = $InstanceName; ServiceDomain = $Domain; ServiceLogin = $Login; UnencryptedServicePassword = $Password; SenderBatchSize = 50; SynchronizerTimerStep = 3000; MapOperationsOnIgnoredResourcesPS = $true; MapReservationsPS = $true; KeepAlive = $true; RetryInitRatio = 5; TenantName = ""; WebServerName = ""; WebSitePort = 8080; MigratedV5 = $false; LastModificationDate = [System.DateTime]::UtcNow; } Write-NavParameters $Tenant $configuration } function Write-NavParameters($Tenant,$configuration) { $data = $configuration | ConvertTo-Json $storePath = Get-NavPathFromTenant $Tenant if (!(Test-Path $storePath)) { md $storePath | Out-Null } $storePath = $storePath + "NAV.json" [System.IO.File]::WriteAllText($storePath, $data) Write-Verbose "NAV configuration stored in $storePath" } function Set-NAVParametersOld($Tenant, $Domain, $Login, $Password) { $mod = (Get-ChildItem -Path "$env:ProgramFiles\Microsoft Dynamics NAV" -Filter '*.psm1' -Recurse).FullName Import-Module $mod $xmlConfig = Get-NAVServerInstance | Where-Object Default | Get-NAVServerConfiguration -AsXml $values = $xmlConfig.configuration.appSettings.add $ServerInstance = ($values | Where-Object key -eq 'ServerInstance').value $SOAPServicesPort = ($values | Where-Object key -eq 'SOAPServicesPort').value $ClientServicesPort = ($values | Where-Object key -eq 'ClientServicesPort').value $DatabaseServer = ($values | Where-Object key -eq 'DatabaseServer').value $DatabaseInstance = ($values | Where-Object key -eq 'DatabaseInstance').value $inputFile = "$PSScriptRoot\setup.xml" $outputFile = "$env:HOMEPATH\new-setup.xml" if ($Domain -eq "") { $Domain = $Env:COMPUTERNAME } $XMLfile = New-Object XML $XMLfile.Load($inputFile) $XMLfile.NavSetupConfiguration.NavServer = $env:COMPUTERNAME $XMLfile.NavSetupConfiguration.NavPort = $SOAPServicesPort $XMLfile.NavSetupConfiguration.NavClientPort = $ClientServicesPort $XMLfile.NavSetupConfiguration.NavServerInstance = $ServerInstance $XMLfile.NavSetupConfiguration.NavServiceDomain = $Domain $XMLfile.NavSetupConfiguration.NavServiceLogin = $Login $XMLfile.NavSetupConfiguration.NavServicePassword = $Password $XMLfile.NavSetupConfiguration.P1DbLogin = $Login $XMLfile.NavSetupConfiguration.P1DbName = Get-DatabaseNameFromTenant $Tenant $XMLfile.NavSetupConfiguration.P1DbPassword = $Password $XMLfile.NavSetupConfiguration.P1DbServer = "$DatabaseServer\$DatabaseInstance" $XMLfile.NavSetupConfiguration.P1DbServerLogin = $Login $XMLfile.NavSetupConfiguration.P1DbServerPassword = $Password $XMLfile.NavSetupConfiguration.P1RoleName = $Tenant $XMLfile.NavSetupConfiguration.P1WebApplication = Get-WebAppNameFromTenant $Tenant $XMLfile.NavSetupConfiguration.P1WindowsServiceName = Get-ServiceNameFromTenant $Tenant $XMLfile.NavSetupConfiguration.P1WindowsServiceUserName = "$Domain\$Login" $XMLfile.NavSetupConfiguration.P1WindowsServicePassword = $Password $XMLfile.Save($outputFile) $srvBinPath = Get-ServicePath Write-Verbose "Copy setup file" Copy-Item $outputFile -Destination "$srvBinPath\$Tenant\Setup\setup.xml" $lastPath = (Get-Item -Path ".\" -Verbose).FullName Write-Verbose "Execute PlannerOne Manager in setup mode" Set-Location "$srvBinPath\$Tenant" CMD /C "PlannerOneManager.exe /setup" Set-Location $lastPath } function Test-DBConfig($Role) { $dbConfig = Get-LegacyDatabaseConfig $Role if ($null -eq $dbConfig) { return $false } return $true } function Test-DBConnection($Role) { $dbConfig = Get-LegacyDatabaseConfig $Role if ($null -eq $dbConfig) { return $false } $connectionString = Get-ConnectionString -Server $dbConfig.Server -Database $dbConfig.Database -IntegratedSecurity "true" Write-Verbose "Connection string: $connectionString" try { Get-DatabaseData -connectionString $connectionString -query "select * from dbo.UIParameters" -isSQLServer } catch { Write-Warning "Cannot connect to database with connection string $connectionString" return $false } Write-Verbose "Database connection OK" return $true } function Migrate-Configuration($Role) { $dbConfig = Get-LegacyDatabaseConfig $Role if ($null -eq $dbConfig) { return } $connectionString = Get-ConnectionString -Server $dbConfig.Server -Database $dbConfig.Database -IntegratedSecurity "true" Write-Verbose "Connection string: $connectionString" Migrate-Adapter $Role $connectionString Migrate-UIParameter $Role $connectionString Migrate-Criteria $Role $connectionString } function Migrate-UIParameter($Role,$connectionString) { $data = Get-DatabaseData -connectionString $connectionString -query "select * from dbo.UIParameters" -isSQLServer Write-Verbose "Migrating UI parameters..." if ($null -eq $data) { Write-Verbose "No ui parameters to migrate." return } $src = $data[1] if ($null -eq $src.UId) { Write-Verbose "No ui parameters to migrate." return } $parameters = @{ UId = $src.UId; Version = $src.Version; AdvanceDelayColorThresholdDuration = $src.AdvanceDelayColorThresholdDuration; ProjectLinksDisplayThreshold = $src.ProjectLinksDisplayThreshold; LastModificationDate = $src.LastModificationDate; } $storePath = Get-UIParamPathFromTenant $Role if (!(Test-Path $storePath)) { md $storePath | Out-Null } $storePath = $storePath + "parameters.json" $json = $parameters | ConvertTo-Json $json | Out-File $storePath Write-Verbose "UI parameters stored in $storePath" } function Migrate-Adapter($Role,$connectionString) { $data = Get-DatabaseData -connectionString $connectionString -query "select * from dbo.NavConfiguration" -isSQLServer Write-Verbose "Migrating ERP configuration..." if ($null -eq $data) { Write-Verbose "No adapter configuration to migrate." return } $src = $data[1] if ($null -eq $src.UId) { Write-Verbose "No adapter configuration to migrate." return } $navConfiguration = @{ UId = $src.UId; Version = $src.Version; Server = $src.Server; Port = $src.Port; NTLM = $src.NTLM; Digest = $src.Digest; AuthenticationMode = $src.AuthenticationMode; SSL = $src.SSL; ClientPort = $src.ClientPort; InstanceName = $src.WebRoot; ServiceDomain = $src.ServiceDomain; ServiceLogin = $src.ServiceLogin; ServicePassword = $src.ServicePassword; SenderBatchSize = $src.SenderBatchSize; SynchronizerTimerStep = $src.SynchronizerTimerStep; MapOperationsOnIgnoredResourcesPS = $src.MapOperationsOnIgnoredResourcesPS; MapReservationsPS = $src.MapReservationsPS; KeepAlive = $src.KeepAlive; RetryInitRatio = $src.RetryInitRatio; TenantName = $src.TenantName; WebServerName = $src.WebServerName; WebSitePort = $src.WebSitePort; MigratedV5 = $src.MigratedV5; LastModificationDate = $src.LastModificationDate; } Write-NavParameters $Role $navConfiguration Write-Verbose "Migration done" } function Migrate-Criteria($Role,$connectionString) { Migrate-TypedCriteria $Role $connectionString "Placement" Migrate-TypedCriteria $Role $connectionString "Task" } function Migrate-TypedCriteria($Role,$connectionString, $CriteriaType) { $query = "select * from dbo.CombinedCriterionConfiguration where CombinedType='$CriteriaType'" $data = Get-DatabaseData -connectionString $connectionString -query $query -isSQLServer Write-Verbose "Migrating criteria..." if ($null -eq $data) { Write-Verbose "No $CriteriaType criteria to migrate." return } $TypeInt = 0 $ChoiceStrategy = "SC_FilteringChoiceStrategy" if ($CriteriaType -eq "Placement") { $TypeInt = 1 $ChoiceStrategy = "PC_FilteringChoiceStrategy" } $src = $data[1] if ($null -eq $src.UId) { Write-Verbose "No $CriteriaType criteria to migrate." return } $Usages = Get-CriterionUsages $connectionString $src.UId $Strategy = @{ UId = [System.Guid]::NewGuid(); Name = $ChoiceStrategy; } $parameters = @{ UId = $src.UId; Version = $src.Version; CombinedType = $TypeInt; Name = $src.Name; ChoiceStrategy = $Strategy; CriterionUsageConfiguration = $Usages; } $storePath = Get-CriteriaPathFromTenant $Role if (!(Test-Path $storePath)) { md $storePath | Out-Null } $storePath = $storePath + "CombinedCriterion$CriteriaType.json" $json = $parameters | ConvertTo-Json $json | Out-File $storePath Write-Verbose "Criteria stored in $storePath" } function Get-CriterionUsages($connectionString, $CriterionUId) { $query = "select * from dbo.CriterionUsageConfiguration where CombinedCriterionConfiguration_UId='$CriterionUId'" Write-Verbose $query $data = Get-DatabaseData -connectionString $connectionString -query $query -isSQLServer Write-Verbose "Migrating criterion usages..." if ($null -eq $data) { Write-Verbose "No criterion usages for $CriterionUId to migrate." return } $usages = @() $i = 0 foreach ($usage in $data) { if ($i -gt 0) { $usage = @{ UId = $usage.UId; Version = $usage.Version; Name = $usage.Name; Position = $usage.Position; Margin = $usage.Margin; Unit = $usage.Unit; LastModificationDate = $usage.LastModificationDate; } $usages += $usage } $i++ } return $usages } |