Code zur Erweiterung eines Frameworks entwickeln
Wenn Sie das Verhalten eines Elements ändern müssen, erstellen Sie eine Erweiterung dafür. Für manche Elemente muss dafür Code geschrieben werden, z. B. wenn Sie einen Ereignishandler hinzufügen möchten. In anderen Fällen kann das Verhalten eines Elements durch eine Klassenerweiterung geändert werden.
Klassenerweiterungen
Um die mit der Tabelle verbundene Geschäftslogik zu erweitern, erstellen Sie eine Erweiterungsklasse. Wenn Sie der Tabelle ein weiteres ID-Feld hinzufügen möchten, das gefüllt werden soll, erstellen Sie einen Datenereignishandler für das Einfügen des Feldes. Anschließend implementieren Sie die Logik zum Ausfüllen des neuen Feldes in dem Ereignishandler. Sie können eine Klasse erstellen, die die Tabelle erweitert und den Zugriff auf die Felder und Methoden der Tabelle auf einfach lesbare Weise ermöglicht. Wenn Sie eine Klassenerweiterung erstellen, müssen Sie dieser das Attribut ExtensionOf und das Suffix _Extension hinzufügen und die Klasse als final kennzeichnen.
Das folgende Beispiel zeigt, wie Sie eine Klasse zum Erweitern von InventTable erstellen. Der erweiterten Klasse können dann Methoden hinzugefügt werden, in denen der Kommentar verwendet wird.
[ExtensionOf(tableStr(InventTable))]
final class InventTableNew_Extension
{
public void newDefaultInventLocationId()
{
//enter your code here
}
}
Ereignishandler
Mit einem Ereignishandler können Sie Code in ein Element schreiben oder kopieren, das infolge eines bestimmten Ereignisses ausgeführt wird, z. B. durch Löschen eines Datensatzes. Für manche Elemente, wie Tabellen und Formulare, wird im Designerfenster der Knoten Ereignisse angezeigt. Darunter sind alle mit dem Element verbundenen Ereignisse aufgeführt. Wenn Sie einem Element zusätzliche Verhaltensweisen hinzufügen möchten, sollten Sie eine Erweiterung des Elements erstellen und dem erweiterten Element einen Ereignishandler hinzufügen.
Die folgenden Methoden eignen sich für Ereignishandler, die aus der Tabelle CustTable abgerufen werden. Diese Methoden können kopiert und dem erweiterten Element oder der Klasse hinzugefügt werden. Klicken Sie hierfür im Element-Designer mit der rechten Maustaste auf das Ereignis, und wählen Sie Ereignishandlermethode kopieren aus.
- Ereignis
OnDeleted– Dies ist ein Post-Event-Handler, der beim Löschen eines Datensatzes in der Tabelle ausgelöst wird. Sie können damit beispielsweise nach dem Löschen eines Datensatzes eine Infolog-Nachricht anzeigen.
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::Deleted)]
public static void CustTable_onDeleted(Common sender, DataEventArgs e)
{
}
- Ereignis
OnInserting: Wird beim Einfügen von Daten ausgelöst. Es kann beispielsweise ausgelöst werden, wenn Sie in Finanz‑ und Betriebs-Apps einen neuen Kunden hinzufügen.
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::Inserting)]
public static void CustTable_onInserting(Common sender, DataEventArgs e)
{
}
- Ereignis
OnValidatedWrite– Dies ist ein Post-Event-Handler, der nach einer Dateneingabe ausgelöst wird. Damit werden die auf eine Seite geschriebenen Daten validieren, um beispielsweise durch Prüfung des Geburtsdatums sicherzustellen, dass ein Kunde mindestens 18 Jahre alt ist.
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[DataEventHandler(tableStr(CustTable), DataEventType::ValidatedWrite)]
public static void CustTable_onValidatedWrite(Common sender, DataEventArgs e)
{
}
Befehlskette
Sie können die in der zu erweiternden Basisklasse definierte Methoden mit Logik umschließen. Außerdem können Sie die Logik öffentlicher und geschützter Methoden erweitern, ohne Ereignishandler verwenden zu müssen.
Zum Umschließen einer Methode können Sie auf öffentliche und geschützte Methoden sowie Variablen der Basisklasse zugreifen. Wenn Sie eine Methode mit einem Wrapper umschießen und das Schlüsselwort next verwenden, wird eine Befehlskette erstellt.
Die Befehlskette ist ein Entwurfsmuster, bei dem eine Anforderung durch mehrere Empfängern verarbeitet wird. Mit einer Erweiterungsklasse umschließen Sie geschützte oder öffentliche Methoden von Klassen, Tabellen, Datenentitäten und Formularen. Beim Umschließen von Methoden sind gewisse Einschränkungen zu berücksichtigen:
- Die Wrapper-Methode muss dieselbe Signatur wie die Basismethode haben.
- Wenn Sie Formularklassen erweitern, können nur Methoden auf der Stammebene umschlossen werden, nicht aber in verschachtelten Klassen definierte Methoden.
Wrapper-Methoden in einer Erweiterungsklasse müssen immer next aufrufen, sodass in der Befehlskette immer die Methode next und am Ende die ursprüngliche Implementierung aufgerufen werden. Dies stellt sicher, dass jede Methode in der Befehlskette zum Ergebnis beiträgt. Die Methode muss next() bedingungslos aufrufen.
