Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Gemeinschaftsinteressengruppen sind inzwischen von Yammer zu Microsoft Viva Engage gewechselt. Um einer Viva Engage Community beizutreten und an den neuesten Diskussionen teilzunehmen, füllen Sie das Formular Request access to Finance and Operations Viva Engage Community aus und wählen Sie die Community aus, der Sie beitreten möchten.
In diesem Artikel wird die Bibliothek der Klassen in X++ beschrieben.
Es gibt zwei Arten von Klassen: Anwendungsklassen und Systemklassen.
- Anwendungsklassen – Implementieren Sie diese Klassen in X++. Sie finden sie unter dem Code > Classes-Knoten im Application Explorer.
- Systemklassen – Diese Klassen werden manchmal auch als Kernelklassen bezeichnet. Sie erscheinen unter dem Knoten Systemdokumentationsklassen > im Anwendungsexplorer. Du kannst nicht auf den Quellcode dieser Klassen zugreifen. Eine Liste der Systemklassen finden Sie unter API-, Klassen- und Tabellenreferenz.
Typischer Aufbau einer Anwendungsklasse
Die folgenden Codeblocktypen sind Standard für Anwendungsklassen:
- Klassen- und Variablendeklarationen: Die Klassendeklaration enthält Modifizierer, z. B. public, private und extends.
- Variablendeklarationen: Dies sind die Feldmember für Objekte, die aus der Klasse erstellt werden. Wenn Sie das Schlüsselwort this für eine Klasseninstanzvariable eingeben, kann IntelliSense eine Liste der Member anzeigen.
- new method: Diese Methode erstellt eine Instanz der Klasse. Du kannst den Konstruktor nur mit dem neuen Schlüsselwort aufrufen. Abgeleitete Klassen können die neue Methode ihres Konstruktors aufrufen, indem sie die Super-Methodenreferenz aufrufen. Weitere Informationen finden Sie unter X++-Vererbung.
- finalize-Methode : Diese Methode schließt eine Instanz der Klasse ab. Bei dieser Methode handelt es sich um die Destruktormethode. Es ist jedoch nur per Konvention ein Destruktor. Das System ruft die finalize-Methode während der Garbage Collection nicht automatisch auf.
Weitere Methoden für eine Klasse umfassen die folgenden Typen:
- Instanz-Methoden
- Statische Methoden
- Wichtigste Methoden
Man kann Methoden für viele Arten von Gegenständen entwickeln. Nachfolgend finden Sie hierzu einige Beispiele:
- Klassen
- Landkarten
- Ansichten
- Datensätze
- Formt
- Fragen
Ersetzen von Systemklassen durch Anwendungsklassen
Verwenden Sie die Ersatz-Anwendungsklassen anstelle der Systemklassen, die sie erweitern.
Im Anwendungs-Explorer haben mehrere Kernel- oder Systemklassen unter Systemdokumentationsklassen >Namen, die mit einem kleinen x beginnen. Diese Klassen werden als x-System-Klassen bezeichnet. Beispiele für diese Systemklassen sind xApplication und xVersionControl. Einige dieser Klassen werden um Anwendungsklassen erweitert. Die Application-Klasse erweitert z. B. die xApplication-Systemklasse .
Die Klassen, die von x-System-Klassen abgeleitet sind, werden als Ersatzanwendungsklassen bezeichnet. Im Anwendungs-Explorer unterscheidet sich das Symbol neben den Ersatzanwendungsklassen unter dem Knoten Klassen vom Standardsymbol.
X-System-Klassen
Einige der Ersatzanwendungsklassen sind mit einer speziellen globalen Variablen verknüpft, die eine Instanz der Klasse darstellt. Die appl-Variable verweist z. B. auf ein vorab instanziiertes Objekt aus der Application-Klasse . Der Vorteil der Variablen appl besteht darin, dass das System das Objekt während des gesamten Umfangs Ihrer Sitzung beibehält. Der Code wäre weniger effizient, wenn er wiederholt die neue Application()-Syntax verwenden würde, um eine Instanz der Application-Klasse abzurufen. Benutze nicht die xApplication-Systemklasse . Verwenden Sie stattdessen die Anwendungsersatzklasse Application .
Sie können auf die statischen Member der Application-Klasse verweisen, indem Sie die folgende Standardsyntax verwenden: Application::checkForNewBatchJobs(). Um jedoch auf die Instanzmitglieder der Anwendungsklasse zu verweisen, verwenden Sie die Appl-Variable dieser Klasse, falls sie existiert. Dieses Muster gilt für die meisten x-System-Klassen. Die Session-Substitute-Anwendungsklasse ist eine Ausnahme, da es keine spezielle globale Variable für Session gibt.
In der folgenden Tabelle sind die x-system-Klassen aufgeführt, die über eine entsprechende Ersatzanwendungsklasse verfügen. Die speziellen globalen Variablen werden auch für die Klassen angezeigt, die eine haben.
| Application-Klasse | X-System-Klasse | Globale Variable |
|---|---|---|
| Argumente | xArgs | Nicht anwendbar |
| Anwendung | xAnwendung | Appl |
| ClassFactory | xClassFactory | classFactory |
| Unternehmen | xUnternehmen | appl.company |
| Global | xGlobal | Nicht anwendbar |
| Info | xInfo | Infolog |
| MenüFunktion | xMenu-Funktion | Nicht anwendbar |
| Sitzung | xSitzung | Nicht anwendbar |
| Versionskontrolle | xVersionControl | Versionskontrolle |
Beispiel für x-system-Klassen
Das folgende Beispiel zeigt die Syntax für die Verwendung mehrerer spezieller Variablen, die auf Instanzen der Ersatzanwendungsklassen verweisen.
TreeNode treeNode;
Args args;
FormRun formRun;
// appl variable
info(appl.buildNo());
// company variable
appl.company().reloadRights();
// infolog variable
treeNode = infolog.findNode("\\forms\\custTable");
info(treeNode.AOTgetProperty("Name"));
// Output is "CustTable".
// classFactory variable
args = new Args(formstr(Batch));
formRun = classFactory.formRunClass(args);
formRun.init();
formRun.run();
formRun.detach();
info("Method is ending. This is a message in the Infolog.");
// Output is "Method is ending. This is a message in the Infolog."
Klassen für die Batchverarbeitung
Implementieren Sie Klassen mithilfe des Batch-Verarbeitungssystems und durch Erweiterung der RunBase - und RunBaseBatch-Klassen . Um den Rekurrence-Button aus dem Batch-Verarbeitungs-Dialogfeld zu entfernen, verwenden Sie die Methode Args::p armEnum . Bestimmen Sie eine Klasse, die als servergebundene Batch-Methode ausgeführt wird. Servergebundene Batchmethoden sind aus folgenden Gründen sicherer als Batchmethoden, die nicht servergebunden sind:
- Die Methode wird unter Verwendung der Berechtigungen des Benutzers verwendet, der die Methode eingereicht hat.
- Die Methode kann nur bestimmte Methoden derInfo- und Global-Klasse verwenden, um mit dem Client zu interagieren, der sie verarbeitet. Diese Einschränkung schränkt die Interaktion mit dem Client ein.
Aktivieren der Ausführung einer Klasse als servergebundene Batchmethode
Erstellen Sie eine Klasse, die die RunBaseBatch-Klasse erweitert.
Überschreiben Sie die RunBaseBatch.runsImpersonated-Methode , um true zurückzugeben, wie im folgenden Beispiel gezeigt.
public boolean runsImpersonated() { return true; }Vergewissern Sie sich, dass die Klasse nur die folgenden Methoden der Info-Klasse und der Global-Klasse aufruft:
- hinzufügen
- Info.copy
- Info.cut
- Info.import
- Info.export
- Info.line
- Info.num
- Global::Fehler
- Global::info
- Global::warning
Die Methoden Info.line und Info.num werden von der xInfo-Klasse geerbt.
Entfernen Sie den Rekurrence-Button aus dem Batch-Verarbeitungs-Dialogfeld
Wenn Sie eine Klasse mit dem Batch-Verarbeitungssystem implementieren, entfernen Sie den Recurrence-Button , indem Sie die Args.parmEnum-Methode aufrufen und den NoYes:: Yes-System-Enumerationswert übergeben. Die NoYes-Systemaufzählung bestimmt, ob die Schaltfläche Wiederholung aus dem Dialogfeld entfernt wird. Der Standardwert ist NeinJa::Nein.
Im folgenden Beispiel wird die InventTransferMultiShip-Klasse implementiert. Die BatchDialog::main-Methode erstellt das Dialogfeld Stapelverarbeitung .
static void noRecurrenceButton(Args _args)
{
Args a;
InventTransferMultiShip inventTransferMultiShip;
a = new Args();
inventTransferMultiShip = InventTransferMultiShip::construct();
a.caller(inventTransferMultiShip);
a.parmEnum(NoYes::Yes);
BatchDialog::main(a);
}
Klassen zur Bildbearbeitung
Zwei Systemklassen ermöglichen es dir, Grafiken und Icons zu bearbeiten: Image und Imagelist.
- Image – Mit dieser Klasse können Sie einzelne Bilder laden, speichern und bearbeiten. Zum Beispiel können Sie einen Bildschirm aufnehmen und als Bild speichern, ein Bild zuschneiden oder drehen oder die Farbtiefe ändern.
- Imagelist – Mit dieser Klasse können Sie mit einer Reihe von Bildern arbeiten, die über gemeinsame Eigenschaften verfügen, z. B. Größe und Transparenzfarbe. Sie können die Bildlisten ansehen, die die ImageListAppl-Anwendungsklassen verwenden.
Modell des Abfrageobjekts
Das Abfrageobjektmodell enthält Klassen, die Sie verwenden, um eine Abfrage zu definieren und auszuführen. Verwenden Sie die Abfrageobjekte, um die Abfrage-Datenquelle, die zurückgegebenen Felder, Datensätze und Relationen zu Kinddatenquellen zu definieren. Die Abfrageklassen sind sichtbarer, wenn man eine dynamische Abfrage im Code erstellt, aber sie werden auch im Hintergrund verwendet, wenn man eine statische Abfrage im Application Explorer erstellt.
In der folgenden Tabelle werden die Klassen im Abfrageobjektmodell beschrieben.
| System-Klasse | Beschreibung |
|---|---|
| AbfrageLauf | Diese Klasse führt die Abfrage aus und ruft die Daten ab. |
| Frage | Diese Klasse enthält einige Eigenschaften und verfügt über eine oder mehrere verwandte Datenquellen. Dies ist die oberste Ebene der Abfragedefinition. |
| QueryBuildDataSource | Diese Klasse definiert den Zugriff auf eine einzelne Datenquelle in der Abfrage. Wenn es in einer Abfrage mehr als eine Datenquelle auf derselben Ebene gibt, erzeugt die Abfrage separate SQL-Anweisungen und führt sie sequentiell aus. Wenn eine Datenquelle ein Kind einer anderen Datenquelle ist, erzeugt die Abfrage einen Join zwischen den beiden Datenquellen. |
| QueryBuildFieldList | Diese Klasse definiert die Felder, die von der Datenbank zurückgegeben werden. Standardmäßig ist die Feldliste dynamisch, und alle Felder werden aus der Datenquellentabelle, -karte oder -ansicht zurückgegeben. Jede Datenquelle verfügt nur über ein QueryBuildFieldList-Objekt . Dieses Objekt enthält Informationen zu allen ausgewählten Feldern. Sie können Aggregatfunktionen wie SUM, COUNT und AVG für das Feldlistenobjekt angeben. |
| AbfrageBuildBereich | Diese Klasse definiert eine Teilmenge von Datensätzen, die auf Basis eines einzigen Feldes zurückgegeben werden. Ein Bereich wird in der SQL-Anweisung der Abfrage in eine WHERE-Klausel übersetzt. Wenn mehr als ein Feld zur Begrenzung der Abfrage verwendet wird (WHERE-Klausel ), enthält die Datenquelle mehr als einen Bereich. |
| AbfrageBuildDynalink | Diese Klasse enthält Informationen über eine Beziehung (Einschränkung) zu einem externen Datensatz. Wenn die Abfrage ausgeführt wird, werden diese Informationen in zusätzliche Einträge in der WHERE-Klausel der Abfrage-SQL-Anweisung umgewandelt. Diese Klasse kann nur in der übergeordneten Datenquelle einer Abfrage vorhanden sein. Formulare verwenden die Funktion, wenn zwei Datenquellen synchronisiert werden. Die untergeordnete Datenquelle enthält dann eine oder mehrere DLLs zur übergeordneten Datenquelle. Die Funktion wird auch dann verwendet, wenn die beiden Datenquellen in zwei verschiedenen Formen dargestellt werden, aber dennoch synchronisiert sind. |
| AbfrageBuildLink | Diese Klasse gibt die Beziehung zwischen den beiden Datenquellen in der Verknüpfung an. Diese Klasse kann nur in einer untergeordneten Datenquelle vorhanden sein. |
Sie können auch die SysDa-API verwenden, um Daten abzufragen.
Übersicht über Systemklassen
Die Quelle für Systemklassen ist nicht verfügbar. Eine Systemklasse kann folgende Merkmale aufweisen:
- Statische Methoden (oder Klassenmethoden)
- Dynamische Methoden
- Eigenschaften – Diese Eigenschaften sind Mitgliederfunktionen, die Eigenschaften festlegen. Ein Beispiel ist LeftMargin.
Systemklassenmethoden können nicht überschrieben werden. Es ist nicht beabsichtigt, dass du die Systemklassen nutzt, um deine Anwendungsobjekte von Grund auf neu zu entwerfen. Verwenden Sie sie stattdessen, um die Standardfunktionalität im Anwendungs-Explorer zu erweitern oder zu ändern. Sie können z. B. dynamisch zusätzliche Informationen zu einem vorhandenen Bericht hinzufügen. Alternativ können Sie die Optionen, die auf einer Seite verfügbar sind, basierend auf der Auswahl des Benutzers auf einer vorherigen Seite ändern.
Auflistungsklassen
Mit den Auflistungsklassen können Sie Listen, Sets, Strukturen, Zuordnungen und Arrays erstellen.
Klassen von Anwendungsobjekten
Diese Systemklassen enthalten Funktionen, die aktiviert werden, wann immer Sie den Application Explorer zur Erstellung Ihrer Anwendung verwenden. Das System verwendet z. B. die FormDesign-Klasse , wenn Sie das Layout des Formulars im Knoten Entwürfe im Anwendungs-Explorer definieren. Diese Klassen ermöglichen es auch, Anwendungsobjekte zu erstellen und zu verändern.
Integrationsklassen
Klassen implementieren typischerweise die Integration mit der Umgebung. Hier sind einige Beispiele für die Klassen in dieser Kategorie:
- COM – Der Aufruf von Methoden für COM-Objekte.
- DLL – Der Aufruf von Microsoft Windows DLL-Funktionen.
- IO – Lesen und Schreiben externer Dateien.
- ODBCConnection – Eine Open Database Connectivity (ODBC)-Schnittstelle zu einer fremden Datenbank.