Willkommen auf schweda.net | EN | DE
 
 
 
 
 

Im folgenden Beitrag möchte ich zeigen, wie man mit Hilfe eines Events eine Methode einer Tabelle erweitern kann.

Nachdem man sich das gewünschte Projekt erstellt/geöffnet hat kann man über das Kontextmenü 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 öffnen über das Kontextmenü der Tabelle und der Option Open designer diese im Arbeitsbereich.

Screenshot

Hier erweitern wir den Knoten Events, wählen das jeweilige Event aus und wählen im Kontextmenü dieses Events - im Beispiel das onValidatingWrite() - die Option Copy event handler method.

Dadurch wird ein Code-Snippet in die Zwischenablage kopiert welches wir in unserer Augmentation-Klasse einfügen können.

[ExtensionOf(tableStr(FMCustomer))]
final class FMCustomer_DMO_Table_Extension
{
    [DataEventHandler(tableStr(FMCustomer), DataEventType::ValidatingWrite)]
    public static void FMCustomer_onValidatingWrite(Common sender, DataEventArgs e)
    {
    }
}

Nun geht’s ans Umsetzen der eigentlichen Logik, im Beispiel habe ich eine sehr einfache Prüfung eines Feldes implementiert.

[ExtensionOf(tableStr(FMCustomer))]
final class FMCustomer_DMO_Table_Extension
{
    [DataEventHandler(tableStr(FMCustomer), DataEventType::ValidatingWrite)]
    public static void FMCustomer_onValidatingWrite(Common sender, DataEventArgs e)
    {
        FMCustomer fmCustomer = sender as FMCustomer;
        ValidateEventArgs args = e as ValidateEventArgs;
        boolean ret = args.parmValidateResult();

    If (ret)
        {
            if (fmCustomer.Email
                && strFind(fmCustomer.Email,
                    "@",
                    0,
                    strLen(fmCustomer.Email)) == 0)
            {
                ret = checkFailed("Invalid E-Mail.");
            }
        }

        args.parmValidateResult(ret);
    }
}

Der letzte Schritt ist nun der Build/Rebuild der Solution bzw. des Projektes und ein möglichst erfolgreicher Test der Anpassung.

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


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.


Seiten 1 2 » 

 

 
Feeds
RSS RSS-Feed
 
 
Beiträge des aktuellen Monats
Dezember 2018
MoDiMiDoFrSaSo
 12
3456789
10111213141516
17181920212223
24252627282930
31 
 
 
© 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