PowerShell: C/AL-Objekte in AL umwandeln
Verfasst: 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
oder so
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.
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:
ID=..49999;"Version List=*XYZ*"
oder so
- Code:
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.
- Code:
[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*"