Wie in meinem letzten Beitrag zu diesem Thema berichtet, ist es möglich Business Central mit dem Common Data Service zu verbinden, sodass die Daten zwischen beiden Datenbanken ausgestauscht werden können. 

Heute möchte ich auch einen kurzen Überblick darüber geben, wie ihr neue Felder in bestehenden Business Central Tabellen erweitern könnt. 

Wie Microsoft online in der Dokumentation erklärt, ist dazu die einfachste Lösung der Einsatz des AL Table Proxy Generator Tools.

Persönlich finde ich, ist das Beispiel selbst, dass auf der Webseite verwendet wird etwas unpraktisch. Der Grund liegt darin, dass man eine bestimte App registrieren muss um dieses Beispiel verwenden zu können. Ich verwende daher mein eigenes Beispiel.

 

Ausgangslage

Die Entität Account im Common Data Service wurde um ein neues Attribut erweitern. 

Video Attribut anlegen (kostenpflichtig) 

Dokumentation Microsoft (kostenfrei)

Zielsetzung Attribut aus dem Common Data Service

Das neue Attribut soll als Feld in Business Central zur Verfügung stehen.

Wir integrieren es in diesem Beispiel nicht direkt in die Standard Feld Mapping synchronisation. Dieser Schritt hier ist aber Vorrausetzung dafür.

Lösung

Um ein neues Feld einzufügen muss man eine TableExtension erstellen. Die Tabelle Account ist vom Typ ExternalTable und kann mit Extensions erst seit kurzer Zeit wieder erweitert werden. 

Um eine TableExtension anzulegen könnt ihr

manuell vorgehen, oder 

für diesen Zweck das AL Table Proxy Tool kurz altpgen.exe verwenden. Das Tool liegt im Verzeichnis der Visual Studio Code AL Extension unter „C:\Users\|USER|\.vscode\extensions\ms-dynamics-smb.al-5.0.288712\bin (wenn bereits eine höhere Version zum Einsatz kommt, ist der Pfad gerinfügig anders).

Ihr solltet dafür am besten PowerShell Kenntnisse besitzen. Man kann die Anwendung zwar in einem normalen Shell Fenster auch verwenden, aber ich empfehle es zu skripten.

 

Zum Beispiel so: altpgen.ps1 – „get fields from common data service“

$ALProjectpath = "C:\Users\rec365\Documents\AL\CDSIntegrationLearn4D365"

$PackageCacheSymbolsPath = "C:\Users\rec365\Documents\AL\CDSIntegrationLearn4D365\.alpackages"

$CDSServiceURL = "https://orgxxxxx.crm4.dynamics.com/"

#$Entities = "account,systemuser,businessunit,team"

$altpgen = "C:\Users\|USER|\.vscode\extensions\ms-dynamics-smb.al-5.0.288712\bin\altpgen.exe"

$Entities = "craca_l4dwebform"

$BaseID = 50140

$arg = "-project:$ALProjectpath -packagecachepath:$PackageCacheSymbolsPath -serviceuri:$CDSServiceURL -entities:$Entities -baseid:$BaseID"

$command = New-Object "Diagnostics.ProcessStartInfo"

$command.FileName = $altpgen

$command.Arguments = $arg

$command.UseShellExecute = $false

[diagnostics.process]::start($command)

Beim Ausführen, wird man natürlich aufgefordert sich anzumelden. Das Ergebnis daraus ist eine oder mehrere neue Dateien welche den Aufbau einer, oder mehrerer TableExtensions hat. 

Dies ist auch der Grund warum ich empfehle PowerShell zu verwenden und dies direkt in Visual Studio Code in einem AL-Projekt auszuführen. Muss aber nicht sein. Ist eine reine Empfehlung meinerseits.

Ergebnis: 

tableextension 50142 AccountExtension extends "CRM Account"

{
    Description = 'Ein Geschäft, das einen Kunden oder einen potenziellen Kunden darstellt. Das Unternehmen, mit dem Geschäftstransaktionen abgerechnet werden.';
    fields
    {
        field(10002; craca_L4DWebCustomer; Boolean)
        {
            ExternalName = 'craca_l4dwebcustomer';
            ExternalType = 'Boolean';
            Description = '';
            Caption = 'L4D Web Customer';
        }
    }
}

 

Bei Bedarf kann man, aber natürlich diese Datei nach seinen Wünschen anpassen. 

Es kommt zum Beispiel häufig vor, dass die Extension auch andere Felder enthält. Dies liegt daran, dass die Anwendung alle Felder erzeugt, die noch nicht in Business Central in der jeweiligen Tabelle angelegt sind.

Hier kurzer Auszug dieser Möglichkeiten

 

Ergebnis

Um das neue Feld am Ende auch tatsächlich verfügbar zu machen, muss die neue Table Extension als App natürlich bereit gestellt werden. Wenn ihr das Feld auch testen wollt, müsste man zusätzlich auch noch eine Page Extension anlegen, da das Feld sonst nirgends angezeigt wird. 

Beispiel Page Extension

pageextension 50142 MyExtension extends "CRM Account List"
{
    layout
    {
        // Add changes to page layout here
        addafter(Name)
        {
            field(craca_L4DWebCustomer; craca_L4DWebCustomer)
            {
                ApplicationArea = All;
                Caption = 'Web Kunde';
            }
        }
    }
}