PowerShell: C/AL-Objekte in AL umwandeln

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: C/AL-Objekte in AL umwandeln

Beitragvon Kowa » 21. Dezember 2017 13:55

Als Alternative zu diesem von Waldo hier ein Skript, welches ohne weitere Module auskommt, also nur mit den von bei der Installation mitgelieferten Cmdlets arbeitet und sich die Objekte nicht ĂĽber einen Dienst, sondern direkt aus der Datenbank holt.

Mit dieser Funktion können Objektpakete aus einer NAV 2018 Datenbank mit einem Filter (im Beispiel nur auf die Versionsliste, ist beliebig anpassbar)
z.B. so
Code: Alles auswählen
ID=..49999;"Version List=*XYZ*"

oder so
Code: Alles auswählen
Type=Page|Codeunit|Report;ID=55555..55666;"Name=*SEPA*";"Version List=*XYZ*"

exportiert und in AL umgewandelt werden. DELTA-Dateien werden hier nicht gebildet, dieses ist also nicht zur Erzeugung von Modification-Dateien fĂĽr Extensions gedacht, das Skript dazu ist hier.


Da das Skript als Funktion geschrieben ist, braucht man hier nur die letzte Zeile mit den eigenen Parametern versorgen. Das exportierte Objektpaket wird im Arbeitsordner in den Unterordner Split zerlegt und die konvertierten Dateien in AL abgelegt.
Alconv.png
Alconv.png (4.82 KiB) 1911-mal betrachtet

ALconversion.png



Code: Alles auswählen
[string]$MyEnviron = [Environment]::OSversion.Version.ToString(3) ; [bool]$OldEnviron = ($MyEnviron.substring(0,3) -eq '6.1')
function Export-NAV2ALfile
{
[CmdletBinding()]param (
[String]$WorkingFolder,
[String]$ExportFile,
[String]$Server,
[String]$Database,
[String]$Filter )
$LogFile = "$WorkingFolder\Log_$ExportFile"
$ExportFile = "$WorkingFolder\$ExportFile"
if (Test-path "C:\Program Files (x86)\Microsoft Dynamics 365 Business Central" -PathType Container)
{$NAVide = Import-Module "C:\Program Files (x86)\Microsoft Dynamics 365 Business Central\130\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1"}
else
{$NAVide = Import-Module "C:\Program Files (x86)\Microsoft Dynamics NAV\110\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1" -WarningAction SilentlyContinue | out-null}

if (Test-Path "$WorkingFolder\navcommandresult.txt") {Remove-Item "$WorkingFolder\navcommandresult.txt"}
if (test-path $ExportFile) {remove-item $ExportFile}

if (Test-path "C:\Program Files (x86)\Microsoft Dynamics 365 Business Central" -PathType Container) {$NAVFolder = "C:\Program Files (x86)\Microsoft Dynamics 365 Business Central\130\RoleTailored Client"}
else
  {$NAVFolder = "C:\Program Files (x86)\Microsoft Dynamics NAV\110\RoleTailored Client"}

$exportfinsqlcommand = """$NAVFolder\finsql.exe"" command=ExportToNewSyntax,file=$ExportFile,servername=$Server,database=$Database,Logfile=$LogFile"
if ($Filter -ne "") {$exportfinsqlcommand = "$exportfinsqlcommand,filter=$Filter"}
$Command = $exportfinsqlcommand
Write-Host -ForegroundColor Green 'Export Objects with:'
Write-host -ForegroundColor Gray "  $Command"
cmd /c $Command
$ExportFileExists = Test-Path "$ExportFile"
If (-not $ExportFileExists)
{
write-error "Error on exporting to $ExportFile.  Look at the information below."
if (Test-Path "$WorkingFolder\navcommandresult.txt"){Get-Content "$WorkingFolder\navcommandresult.txt"}
if (Test-Path $LogFile) {Get-Content $LogFile}
 break
}
else
{
$NAVObjectFile = Get-ChildItem $ExportFile
if ($NAVObjectFile.Length -eq 0) {Remove-Item $NAVObjectFile}
if (Test-Path "$WorkingFolder\navcommandresult.txt") {Get-Content "$WorkingFolder\navcommandresult.txt"}
}
$SplitDir = "$WorkingFolder\Split"
Write-Host "Splitting objects to $SplitDir"
Split-NAVApplicationObjectFile -Source $ExportFile -Destination $SplitDir -force
$Convertcommand = """$NAVFolder\txt2al.exe"" --source=""$WorkingFolder\Split"" --target=""$WorkingFolder\AL"" --rename"
$Command = $Convertcommand
Write-Host -ForegroundColor Green 'Convert objects with:'
Write-host -ForegroundColor Gray "  $Command"
cmd /c $Command
}
Export-NAV2ALfile -WorkingFolder C:\MyWorkingFolder -ExportFile MyNAVObjects.txt  -Server MyServer -Database MyDatabase  -Filter "Version List=*MyAddOn*"
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

Re: PowerShell: C/AL-Objekte in AL umwandeln

Beitragvon Kowa » 2. Oktober 2018 10:25

Mit dem Release von D365BC On Premises haben sich die Installationspfade

  • alt: …\Microsoft Dynamics NAV\
  • neu: …\Microsoft Dynamics 365 Business Central\
generell geändert (bei Client, Server usw., auch wenn die jeweiligen PowerShell-Module weiterhin NAV im Namen tragen :-) ). Das muss beim Ermitteln der Variablen $NAVide und $NAVfolder berücksichtigt werden. Das habe ich im obigen Skript entsprechend ergänzt. Da D365BC Cloud als Version 12.0 ab dem Erstrelease am 01.04. lief, gibt es nun hier On-Prem einen Sprung von 110 auf 130.

Code: Alles auswählen
if (Test-path "C:\Program Files (x86)\Microsoft Dynamics 365 Business Central" -PathType Container)
{$NAVide = Import-Module "C:\Program Files (x86)\Microsoft Dynamics 365 Business Central\130\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1"}
else
{$NAVide = Import-Module "C:\Program Files (x86)\Microsoft Dynamics NAV\110\RoleTailored Client\Microsoft.Dynamics.Nav.Model.Tools.psd1" -WarningAction SilentlyContinue | out-null}


bzw.

Code: Alles auswählen
if (Test-path "C:\Program Files (x86)\Microsoft Dynamics 365 Business Central" -PathType Container) {$NAVFolder = "C:\Program Files (x86)\Microsoft Dynamics 365 Business Central\130\RoleTailored Client"}
else
  {$NAVFolder = "C:\Program Files (x86)\Microsoft Dynamics NAV\110\RoleTailored Client"}
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