PowerShell: Versionsliste pflegen

Bild Tipps & Tricks zu den Dynamics NAV Versionen
Hier bitte keine Fragen stellen, sondern nur bereits vorhandene Tricks veröffentlichen.
Forumsregeln
Impressum • Community-Knigge • Nutzungsbedingungen • Datenschutzrichtlinie
Hier bitte keine Fragen stellen, sondern nur bereits vorhandene Tricks veröffentlichen.

PowerShell: Versionsliste pflegen

Beitragvon Kowa » 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".

AttachTagToVersionList.png


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

VersionList2.png


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
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

VersionskĂĽrzel entfernen

Beitragvon Kowa » 18. Januar 2016 18:13

VersionskĂĽrzel entfernen
Mit dieser Funktion kann ein Versionskürzel aus der Versionsliste aus allen Objekten eines Objektpakets entfernt werden. Der Bereich vom Kürzel bis zum nächsten Komma (falls vorhanden) wird dabei komplett entfernt. Das Ergebnis wird in der neuen Objektdatei mit Basisname_<AddonTag>removed.Dateierweiterung im gleichen Ordner wie die Quelldatei gespeichert.

Die obige Indexliste wird hier nicht benötigt, da pauschal alle Objekte geprüft und falls erforderlich, modifiziert werden.

Ein Anwendungsgebiet: Entrümpeln von alten Versionsständen in Datenbanken mit mehreren Add-ons, bevor neue Versionen eingespielt werden.

removeVersionTag.png

removeVersionTag2.png

Code: Alles auswählen
    function RemoveTagFromVersionList
    {
        [CmdletBinding()]
        Param
        (
        [String][Parameter(Mandatory=$True,Position=1)]
        $AddOnTag,
        [String][Parameter(Mandatory=$True)]
        $PathObjectPack
        )
       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 +'removed' +(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
            $CurrVersionList = (Get-NAVApplicationObjectProperty -Source $_ ).VersionList
            # $AddOnIndex = $CurrVersionList.indexOf($AddOnTag);
            Write-host
            Write-host "Version list in $_ : $CurrVersionList"
            #Write-host 'Length:' $CurrVersionList.length
            if ($CurrVersionList.length -gt 0)
            {
                $Comma = ','
                $Addonpos = $Comma + $Addonpos
                $Addonpos = $CurrVersionList.IndexOf($AddOnTag)
                if (-not ($Addonpos -eq -1))
                {
                   
                    if ($Addonpos -ge 1) 
                    {$leftPart = $CurrVersionList.Substring(0,$Addonpos - 1)}
                    else
                    {$leftPart = $CurrVersionList}
                   
                    $rightPart = $CurrVersionList.Substring($Addonpos + 1 )
                   
                   
                    $posCommaRightPart = $RightPart.IndexOf($Comma)
         
                    if ($posCommaRightPart -ne -1)
                    {$NewRightPart = $RightPart.substring($posCommaRightPart + 1)}
                    else
                    {$NewRightPart = ''}
             
                    if ($NewRightPart -ne '')
                    {$NewVersionList = $LeftPart + ',' + $NewRightPart}
                    else
                    {$NewVersionList = $LeftPart}


                    Set-NAVApplicationObjectProperty -Target $_ -VersionListProperty $NewVersionList
                    Write-host "New version list in $_ : $NewVersionList " -ForegroundColor Green
                }
                else
                 {Write-host "The $AddonTag tag does not exist in Version List of $CurrFileName" -ForegroundColor Yellow}
            }

         }
      )
           
      Join-NAVApplicationObjectFile -Destination $NewObjectPackFullName -Source $WorkingFolder\*.txt -Force
      Remove-Item -path $WorkingFolder -recurse
    }
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01


ZurĂĽck zu NAV Tipps & Tricks

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast