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
Community-Interessensgruppen sind jetzt von Yammer zu Microsoft Viva Engage gewechselt. Um an einer Viva Engage-Community teilzunehmen und an den neuesten Diskussionen teilzunehmen, füllen Sie das Formular "Anfordern des Zugriffs auf 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 – Diese Klassen werden in X++ implementiert. Sie sind im > Codeklassenknoten im Anwendungs-Explorer verfügbar.
- Systemklassen – Diese Klassen werden manchmal als Kernelklassen bezeichnet. Sie werden im Anwendungs-Explorer unter dem Knoten "Systemdokumentationsklassen>" aufgeführt. Der Quellcode für diese Klassen ist nicht verfügbar. Eine Liste der Systemklassen finden Sie unter API, Klasse und Tabellenreferenz.
Typische Struktur einer Anwendungsklasse
Die folgenden Codeblocktypen sind Standard für Anwendungsklassen:
- Klassen- und Variablendeklarationen: Die Klassendeklaration enthält Modifizierer, z. B. öffentlich, privat und erweitert.
- Variablendeklarationen: Dies sind die Feldmmber für Objekte, die aus der Klasse erstellt werden. Wenn Sie das Schlüsselwort für eine Klasseninstanzvariable eingeben, kann IntelliSense eine Liste der Member anzeigen.
- neue Methode: Diese Methode erstellt eine Instanz der Klasse. Der Konstruktor kann nur mithilfe des neuen Schlüsselworts aufgerufen werden. Abgeleitete Klassen können die neue Methode ihres Konstruktors aufrufen, indem sie den Verweis auf die Supermethode aufruft. Weitere Informationen finden Sie unter X++-Vererbung.
- finalize-Methode : Mit dieser Methode wird eine Instanz der Klasse abgeschlossen. Diese Methode ist die Destruktormethode. Es ist jedoch nur ein Destruktor nach Konvention. Das System ruft die Finalize-Methode während der Garbage Collection nicht automatisch auf.
Zusätzliche Methoden für eine Klasse weisen die folgenden Typen auf:
- Instanzmethoden
- Statische Methoden
- Hauptmethoden
Methoden können für viele Arten von Elementen erstellt werden. Hier sind einige Beispiele:
- Klassen
- Maps
- Ansichten
- Datensätze
- Formulare
- Fragen
Substituieren von Anwendungsklassen für Systemklassen
Verwenden Sie die ersatzanwendungsklassen anstelle der Systemklassen, die sie erweitern.
Im Anwendungs-Explorer weisen unter Systemdokumentationsklassen >mehrere Kernel- oder Systemklassen Namen auf, die mit einem Kleinbuchstaben x beginnen. Diese Klassen werden als X-Systemklassen bezeichnet. Beispiele für diese Systemklassen sind "xApplication " und "xVersionControl". Einige dieser Klassen werden durch Anwendungsklassen erweitert. Beispielsweise erweitert die Application-Klasse die xApplication-Systemklasse .
Die Klassen, die von X-Systemklassen abgeleitet werden, werden als Ersatzanwendungsklassen bezeichnet. Im Anwendungs-Explorer unterscheidet sich das Symbol neben den Ersatzanwendungsklassen unter dem Knoten "Klassen " vom Standardsymbol.
X-Systemklassen
Einige der ersatzanwendungsklassen sind einer speziellen globalen Variablen zugeordnet, die eine Instanz der Klasse darstellt. Die Appl-Variable verweist beispielsweise auf ein vorab instanziiertes Objekt aus der Application-Klasse . Der Vorteil der Appl-Variable besteht darin, dass das System das Objekt während des gesamten Sitzungsbereichs verwaltet. Ihr Code wäre weniger effizient, wenn die neue Application()- Syntax wiederholt verwendet wird, um eine Instanz der Application-Klasse abzurufen. Sie sollten die xApplication-Systemklasse nicht verwenden. Verwenden Sie stattdessen die Application Substitute-Anwendungsklasse .
Sie können mithilfe der folgenden Standardsyntax auf die statischen Member der Application-Klasse verweisen: Application::checkForNewBatchJobs(). Um jedoch auf die Instanzm der Application-Klasse zu verweisen, sollten Sie die Appl-Variable dieser Klasse verwenden, sofern vorhanden. Dieses Muster gilt für die meisten x-Systemklassen. Die Session Substitute-Anwendungsklasse ist eine Ausnahme, da keine spezielle globale Variable für "Session" vorhanden ist.
In der folgenden Tabelle sind die x-Systemklassen aufgeführt, die über eine entsprechende Ersatzanwendungsklasse verfügen. Die speziellen globalen Variablen werden auch für die Klassen mit einer angezeigt.
| Anwendungsklasse | x-system-Klasse | Globale Variable |
|---|---|---|
| Argumente | xArgs | Nicht anwendbar |
| Application | xApplication | Appl |
| ClassFactory | xClassFactory | classFactory |
| Firma | xCompany | appl.company |
| Global | xGlobal | Nicht anwendbar |
| Info | xInfo | Infolog |
| MenuFunction | xMenuFunction | Nicht anwendbar |
| Session | xSession | Nicht anwendbar |
| Versionskontrolle | xVersionControl | versionControl |
Beispiel für x-Systemklassen
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."
Batchverarbeitungsklassen
Sie implementieren Klassen mithilfe des Batchverarbeitungssystems und erweitern die RunBase - und RunBaseBatch-Klassen . Um die Schaltfläche "Serie " aus dem Dialogfeld " Batchverarbeitung " zu entfernen, verwenden Sie die Args::p armEnum-Methode . Es wird empfohlen, eine Klasse festzulegen, die als servergebundene Batchmethode ausgeführt werden soll. Servergebundene Batchmethoden sind sicherer als Batchmethoden, die aus den folgenden Gründen nicht servergebunden sind:
- Die Methode wird mithilfe der Berechtigungen des Benutzers ausgeführt, der die Methode übermittelt hat.
- Die Methode kann nur bestimmte Info - und globale Klassenmethoden verwenden, um mit dem Client zu interagieren, der ihn verarbeitet. Diese Einschränkung beschränkt die Interaktion mit dem Client.
Aktivieren einer Klasse zum Ausführen als servergebundene Batchmethode
Erstellen Sie eine Klasse, die die RunBaseBatch-Klasse erweitert.
Überschreiben Sie die RunBaseBatch.runsImpersonated-Methode , um einen Wert von "true" zurückzugeben, wie im folgenden Beispiel gezeigt.
public boolean runsImpersonated() { return true; }Vergewissern Sie sich, dass die Klasse nur die folgenden Info - und globalen Klassenmethoden aufruft:
- add
- Info.copy
- Info.cut
- Info.import
- Info.export
- Info.line
- Info.num
- Global::error
- Global::info
- Global::warning
Die Methoden Info.line und Info.num werden von der xInfo-Klasse geerbt.
Entfernen der Schaltfläche "Serie" aus dem Dialogfeld "Batchverarbeitung"
Wenn Sie eine Klasse mithilfe des Batchverarbeitungssystems implementieren, können Sie die Serienschaltfläche entfernen, indem Sie die Args.parmEnum-Methode aufrufen und den Wert der NoYes:: Ja-Systemenumeration übergeben. Die NoYes-Systemaufzählung bestimmt, ob die Schaltfläche " Serie " aus dem Dialogfeld entfernt wird. Der Standardwert ist "NoYes::No".
Im folgenden Beispiel wird die InventTransferMultiShip-Klasse implementiert. Die BatchDialog::main-Methode erstellt das Dialogfeld " Batchverarbeitung ".
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);
}
Bildbearbeitungsklassen
Mit zwei Systemklassen können Sie Grafiken und Symbole bearbeiten: Bild und Bildliste.
- Bild – Mit dieser Klasse können Sie einzelne Bilder laden, speichern und bearbeiten. Sie können z. B. einen Bildschirm erfassen und als Bild speichern, ein Bild zuschneiden oder drehen oder die Farbtiefe bearbeiten.
- Bildliste – Mit dieser Klasse können Sie mit einer Reihe von Bildern arbeiten, die allgemeine Eigenschaften aufweisen, z. B. größe und Transparenzfarbe. Sie können die Bildlisten anzeigen, die in den ImageListAppl-Anwendungsklassen verwendet werden.
Abfrageobjektmodell
Das Abfrageobjektmodell enthält Klassen, die zum Definieren und Ausführen einer Abfrage verwendet werden. Die Abfrageobjekte werden verwendet, um die Abfragedatenquelle, die zurückgegebenen Felder, Datensatzbereiche und Beziehungen zu untergeordneten Datenquellen zu definieren. Die Abfrageklassen sind beim Erstellen einer dynamischen Abfrage im Code sichtbarer, werden aber auch im Hintergrund verwendet, wenn Sie eine statische Abfrage im Anwendungs-Explorer erstellen.
In der folgenden Tabelle werden die Klassen im Abfrageobjektmodell beschrieben.
| Systemklasse | Description |
|---|---|
| QueryRun | Diese Klasse führt die Abfrage aus und ruft die Daten ab. |
| Query | 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 mehrere Datenquellen auf derselben Ebene in einer Abfrage vorhanden sind, werden separate SQL-Anweisungen erstellt und sequenziell ausgeführt. Wenn eine Datenquelle ein untergeordnetes Element einer anderen Datenquelle ist, wird eine Verknüpfung zwischen den beiden Datenquellen erstellt. |
| QueryBuildFieldList | Diese Klasse definiert die Felder, die aus der Datenbank zurückgegeben werden. Standardmäßig ist die Feldliste dynamisch, und alle Felder werden aus der Datenquellentabelle, -zuordnung 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 SUMME, ANZAHL und AVG für das Feldlistenobjekt angeben. |
| QueryBuildRange | Diese Klasse definiert eine Teilmenge von Datensätzen, die zurückgegeben werden, basierend auf einem einzelnen Feld. Ein Bereich wird in eine WHERE-Klausel in der SQL-Anweisung der Abfrage übersetzt. Wenn mehr als ein Feld verwendet wird, um die Abfrage (WHERE-Klausel ) einzuschränken, enthält die Datenquelle mehrere Bereiche. |
| QueryBuildDynalink | Diese Klasse enthält Informationen zu einer 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 SQL-Anweisung der Abfrage konvertiert. 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 für die übergeordnete Datenquelle. Die Funktion wird auch dann verwendet, wenn die beiden Datenquellen in zwei verschiedene Formen gesetzt werden, aber noch synchronisiert werden. |
| QueryBuildLink | 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 die SysDa-API auch verwenden, um Daten abzufragen.
Übersicht über Systemklassen
Die Quelle für Systemklassen ist nicht verfügbar. Eine Systemklasse kann die folgenden Merkmale aufweisen:
- Statische Methoden (oder Klassenmethoden)
- Dynamische Methoden
- Eigenschaften – Diese Eigenschaften sind Memberfunktionen, die zum Festlegen von Eigenschaften verwendet werden. Ein Beispiel ist LeftMargin.
Systemklassenmethoden können nicht überschreiben. Es ist nicht unsere Absicht, dass Sie die Systemklassen verwenden, um Ihre Anwendungsobjekte von Grund auf neu zu entwerfen. Verwenden Sie sie stattdessen, um die Standardfunktionalität im Anwendungs-Explorer zu erweitern oder zu ändern. Beispielsweise können Sie einem vorhandenen Bericht dynamisch zusätzliche Informationen hinzufügen. Alternativ können Sie die optionen ändern, die auf einer Seite verfügbar sind, basierend auf der Auswahl des Benutzers auf einer vorherigen Seite.
Auflistungsklassen
Mit den Auflistungsklassen können Sie Listen, Sätze, Strukturen, Zuordnungen und Arrays erstellen.
Anwendungsobjektklassen
Diese Systemklassen enthalten Funktionen, die immer aktiviert werden, wenn Sie den Anwendungs-Explorer zum Erstellen Ihrer Anwendung verwenden. Das System verwendet beispielsweise die FormDesign-Klasse , wenn Sie das Layout Ihres Formulars im Knoten "Designs " im Anwendungs-Explorer definieren. Mit diesen Klassen können Sie auch Anwendungsobjekte erstellen und ändern.
Integrationsklassen
Die Integration in die Umgebung wird in der Regel von Klassen implementiert. 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.
- E/A – Lesen und Schreiben externer Dateien.
- ODBCConnection – Eine ODBC-Schnittstelle (Open Database Connectivity) zu einer fremden Datenbank.