UpgradeWizard/MergeNavObject.WithPropertiesUW.ps1
function Merge-NAVObjectsWithPropertiesUW{ param( [parameter(Mandatory=$false)] [string]$workFolder, [parameter(Mandatory=$true)] [string]$sourceBaseFolder, [parameter(Mandatory=$true)] [string]$sourceModFolder, [parameter(Mandatory=$true)] [string]$targetBaseFolder, [parameter(Mandatory=$true)] [string]$resultFolder, [string]$objectName) if (-not $workFolder.EndsWith("\")) {$workFolder += "\"} if ($workFolder -eq "\") {$workFolder = ""} if (-not $sourceBaseFolder.EndsWith("\")) {$sourceBaseFolder += "\"} if (-not $sourceModFolder.EndsWith("\")) {$sourceModFolder += "\"} if (-not $targetBaseFolder.EndsWith("\")) {$targetBaseFolder += "\"} if (-not $resultFolder.EndsWith("\")) {$resultFolder += "\"} $collection = @() #Codeunits $out = new-object psobject $out | add-member noteproperty "ObjectName" "Codeunit" $out | add-member noteproperty "Total" 0; $collection += $out #XML Ports $out = new-object psobject $out | add-member noteproperty "ObjectName" "XMLPort" $out | add-member noteproperty "Total" 0; $collection += $out #Queries $out = new-object psobject $out | add-member noteproperty "ObjectName" "Query" $out | add-member noteproperty "Total" 0; $collection += $out #MenuSuite $out = new-object psobject $out | add-member noteproperty "ObjectName" "MenuSuite" $out | add-member noteproperty "Total" 0; $collection += $out #Page $out = new-object psobject $out | add-member noteproperty "ObjectName" "Page" $out | add-member noteproperty "Total" 0; $collection += $out #Report $out = new-object psobject $out | add-member noteproperty "ObjectName" "Report" $out | add-member noteproperty "Total" 0; $collection += $out #Table $out = new-object psobject $out | add-member noteproperty "ObjectName" "Table" $out | add-member noteproperty "Total" 0; $collection += $out if ($objectName -eq "") { $fileCount = (Get-ChildItem $workFolder$targetBaseFolder).Count $fileIndex = 0 foreach ($f in Get-ChildItem $workFolder$targetBaseFolder) { $fileIndex ++ $progress = [math]::Round(($fileIndex / $fileCount) * 100) #write-host "---------merge progress: $progress% ($fileIndex of $fileCount)" #write-host ([math]::Round($fileindex / $filecount*100)) Write-Progress -Activity “Merge Progress” -status “%$progress Processing file $f” -percentComplete ([math]::Round($fileindex / $filecount*100)) if (Test-Path $workFolder$sourceModFolder$f) { #write-host "merging $f..." $result = Merge-NAVObjectWithPropertiesUW -workFolder $workFolder -sourceBaseFolder $sourceBaseFolder -sourceModFolder $sourceModFolder -targetBaseFolder $targetBaseFolder -resultFolder $resultFolder -objectName $f -batchMode $true $result1 = $result[0].Split("`r`n")|where {$_ -like '*Conflict*changes'} $result1 = $result1.Remove(1, 12) $result1 = $result1.Remove($result1.IndexOf('changes'), 7) [int]$conflictNo = $result1 $ObjectType=$result[1]|Where-Object MergeResult -eq 'Conflict' foreach ($obj in $collection) {if ($Obj.ObjectName -eq $ObjectType.ObjectType) {$obj.Total += $conflictNo}} } else { #write-host "copying $f..." $r = copy-item -path $workFolder$targetBaseFolder$f -Destination $workFolder$resultFolder$f } } } else { $result = Merge-NAVObjectWithPropertiesUW -workFolder $workFolder -sourceBaseFolder $sourceBaseFolder -sourceModFolder $sourceModFolder -targetBaseFolder $targetBaseFolder -resultFolder $resultFolder -objectName $objectName -openInBeyondCompare $true } return $collection } function Merge-NAVObjectWithPropertiesUW{ param( [parameter(Mandatory=$false)] [string]$workFolder, [parameter(Mandatory=$true)] [string]$sourceBaseFolder, [parameter(Mandatory=$true)] [string]$sourceModFolder, [parameter(Mandatory=$true)] [string]$targetBaseFolder, [parameter(Mandatory=$true)] [string]$resultFolder, [parameter(Mandatory=$true)] [string]$objectName, [boolean]$openInBeyondCompare, [boolean]$batchMode) $myReturnArray = @() # merge changes $progressPreference = 'silentlyContinue' # Subsequent calls do not display UI. $result=Merge-NAVApplicationObject ` -OriginalPath $workFolder$sourceBaseFolder$objectName ` -ModifiedPath $workFolder$sourceModFolder$objectName ` -TargetPath $workFolder$targetBaseFolder$objectName ` -ResultPath $workFolder$resultFolder$objectName ` -DocumentationConflict TargetFirst ` -Force $progressPreference = 'Continue' # Subsequent calls do display UI. # get object details if (-not $batchMode) { write-host "merging object properties..." } $sourceObjectDetails = Get-NAVApplicationObjectProperty -Source $workFolder$sourceBaseFolder$objectName $modObjectDetails = Get-NAVApplicationObjectProperty -Source $workFolder$sourceModFolder$objectName $targetObjectDetails = Get-NAVApplicationObjectProperty -Source $workFolder$targetBaseFolder$objectName # merge versions $sourceVersionList = $sourceObjectDetails | select VersionList $sourceVersions = $sourceVersionList.VersionList.Split(",") $modVersionList = $modObjectDetails | select VersionList $modVersions = $modVersionList.VersionList.Split(",") $targetVersionList = $targetObjectDetails | select VersionList foreach ($v in $sourceVersions) { $modVersions = $modVersions -ne $v } foreach ($v in $modVersions) { if ($v.StartsWith("NAV")) {$modVersions = $modVersions -ne $v} } if ($modVersions.Length -gt 0) { $newVersionList = "" if ($targetVersionList -ne "") { $newVersionList = $targetVersionList.VersionList; } foreach ($v in $modVersions) { if ($newVersionList -ne "") { $newVersionList += "," + $v } else { $newVersionList = $v } } Set-NAVApplicationObjectProperty -TargetPath $workFolder$resultFolder$objectName -VersionListProperty $newVersionList } # merge modified $modModified = $modObjectDetails | select Modified if ($modModified.Modified) { Set-NAVApplicationObjectProperty -TargetPath $workFolder$resultFolder$objectName -ModifiedProperty "Yes" } # merge date & time $sourceDate = $sourceObjectDetails.Date $modDate = $modObjectDetails.Date $targetDate = $targetObjectDetails.Date if ($modDate -ne $sourceDate) { if ([datetime]::ParseExact($modDate,"dd/MM/yy", $null) -gt [datetime]::ParseExact($targetDate,"dd/MM/yy",$null)) { $newDateTime = $modObjectDetails.Date.ToString() + " " + $modObjectDetails.Time.ToString() Set-NAVApplicationObjectProperty -TargetPath $workFolder$resultFolder$objectName -DateTimeProperty $newDateTime } Set-NAVApplicationObjectProperty -TargetPath $workFolder$resultFolder$objectName -ModifiedProperty "Yes" } if (-not $batchMode) { write-host "object merged" } if ($openInBeyondCompare) { if (-not $batchMode) { write-host "opening in BeyondCompare..." } $bcomp = "`"C:\Program Files (x86)\Beyond Compare 4\BComp.exe`"" Start-Process -FilePath $bcomp -ArgumentList "/fv `"$workFolder$sourceModFolder$objectName`" `"$workFolder$sourceBaseFolder$objectName`"" Start-Process -FilePath $bcomp -ArgumentList "/fv `"$workFolder$resultFolder$objectName`" `"$workFolder$targetBaseFolder$objectName`"" Start-Process -FilePath $bcomp -ArgumentList "/fv `"$workFolder$targetBaseFolder$objectName`" `"$workFolder$sourceBaseFolder$objectName`"" Start-Process -FilePath $bcomp -ArgumentList "/fv `"$workFolder$resultFolder$objectName`" `"$workFolder$sourceBaseFolder$objectName`"" } $myReturnArray += $result.Summary $myReturnArray += $result return $myReturnArray return $result } |