Willkommen auf schweda.net | EN | DE
 
 
 
 
 

In diesem Beitrag möchte ich zeigen, wie man mit Hilfe von Chain of command Pre- oder Post-Events ablösen kann.

Nachdem man sich das gewünschte Projekt erstellt/geöffnet hat kann man über das Kontextmeü des Projektes unter Add > New item eines neues Objekt vom Typ Class erstellen. Dieser Klasse gibt man noch einen Namen, wichtig dabei ist die Endung _Extension.

Screenshot

Danach steht eine einfache Klasse zur Verfügung, die sich wie folgt darstellt

class FMCustomer_DMO_Table_Extension
{
}

Nun ändern wir über das Attribut ExtensionOf die Klasse, ergänzen sie um den Modifier final. Solcherart gekennzeichnete Klassen werden auch als Augmentation-Klassen bezeichnet.

[ExtensionOf(tableStr(FMCustomer))]
final class FMCustomer_DMO_Table_Extension
{
}

Nun wechseln wir wieder in den Application Explorer, suchen uns dort jene Tabelle die wir erweitern wollen und erweitern des Methods-Knoten. Nun stellen wir uns auf die jeweilige Methode, im Beispiel die insert(), und wählen über das Kontextmenü die Option View Code aus.
Dadurch öffnet sich die Methode im Arbeitsbereich aus dem wir die Definition der Methode in die Zwischenablage kopieren.

public void insert()
{
}

Diesen Code fügen wir in der Extension-Klasse ein.

Danach fügen wir den Aufruf der Original-Methode in unseren Code ein

[ExtensionOf(tableStr(FMCustomer))]
final class FMCustomer_DMO_Table_Extension
{
    public void insert()
    {
       next insert();
    }
}

Anschließend kann man vor dem Aufruf von next() bzw. nach diesem Aufruf entsprechenden Code einfügen. Je nach Position dieses Codes haben wir sozusagen eine Pre- oder Post-Eventhandler abgebildet.

Im konkreten Beispiel wird vor dem Aufruf der Original insert()-Methode ein Feld ggf. mit einem Standardwert befüllt.

[ExtensionOf(tableStr(FMCustomer))]
final class FMCustomer_DMO_Table_Extension
{
    public void insert()
    {
        if ( !this.Email)
        {
            this.Email = "someone@somewhere.com";
        }

        next insert();
    }
}

Dieser Beitrag wurde basierend auf der Version 7.3 mit Platform-Update 12 und installiertem Fleet Management Sample Application erstellt.
 


Unter C:\Users\DeinBenutzername\Documents\Visual Studio 2015\Settings liegt eine XML-Datei namens DefaultConfig.xml.

In dieser Datei kann man im Knoten DefaultModelForNewProjects ein Model eintragen.

Hier muss der Name des Models eingetragen werden, nicht der Anzeigename.


Der folgende Code soll demonstrieren, wie man ein daten-ungebundenes StringControl mit einer Lookup-Funktionalität ausstatten kann.

[Control("String")]
class FormStringControl1
{
    public void lookup()
    {
        //super();
        SysTableLookup systableLookup =
            SysTableLookup::newParameters(tableNum(CustGroup), this);

        systableLookup.addLookupfield(fieldNum(CustGroup, CustGroup), true);
        systableLookup.addLookupfield(fieldNum(CustGroup, Name), false);
        systableLookup.performFormLookup();
    }
}

Das nächste Beispiel ist eine Erweiterung des obigen, wobei nun auch ein Query verwendet wird, um die anzuzeigenen Werte einzuschränken.

[Control("String")]
class FormStringControl1
{
    public void lookup()
    {
        //super();
        SysTableLookup systableLookup =
            SysTableLookup::newParameters(tableNum(CustGroup), this);
        Query query;

        query = new Query();
        query.addDataSource(tableNum(CustGroup));

        query.dataSourceTable(tableNum(CustGroup)).addRange(
            fieldNum(CustGroup, CustGroup)).value("??");
        systableLookup.parmQuery(query);

        systableLookup.addLookupfield(fieldNum(CustGroup, CustGroup), true);
        systableLookup.addLookupfield(fieldNum(CustGroup, Name), false);

        systableLookup.performFormLookup();
    }
}

 


In diesem Beitrag möchte ich kurz erläutern, wie man eine Form über eine Form-Extension anpassen kann.

Nachdem man sich ein entsprechendes Projekt erstellt oder geöffnet hat, sucht man sich über den Application Explorer die jeweilige Form aus dem AOT. Dabei sind die zur Verfügung stehenden Filtermöglichkeiten sehr nützlich.

Über das Kontextmenü der Form wählt man die Option Create extension.

Die so erstellte Form-Extension benennt man idealerweise gemäss den eigenen Namenskonventionen um. Im Beispiel habe ich den vorgeschlagenen Namen FMCustomer.Extension um das Kürzel DMO ergänzt.

Anschließend öffnet man sich diese Extension im Arbeitsbereich und passt diese wie gewünscht an. In meinem Beispiel füge ich ein zuvor erstelltes Feld der Tabelle per Drag & Drop zum Grid hinzu.

Screenshot


In diesem Beitrag möchte ich zeigen, wie man eine bestehende Tabelle um ein Feld erweitern kann.

Nachdem man sich ein entsprechendes Projekt erstellt oder geöffnet hat, sucht man sich über den Application Explorer die jeweilige Tabelle aus dem AOT. Dabei sind die zur Verfügung stehenden Filtermöglichkeiten sehr nützlich.

Screenshot

Anschließend wählt man im Kontextmenü der Tabelle die Option Create Extension aus.

Die so erstellte Table-Extension benennt man idealerweise gemäss den eigenen Namenskonventionen um. Im Beispiel hat ich den vorgeschlagenen Namen FMCustomer.Extension um das Kürzel DMO ergänzt.

Screenshot


ScreenshotMit Hilfe des nachstehenden Codesbeispiels möchte ich zeigen, wie man die Lookup-Methode eines Feldes vom Typ RecId/RefRecId überschreiben kann. Ein solches Lookup wird auch als Referencelookup bezeichnet.

Das Beispiel dient ganz konkret dazu eine Finanzdimension auswählen zu können, allerdings nur eine vom Typ Kostenstelle.


Erster Schritt bei Erstellen von Anpassungen in Microsoft Dynamics 365 for Finance and Operations (D365) ist die Erstellung eines Model bzw. eines Packages und eines Projektes.

Dazu in Visual Studio auf Dynamics 365 > Model Management > Create model klicken und den Assistenten wie in den nachfolgend gezeigten Screenshots durchlaufen.


Seiten 1 2 » 

 

 
Feeds
RSS RSS-Feed
 
 
Beiträge des aktuellen Monats
Oktober 2018
MoDiMiDoFrSaSo
1234567
891011121314
15161718192021
22232425262728
293031 
 
 
© 2006-2018 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu. Mehr dazu