[Gelöst] Powershell zum Einfügen von Copyright-Vermerk?

17. Januar 2018 14:46

Ich muss in eine ganze Reihe von NAV-Objekten ganz oben in den Doku-Trigger eine Copyright-Zeile + Leerzeile hinzufügen.
Idealerweise soll auch die VersionList für ein Add-On aktualisiert werden oder wenigstens Datum und/oder Modified gesetzt werden, aber das ist kein Muss, das geht schließlich auch mit NAV-Boardmitteln.
Hat jemand zufällig ein fertiges cmdlet dafür?

(Warum PowerShell: Die Herausforderung ist, dass ein Objekt ohne gefüllten Dokutrigger in der Textdatei keinen Dokutrigger besitzt. Suchen und Ersetzen geht außerdem nicht, weil das zeilenübergreifend funktionieren muss.)

Re: Powershell zum Einfügen von Copyright-Vermerk?

17. Januar 2018 16:40

Mit einem Powershell cmdlet kann ich dir nicht dienen, aber ich kann dir verraten, dass die nächste Version des Object Manager Advanced (OMA12) in der Lage sein wird, einen Eintrag im Doku-Trigger am Anfang (statt wie bisher am Ende) zu setzen.
Ursprünglich sollte OMA12 zu den NAV TechDays 2017 released werden. Da OMA12 aber zu NAV2018 kompatibel sein soll, lautete die letzte News "will be released later this year".
Ich habe gerade nochmal nachgesehen: Leider ist OMA12 immer noch nicht released und auch keine weitere Ankündigung.
Ich bin aber fest davon überzeugt, dass es "in Kürze" verfügbar sein wird.

Reijer hat dem Release den inoffiziellen Codenamen "The Timo Laesser release" verpasst, weil die meisten neuen Features und Verbesserungen von meinen Wunschlisten stammen.

Re: Powershell zum Einfügen von Copyright-Vermerk?

17. Januar 2018 16:53

Timo Lässer hat geschrieben:dass OMA12 in der Lage sein wird, einen Eintrag im Doku-Trigger am Anfang (statt wie bisher am Ende) zu setzen.

Das ist ja ganz schön, wenn OMA das bei Objektänderung automatisch tut - bei mir soll aber NUR der Eintrag im Dokutrigger ergänzt werden, nachträglich, als einzige Änderung sozusagen.
Ich warte schon sehnsüchtig auf die neue Version, aber die Aufgabe muss ich sehr bald bewältigen - zur Not manuell :roll:

Re: Powershell zum Einfügen von Copyright-Vermerk?

18. Januar 2018 01:37

Da trifft es sich ja gut, dass ich just einen Objektsplitter kreiert habe :wink: .
Für die Objekte ohne Documentation-Trigger solltest du hiermit schon mal weiterkommen, da reicht eine kleine Erweiterung um den zu erzeugen, die ich da mal dazugebaut habe.

Der Export der Objekte ist hierbei in den Unterordner SPLITNAVOBJCPYRT, ansonsten alles wie hier.

Der erzeugte Beispieltrigger sieht dann jeweils so aus:
Code:
    BEGIN
    {
     (c) Natalie's Software Enterprises

    }
    END.



Code:
function Split-NAVObjectFileDocuTrigger
{
    $ErrorActionPreference = "Stop"
    $PSDefaultParameterValues['*:ErrorAction']='Stop'
    Function Get-FileName($initialDirectory)
    {
        [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
   
        $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
        $OpenFileDialog.initialDirectory = $initialDirectory
        $OpenFileDialog.filter = "NAV Object Files (*.txt)|*.txt"
        $OpenFileDialog.ShowDialog() | Out-Null
        $OpenFileDialog.filename
    }
       
    $inputfile = Get-FileName "C:\temp" # This is the default path in OpenFile window.
    if ($inputfile -eq "") {throw 'Please select a file'}
     
    [decimal]$filesize = ((Get-Item $inputfile).length/1MB)
    $filesize =[math]::round($filesize,2)
    $LineCnt = $inputfile.count
    $inputfile = resolve-path $inputfile
    $WorkingFolder = Split-Path -Parent $inputfile
   

   
    if (Test-path "$WorkingFolder\SPLITNAVOBJCPYRT\")
    {Remove-Item -path "$WorkingFolder\SPLITNAVOBJCPYRT\" -Recurse -Force}

    Write-Host "Splitting NAV objects from $inputfile (Size: $filesize MB) to $WorkingFolder\SPLITNAVOBJCPYRT\, this may take a while..." -ForegroundColor Yellow
    $startime = date
   
    $Sr = new-object System.IO.StreamReader($inputfile,[system.text.encoding]::GetEncoding(850))
    [int]$ObjCnt = 0
    [int]$TabCnt = 0
    [int]$PagCnt = 0
    [int]$RepCnt = 0
    [int]$CodCnt = 0
    [int]$XmlCnt = 0
    [int]$ForCnt = 0
    [int]$DatCnt = 0
    [int]$QueCnt = 0
    [int]$MenCnt = 0
   

    $LastLine = ''
    while (-not $Sr.EndOfStream)
    {
        $Currline = $sr.ReadLine()
        if ($Currline.StartsWith('OBJECT'))
        {
            [String]$ObjectChar = $Currline.Substring(7,1)
            $ObjectLine = $currline.Split(' ')
            $ObjCnt++
            Switch ($ObjectChar)
            {
                'T' {$TabCnt++}
                'P' {$PagCnt++}
                'R' {$RepCnt++}
                'C' {$CodCnt++}
                'X' {$XmlCnt++}
                'F' {$ForCnt++}
                'D' {$DatCnt++}
                'Q' {$QueCnt++}
                'M' {$MenCnt++}
       
            }
            $ObjectFileName = $ObjectLine[1].Substring(0,3).ToUpper() + $ObjectLine[2] + ".TXT"
            $Objectfile = New-Item -path "$WorkingFolder\SPLITNAVOBJCPYRT\$ObjectFileName" -type file -force
            IF (Test-Path $ObjectFile) {Remove-Item $ObjectFile}
           
            $sw = new-object System.IO.Streamwriter($Objectfile,$false,[system.text.encoding]::GetEncoding(850))
        }
       
        if (($Currline -eq '    END.') -and ($LastLine -eq '    BEGIN'))
        {   
            $sw.writeline('    {')
         
            $sw.writeline("     (c) Natalie's Software Enterprises" )
            $sw.writeline()
            $sw.writeline('    }')
            $sw.writeline('    END.')
            $LastLine = $CurrLine
        }
         
        elseif (-not $Currline.StartsWith('}'))
        {
            $sw.writeline($Currline)
            $Lastline = $CurrLine
        }
        else
        {
            $sw.writeline($Currline)
            $Lastline = $CurrLine
            $sw.writeline()
            $sw.Flush()

        }
           
       
    }

   
   
$endtime = date
$time = $endtime - $startime
Write-Host "$ObjCnt NAV objects splitted to $WorkingFolder\SPLITNAVOBJCPYRT\ in $($time.Minutes)m:$($time.Seconds)s:$($time.Milliseconds)ms" -ForegroundColor Yellow
Write-Host "Tables: $TabCnt" -ForegroundColor Yellow
Write-Host "Pages: $PagCnt" -ForegroundColor Yellow
Write-Host "Reports: $RepCnt" -ForegroundColor Yellow
Write-Host "Codeunits: $CodCnt" -ForegroundColor Yellow
Write-Host "XMLPorts: $XMLCnt" -ForegroundColor Yellow
Write-Host "MenuSuites: $MenCnt" -ForegroundColor Yellow
if ($ForCnt -gt 0)
{Write-Host "Forms: $ForCnt" -ForegroundColor Yellow}
if ($DatCnt -gt 0)
{Write-Host "Dataports: $DatCnt" -ForegroundColor Yellow}   
$sr.Close()
$sr.Dispose()
$sw.close()
$sw.Dispose()
Invoke-item "$WorkingFolder\SPLITNAVOBJCPYRT\"
}


Für die Objekte mit vorhandenem Documentation-Trigger wird es natürlich komplizierter, da muss ja der ganze Trigger durchgekämmt werden, wenn die Zeilen oben eingeschoben werden müssen. [Edit]: Das fertige Skript gibt es jetzt auch :greenarrow: Dokumentations-Trigger pflegen

Re: Powershell zum Einfügen von Copyright-Vermerk?

18. Januar 2018 11:23

Natalie hat geschrieben:Das ist ja ganz schön, wenn OMA das bei Objektänderung automatisch tut - bei mir soll aber NUR der Eintrag im Dokutrigger ergänzt werden, nachträglich, als einzige Änderung sozusagen.
Ich warte schon sehnsüchtig auf die neue Version, aber die Aufgabe muss ich sehr bald bewältigen - zur Not manuell :roll:

Vorgesehen ist die Objekt-Dokumentation natürlich bei "Assign Modifications", man kann aber auch Objekte manuell (ohne Modifications) einem Projekt zuordnen und dann über die Zeilenfunktion "Add Documentation Tag" die Dokumentation in den zugeordneten Objekten hinzufügen.

Was das Release-Datum angeht, habe ich gerade nochmal bei Reijer nachgefragt.
Entweder es verzögert sich (aus welchen Gründen auch immer), oder sie haben es nur noch nicht auf MyIDYN hochgeladen.
Ich hoffe ja auf letzteres.

Re: [Gelöst] Powershell zum Einfügen von Copyright-Vermerk?

18. Januar 2018 18:18

Eine harte Nuss :-) , aber mein Skript dazu ist nun hier verfügbar.

Re: Powershell zum Einfügen von Copyright-Vermerk?

29. Januar 2018 09:24

Timo Lässer hat geschrieben:Ich habe gerade nochmal nachgesehen: Leider ist OMA12 immer noch nicht released und auch keine weitere Ankündigung.
Ich bin aber fest davon überzeugt, dass es "in Kürze" verfügbar sein wird.

Es ist so weit, OMA 12.0 für NAV 2013 - 2018 ist draußen :-)

Re: Powershell zum Einfügen von Copyright-Vermerk?

29. Januar 2018 12:03

Natalie hat geschrieben:Es ist so weit, OMA 12.0 für NAV 2013 - 2018 ist draußen :-)

Ich weiß, trotzdem danke ich dir für den Hinweis, denn somit wissen es jetzt die anderen auch. 8-)
Ich bin gerade schon dabei unsere Datenbanken zu aktualisieren. (Sind ja zur Zeit noch "nur" 3x5)