PowerShell: Aus NAV-Translationsdatei Objektindex erzeugen

12. September 2015 23:40

Mit dieser Funktion kann aus einer Translationsdatei ein Objektindex (mit platzsparenden 0-Byte-Dateien) erzeugt werden.

Um einem Objektpaket aus einer anderen Datenbank die Sprachlayer gezielt zuzufügen, kann man aus der Quelldatenbank die Objekte markieren und dann über Extras>Translate>Export die Datei erzeugen.

Dann das Skript mit dem Pfad zu der erzeugten Datei aufrufen. Dadurch wird im Benutzertempordner (C:\Users\<Benutzername>\AppData\Local\Temp) im Unterordner OBJINDEX der Objektindex als leere Dateien erzeugt,
TransfileObjektIndex.jpg

der dann mit einer Funktion wie dieser genutzt werden kann, um aus der Zieldatenbank die entsprechenden Objekte zu exportieren. Anschließend kann der Inhalt der gleichen Translationsdatei den Objekten zugefügt werden, die danach in die Zieldatenbank wieder importiert werden können.

Da die obigen Funktionen erst ab NAV 2013 genutzt werden können, wird bei F bzw. D für Forms und Dataports die Skriptausführung abgebrochen.

Code:
function NAVTransFileObjIndex
{
    param (
        [parameter(Mandatory=$true)]
      [string] $NAVTranslationFile)
    $WorkingFolder = "$env:temp\OBJINDEX"
    if (-not(test-path $WorkingFolder)) {New-Item -path $WorkingFolder -ItemType directory -force}
    Remove-Item -path $WorkingFolder\*.* -recurse
    foreach ($line in [System.IO.File]::ReadLines($NAVTranslationFile))
    {
        $PosDash = $line.IndexOf("-")
        $RawObjectID = $line.Substring(0,$posDash)
        if ($RawObjectID -ne $OldObjectID)
        {
            $ObjectTypeOneChar = $line.Substring(0,1)
            $ObjectID = $line.Substring(1,$posDash-1)
            Switch ($ObjectTypeOneChar)
            {
                "T" {$CurrFileName = "TAB$ObjectID.TXT"}
                "N" {$CurrFileName  = "PAG$ObjectID.TXT"}
                "R" {$CurrFileName  = "REP$ObjectID.TXT"}
                "C" {$CurrFileName  = "COD$ObjectID.TXT"}
                "X" {$CurrFileName  = "XML$ObjectID.TXT"}
                "M" {$CurrFileName  = "MEN$ObjectID.TXT"}
                "Q" {$CurrFileName  = "QUE$ObjectID.TXT"}
                "F" {Throw "Object type code $ObjectTypeOneChar for Form not allowed."}
                "D" {Throw "Object type code $ObjectTypeOneChar for Dataport not allowed."}
                default {Throw "Object type code $ObjectTypeOneChar not recognized. Add this new type in the Switch statement in the script."}
            }
            if (-not(test-path "$WorkingFolder\$CurrFileName"))
            {
                New-Item -path "$WorkingFolder\$CurrFileName" -ItemType file -force
                $OldObjectID = $RawObjectID
            }
        }
    }
}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.