PowerShell: Mergen von Versionslisten / Objektdatumsabgleich
Verfasst: 30. Oktober 2014 10:14
Das Mergen von Versionslisten wird ja von dem Merge-Cmdlet nicht durchgeführt, man hat derzeit nur Optionen aus welchem Mergeordner die Versionsliste entnommen werden soll.
Um dem abzuhelfen, hat Morten Jensen von MS in diesem Artikel Merging Application Objects using Windows PowerShell in Microsoft Dynamics NAV 2015 in den Kommentaren vorgestern eine Beispielfunktion zum Mergen von Versionslisten veröffentlicht.
Da die dort recht tief verbuddelt ist, hier noch mal in besser lesbarer Form:
Um dem abzuhelfen, hat Morten Jensen von MS in diesem Artikel Merging Application Objects using Windows PowerShell in Microsoft Dynamics NAV 2015 in den Kommentaren vorgestern eine Beispielfunktion zum Mergen von Versionslisten veröffentlicht.
Da die dort recht tief verbuddelt ist, hier noch mal in besser lesbarer Form:
- Code:
<#
.SYNOPSIS
Creates version list string based on the three inputs of a merge operation (original, modified, target).
The returned version includes the "highest" version for each prefix and any other non-prefixed versions.
This script does a 3-way merge and then updates the version list in the resulting objects.
.EXAMPLE
$mergeInfo = Merge-NAVApplicationObject ...
$mergeInfo | Foreach-Object { Set-NAVApplicationObjectProperty $_.Result -VersionListProperty (New-NAVVersionList $_ ('MyTag', 'NAVDEU')) }
#>
function New-NAVVersionList($MergeInfo, [string[]]$VersionPrefix = 'NAVW1')
{
$allVersions = @()
if ( $mergeInfo.original.versionlist -ne $null )
{ $allVersions += $mergeInfo.original.versionlist.Split(',') }
if ( $mergeInfo.modified.versionlist -ne $null )
{ $allVersions += $mergeInfo.modified.versionlist.Split(',') }
if ( $mergeInfo.target.versionlist -ne $null )
{ $allVersions += $mergeInfo.target.versionlist.Split(',') }
$mergedVersions = @()
foreach ($prefix in $VersionPrefix)
{
# add the "highest" version that starts with the prefix
$mergedVersions += $allVersions | where { $_.StartsWith($prefix) } | sort | select -last 1
# remove all prefixed versions
$allVersions = $allVersions.Where({ !$_.StartsWith($prefix) })
}
# return a ,-delimited string consisting of the "highest" prefixed versions and any other non-prefixed versions
$mergedVersions += $allVersions
$mergedVersions -join ','
}
$result = Merge-NAVApplicationObject -OriginalPath .\ORIGINAL -ModifiedPath .\MODIFIED -TargetPath .\TARGET -ResultPath .\RESULT -Force
$result |
foreach { Set-NAVApplicationObjectProperty -Target $_.Result `
-VersionListProperty (New-NAVVersionList $_ ('NAVW1',’YOURTAG’)); `
Get-NAVApplicationObjectProperty -Source $_.Result `
}