PowerShell: Aus Fob-Datei Objektindex erzeugen

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: Aus Fob-Datei Objektindex erzeugen

Beitragvon Kowa » 30. Juli 2015 17:35

Mit dieser Funktion kann aus einer Fob-Datei (den Dateipfad der Fob dazu als Parameter ĂĽbergeben) die Objektliste aus dem Header ausgelesen werden.
FobHeader.png

Diese Objekte werden mit der gebrauchsfertigen Bezeichnung als leere Dateien im Usertempverzeichnis im Ordner TEMPINDEX abgelegt (dieser Ordner wird am Start gelöscht), von wo aus diese für Objektexporte, Kompiliervorgänge usw. genutzt werden können. Verwendbar sind diese Funktionen der finsql.exe ab NAV 2013, nicht mehr unterstützte Objekttypen wie Forms und Dataports in der Fobdatei werden daher im Skript ignoriert.
FobHeader3.png


Code: Alles auswählen
function FobToIndexFiles
{
$FileExists = Test-Path $args
If ($FileExists -eq $False) {Throw "No $args file exists at this location."}
$FileExtension = [System.IO.Path]::GetExtension($args)
if ($FileExtension -eq '.fob')
{
$WorkingFolder = "$env:temp\TEMPINDEX\"
If (Test-Path $WorkingFolder) {Remove-Item $WorkingFolder -Recurse -Force}
$reader = [System.IO.File]::OpenText($args)
try {
    for(;;) {
        $line = $reader.ReadLine()
        if ($line -eq $null) { break }
        $FirstCharacter = $line.Substring(0,1)
        IF ([byte][char]$FirstCharacter -eq 26) { break }
        $ShortObjectType = $line.Substring(0,3).ToUpper()
        Switch ($ShortObjectType)
         {
         "FOR" {break}
         "DAT" {break}
         }
        if ($FirstCharacter -ne ' ')
        {
        Write-Host $line
        $ObjectID = $line.Substring(10,10)
        $ObjectID = $ObjectID.Trim()
        $NewFileName = "$ShortObjectType" + "$ObjectID" +'.TXT'
        $ExportPath = $WorkingFolder + $NewFileName
        New-Item $ExportPath -ItemType file -force
        }
    }
}
finally {
    $reader.Close()
}
}
else
{Throw 'Please use a Dynamics NAV object file with *.fob extension for this script.'}
}
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

Umwandlung Forms -> Pages

Beitragvon Kowa » 30. Juli 2015 22:50

Mit dieser Variante fĂĽr Upgradeprozesse kann man aus einer Fobdatei aus Versionen bis NAV 2009 mit Forms die entsprechenden Pages ermitteln.
Beispiel: Wenn Form 30 in der Fob vorhanden ist, wird eine PAG30.txt im Tempordner erzeugt.

In diesem Screenshot ist das Skript in Kombination mit einem Exportskript fĂĽr die angepeilte neue Datenbank im Einsatz.
ForPag.png


Code: Alles auswählen
    function FobToIndexFilesFormToPage
    {
    $FileExists = Test-Path $args
    If ($FileExists -eq $False) {Throw "No $args file exists at this location."}
    $FileExtension = [System.IO.Path]::GetExtension($args)
    if ($FileExtension -eq '.fob')
    {
    $WorkingFolder = "$env:temp\TEMPINDEX\"
    If (Test-Path $WorkingFolder) {Remove-Item $WorkingFolder -Recurse -Force}
    $reader = [System.IO.File]::OpenText($args)
    try {
        for(;;) {
            $line = $reader.ReadLine()
            if ($line -eq $null) { break }
            $FirstCharacter = $line.Substring(0,1)
            IF ([byte][char]$FirstCharacter -eq 26) { break }
            $ShortObjectType = $line.Substring(0,3).ToUpper()
            Switch ($ShortObjectType)
             {
             "FOR" {$ShortObjectType = 'PAG'}
             "DAT" {break}
             }
            if ($FirstCharacter -ne ' ')
            {
            Write-Host $line
            $ObjectID = $line.Substring(10,10)
            $ObjectID = $ObjectID.Trim()
            $NewFileName = "$ShortObjectType" + "$ObjectID" +'.TXT'
            $ExportPath = $WorkingFolder + $NewFileName
            New-Item $ExportPath -ItemType file -force
            }
        }
    }
    finally {
        $reader.Close()
    }
    }
    else
      {Throw 'Please use a Dynamics NAV object file with *.fob extension for this script.'}
    }
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

Objektindex mit GridView

Beitragvon Kowa » 2. August 2015 23:24

Bei dieser Funktion werden zusätzlich am Ende wie beim Fob-Viewer die als Datei erzeugten Objekte in einem GridView-Fenster angezeigt.

FobToIndexFilesGridView.gif

Code: Alles auswählen
    function FobToIndexFilesGridView
    {
    $FileExists = Test-Path $args
    If ($FileExists -eq $False) {Throw "No $args file exists at this location."}
    $FileExtension = [System.IO.Path]::GetExtension($args)
    if ($FileExtension -eq '.fob')
    {
    $WorkingFolder = "$env:temp\TEMPINDEX\"
    If (Test-Path $WorkingFolder) {Remove-Item $WorkingFolder -Recurse -Force}
    $DataArray = New-Object System.Collections.Generic.List[object]
    $reader = [System.IO.File]::OpenText($args)
    try {
        for(;;) {
            $line = $reader.ReadLine()
            if ($line -eq $null) { break }
            $FirstCharacter = $line.Substring(0,1)
            IF ([byte][char]$FirstCharacter -eq 26) { break }
            $ShortObjectType = $line.Substring(0,3).ToUpper()
            Switch ($ShortObjectType)
             {
             "FOR" {break}
             "DAT" {break}
             }
            if ($FirstCharacter -ne ' ')
            {
            #Write-Host $line
            $ObjectType = $line.Substring(0,9).Trim()
            $ObjectID = $line.Substring(10,10).Trim()
            $ObjectName = $line.Substring(21,30)
            $ObjectDate = $line.Substring(54,10).Trim()
            $ObjectTime = $line.Substring(70,8).Trim()
           
            $NewFileName = "$ShortObjectType" + "$ObjectID" +'.TXT'
            $ExportPath = $WorkingFolder + $NewFileName
            New-Item $ExportPath -ItemType file -force
            }
            else
            {
            $ObjectSize = $line.Substring(10,10)
            $ObjectVersion = $line.Substring(21,57)
            $Obj =  New-Object Psobject -Property @{
                Type= $ObjectType
                ID =  $ObjectID
                Name = $ObjectName
                Date = $ObjectDate
                Time = $ObjectTime
                Size = $ObjectSize
                Version = $ObjectVersion
                }
            $DataArray.add($Obj)
            }
        }
    }
    finally {
        $reader.Close()
        $DataArray | Out-GridView  -title "Fobviewer $args" -wait
    }
    }
    else
    {Throw 'Please use a Dynamics NAV object file with *.fob extension for this script.'}
    }
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