PowerShell: Versionsliste pflegen
Verfasst: 13. Januar 2016 17:53
Versionskürzel hinzufügen
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:
Falls das Versionskürzel schon vorhanden ist, wird am Objekt keine Änderung vorgenommen, es erscheint dann Warnung wie diese:
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.
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:
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:
Import-Module 'C:\Program Files (x86)\Microsoft Dynamics NAV\90\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1' -WarningAction SilentlyContinue | out-null