Mit dieser Funktion kann man in einem Objektpaket, abgestimmt mit einer individuellen Indexliste, die Versionsliste pflegen.
Das Objektpaket wird dabei in den Ordner TempNAVobjects im Usertempverzeichnis zerlegt, die Objektnamen einzeln gegen die Indexliste vergleichen, und wenn dort als Dateiname vorhanden, die Versionskennung am Objekt eintragen, falls diese dort nicht nicht vorhanden ist. Am Schluss wird aus den Einzeldateien im Pfad der Ausgangsdatei ein neues Objektpaket erstellt, welches die Versionskennung im Dateinamen als Suffix erhält, im Beispiel wäre die Ausgabedatei also "originalCH.txt".
Die Indexlisten kann man u.a. mit diesem oder diesem Skript erzeugen.
Beispieleingabe:
AttachTagToVersionList -AddOnTag CH -PathObjectPack C:\temp\original.txt -PathIndexFolder C:\Indexlisten\ZVCHindex
Falls das VersionskĂĽrzel schon vorhanden ist, wird am Objekt keine Ă„nderung vorgenommen, es erscheint dann Warnung wie diese:
The tag CH already exists in Version List of PAG254.TXT
- Code: Alles auswählen
function AttachTagToVersionList
{
[CmdletBinding()]
Param
(
[String][Parameter(Mandatory=$True,Position=1)]
$AddOnTag,
[String][Parameter(Mandatory=$True)]
$PathObjectPack,
[String][Parameter(Mandatory=$True)]
$PathIndexFolder
)
if (-not (Test-Path $PathObjectPack))
{Throw "File $PathObjectPack does not exist"}
$WorkingFolder = "$env:temp\TempNAVobjects"
if (-not (Test-Path $WorkingFolder)) {New-item $WorkingFolder -ItemType Directory -force}
else {Remove-Item -path $WorkingFolder\*.* -recurse}
$ObjectPackFileBaseName = (Get-Item $PathObjectPack).Basename
$NewObjectPackFullName = (Get-Item $PathObjectPack).DirectoryName + '\' + (Get-Item $PathObjectPack).Basename + $AddOnTag + (Get-Item $PathObjectPack).Extension
Split-NAVApplicationObjectFile -Source $PathObjectPack -Destination $WorkingFolder -PreserveFormatting
Get-ChildItem -Path $WorkingFolder\*.txt |
ForEach `
(
{
# $_ -> C:\Users\KAIKOW~1\AppData\Local\Temp\TempNAVobjects\TAB25.TXT
# $_.Name -> TAB25.TXT
# $_.FullName -> C:\Users\Kai Kowalewski\AppData\Local\Temp\TempNAVobjects\TAB25.TXT
$CurrFileName = (Get-Item $_).name
Write-host "Checking for $CurrFileName in $PathIndexFolder"
if (Test-Path "$PathIndexFolder\$CurrFileName" -PathType Leaf)
{
$CurrVersionList = (Get-NAVApplicationObjectProperty -Source $_ ).VersionList
Write-host "Version list in $_ : $CurrVersionList"
$Token = ",$AddonTag"
if (-not ($CurrVersionList.contains($Token)))
{
$NewVersionList = $CurrVersionList + ',' + $AddonTag
Set-NAVApplicationObjectProperty -Target $_ -VersionListProperty $NewVersionList
Write-host "New version list in $_ : $NewVersionList " -ForegroundColor Green
}
else {Write-host "The tag $AddonTag already exists in Version List of $CurrFileName" -ForegroundColor Yellow}
}
}
)
Join-NAVApplicationObjectFile -Destination $NewObjectPackFullName -Source $WorkingFolder\*.txt -Force
Remove-Item -path $WorkingFolder -recurse
}
Die Importzeile fĂĽr die NAV Mergecmdlets muss natĂĽrlich ggf. mit dazu, falls diese nicht vorab importiert wurden. Bei installiertem NAV 2016 so, bei NAV 2015 den Pfad (90->80) entsprechend anpassen.
- Code: Alles auswählen
Import-Module 'C:\Program Files (x86)\Microsoft Dynamics NAV\90\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1' -WarningAction SilentlyContinue | out-null