Udostępnij przez


Biblioteka klas X++

Uwaga / Notatka

Grupy zainteresowań społeczności zostały teraz przeniesione z usługi Yammer do aplikacji Microsoft Viva Engage. Aby dołączyć do społeczności Viva Engage i wziąć udział w najnowszych dyskusjach, wypełnij formularz Żądanie dostępu do aplikacji Finance and Operations Viva Engage Community i wybierz społeczność, którą chcesz dołączyć.

W tym artykule opisano bibliotekę klas w języku X++.

Istnieją dwa rodzaje klas: klasy aplikacji i klasy systemowe.

  • Klasy aplikacji — te klasy są implementowane w języku X++. Są one dostępne w węźle Klasy kodu > w Eksploratorze aplikacji.
  • Klasy systemowe — te klasy są czasami nazywane klasami jądra. Są one wymienione w węźle Klasy dokumentacji > systemu w Eksploratorze aplikacji. Kod źródłowy dla tych klas nie jest dostępny. Aby uzyskać listę klas systemowych, zobacz Api, class i table reference (Dokumentacja interfejsu API, klasy i tabeli).

Typowa struktura klasy aplikacji

Następujące typy bloków kodu są standardowe dla klas aplikacji:

  • deklaracje klas i zmiennych: deklaracja klasy zawiera modyfikatory, takie jak publiczne, prywatne i rozszerzone.
  • deklaracje zmiennych: są to składowe pól dla obiektów skonstruowanych z klasy. Gdy wpiszesz słowo kluczowe w zmiennej wystąpienia klasy, funkcja IntelliSense może wyświetlić listę elementów członkowskich.
  • nowa metoda: ta metoda tworzy wystąpienie klasy. Konstruktor może być wywoływany tylko przy użyciu nowego słowa kluczowego. Klasy pochodne mogą wywoływać nową metodę konstruktora, wywołując odwołanie do super metody. Aby uzyskać więcej informacji, zobacz dziedziczenie X++.
  • finalizowanie metody: ta metoda finalizuje wystąpienie klasy. Ta metoda jest metodą destruktora. Jednak jest to destruktor tylko zgodnie z konwencją. System nie wywołuje automatycznie metody finalizowania podczas odzyskiwania pamięci.

Dodatkowe metody dla klasy mają następujące typy:

  • Metody wystąpienia
  • Metody statyczne
  • Metody główne

Metody można tworzyć na wielu rodzajach elementów. Oto kilka przykładów:

  • Klasy
  • Maps
  • Views
  • Zestawy danych
  • Formularze
  • Queries

Podstawianie klas aplikacji dla klas systemowych

Należy użyć klas aplikacji zastępczych zamiast klas systemowych, które rozszerzają.

W Eksploratorze aplikacji w obszarze Klasy dokumentacji > systemu kilka klas jądra lub systemu ma nazwy rozpoczynające się małymi literami x. Te klasy są nazywane klasami x-system. Przykłady tych klas systemowych to xApplication i xVersionControl. Niektóre z tych klas są rozszerzane przez klasy aplikacji. Na przykład klasa Application rozszerza klasę systemu xApplication .

Klasy pochodzące z klas x-systemowych są nazywane klasami aplikacji zastępczych. W Eksploratorze aplikacji w węźle Klasy ikona obok klas zastępczych aplikacji różni się od standardowej ikony.

klasy x-systemowe

Niektóre z klas aplikacji zastępczych są skojarzone ze specjalną zmienną globalną reprezentującą wystąpienie klasy. Na przykład zmienna appl odwołuje się do wstępnie utworzonego obiektu z klasy Application . Zaletą zmiennej appl jest to, że system utrzymuje obiekt w całym zakresie sesji. Kod byłby mniej wydajny, gdyby wielokrotnie używał nowej składni Application() w celu uzyskania wystąpienia klasy Application . Nie należy używać klasy systemu xApplication . Zamiast tego użyj klasy Application substitute application.

Statyczne elementy członkowskie klasy Application można odwoływać się przy użyciu następującej standardowej składni: Application::checkForNewBatchJobs(). Jednak aby odwołać się do składowych wystąpień klasy Application , należy użyć zmiennej appl tej klasy, jeśli istnieje. Ten wzorzec dotyczy większości klas x-systemowych. Klasa aplikacji zastępczej sesji jest jednym wyjątkiem, ponieważ nie ma specjalnej zmiennej globalnej dla sesji.

W poniższej tabeli wymieniono klasy x-systemowe, które mają odpowiednią klasę aplikacji zastępczej. Specjalne zmienne globalne są również wyświetlane dla tych klas, które mają jeden.

Klasa aplikacji x-system, klasa Zmienna globalna
Argumenty xArgs Nie dotyczy
Aplikacja xApplication Appl
ClassFactory xClassFactory classFactory
Firma xCompany appl.company
Global xGlobal Nie dotyczy
Informacje xInfo Dziennik informacyjny
MenuFunction xMenuFunction Nie dotyczy
Session xSession Nie dotyczy
Kontrola wersji xVersionControl versionControl

Przykład klas x-systemowych

W poniższym przykładzie przedstawiono składnię użycia kilku zmiennych specjalnych odwołujących się do wystąpień klas aplikacji zastępczych.

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."

Klasy przetwarzania wsadowego

Klasy są implementowane przy użyciu systemu przetwarzania wsadowego i przez rozszerzenie klas RunBase i RunBaseBatch. Aby usunąć przycisk Cykl z okna dialogowego Przetwarzanie wsadowe , należy użyć metody Args::p armEnum . Zalecamy wyznaczenie klasy do uruchomienia jako metody wsadowej powiązanej z serwerem. Metody wsadowe powiązane z serwerem są bezpieczniejsze niż metody wsadowe, które nie są powiązane z serwerem z następujących powodów:

  • Metoda jest uruchamiana przy użyciu uprawnień użytkownika, który przesłał metodę.
  • Metoda może używać tylko określonych metod klasy Info i Global do interakcji z klientem, który go przetwarza. To ograniczenie ogranicza interakcję z klientem.

Włączanie działania klasy jako metody wsadowej powiązanej z serwerem

  1. Utwórz klasę rozszerzającą klasę RunBaseBatch .

  2. Zastąp metodę RunBaseBatch.runsImpersonated , aby zwrócić wartość true, jak pokazano w poniższym przykładzie.

    public boolean runsImpersonated()
    {
        return true;
    }
    
  3. Upewnij się, że klasa wywołuje tylko następujące metody klasy Info i Global :

    • add
    • Info.copy
    • Info.cut
    • Info.import
    • Info.export
    • Info.line
    • Info.num
    • Global::error
    • Global::info
    • Global::warning

    Metody Info.line i Info.num są dziedziczone z klasy xInfo .

Usuwanie przycisku Cykl z okna dialogowego przetwarzania wsadowego

Podczas implementowania klasy przy użyciu systemu przetwarzania wsadowego można usunąć przycisk Cykl , wywołując metodę Args.parmEnum i przekazując wartość wyliczenia systemu NoYes::Yes . Wyliczenie systemu NoYes określa, czy przycisk Cykl jest usuwany z okna dialogowego. Wartość domyślna to NoYes::No.

W poniższym przykładzie zaimplementowano klasę InventTransferMultiShip . Metoda BatchDialog::main tworzy okno dialogowe Przetwarzanie usługi Batch .

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);
}

Klasy manipulowania obrazami

Dwie klasy systemowe umożliwiają manipulowanie grafiką i ikonami: Obraz i Lista obrazów.

  • Image — ta klasa umożliwia ładowanie, zapisywanie i manipulowanie poszczególnymi obrazami. Możesz na przykład przechwycić ekran i zapisać go jako obraz, przycinać lub obracać obraz albo manipulować głębokością koloru.
  • Lista obrazów — ta klasa umożliwia pracę z zestawem obrazów, które mają wspólne właściwości, takie jak rozmiar i kolor przezroczystości. Listy obrazów używane w klasach aplikacji ImageListAppl można wyświetlić.

Wykonywanie zapytań względem modelu obiektów

Model obiektu zapytania zawiera klasy używane do definiowania i uruchamiania zapytania. Obiekty zapytania służą do definiowania źródła danych zapytania, zwracanych pól, zakresów rekordów i relacji z podrzędnymi źródłami danych. Klasy zapytań są bardziej widoczne podczas tworzenia zapytania dynamicznego w kodzie, ale są one również używane w tle podczas tworzenia zapytania statycznego w Eksploratorze aplikacji.

W poniższej tabeli opisano klasy w modelu obiektów zapytania.

Klasa systemowa Description
ZapytanieUruchom Ta klasa uruchamia zapytanie i pobiera dane.
Query Ta klasa zawiera pewne właściwości i ma co najmniej jedno powiązane źródła danych. Jest to najwyższy poziom definicji zapytania.
QueryBuildDataSource Ta klasa definiuje dostęp do pojedynczego źródła danych w zapytaniu. Jeśli w zapytaniu istnieje więcej niż jedno źródło danych, tworzone są oddzielne instrukcje SQL i są uruchamiane sekwencyjnie. Jeśli jedno źródło danych jest elementem podrzędnym innego źródła danych, zostanie utworzone sprzężenia między dwoma źródłami danych.
QueryBuildFieldList Ta klasa definiuje pola zwracane z bazy danych. Domyślnie lista pól jest dynamiczna, a wszystkie pola są zwracane z tabeli źródła danych, mapy lub widoku. Każde źródło danych ma tylko jeden obiekt QueryBuildFieldList . Ten obiekt zawiera informacje o wszystkich zaznaczonych polach. W obiekcie listy pól można określić funkcje agregujące, takie jak SUM, COUNT i AVG.
QueryBuildRange Ta klasa definiuje podzbiór zwracanych rekordów na podstawie jednego pola. Zakres jest tłumaczony na klauzulę WHERE w instrukcji SQL zapytania. Jeśli do ograniczenia zapytania (klauzula WHERE ) zostanie użyte więcej niż jedno pole, źródło danych będzie zawierać więcej niż jeden zakres.
QueryBuildDynalink Ta klasa zawiera informacje o relacji (ograniczenie) z rekordem zewnętrznym. Po uruchomieniu zapytania te informacje są konwertowane na dodatkowe wpisy w klauzuli WHERE instrukcji SQL zapytania. Ta klasa może istnieć tylko w nadrzędnym źródle danych zapytania. Formularze używają funkcji, gdy są synchronizowane dwa źródła danych. Podrzędne źródło danych będzie następnie zawierać co najmniej jedną bibliotekę DLL nadrzędnego źródła danych. Funkcja jest używana nawet wtedy, gdy dwa źródła danych są umieszczane w dwóch różnych formularzach, ale są nadal synchronizowane.
QueryBuildLink Ta klasa określa relację między dwoma źródłami danych w sprzężeniu. Ta klasa może istnieć tylko w podrzędnym źródle danych.

Do wykonywania zapytań dotyczących danych można również użyć interfejsu API SysDa .

Omówienie klas systemowych

Źródło klas systemowych nie jest dostępne. Klasa systemowa może mieć następujące cechy:

  • Metody statyczne (lub metody klas)
  • Metody dynamiczne
  • Właściwości — te właściwości są funkcjami składowych, które są używane do ustawiania właściwości. Przykładem jest LeftMargin.

Nie można zastąpić metod klas systemowych. Nie naszym zamiarem jest użycie klas systemowych do projektowania obiektów aplikacji od podstaw. Zamiast tego użyj ich, aby rozszerzyć lub zmodyfikować funkcję domyślną w Eksploratorze aplikacji. Można na przykład dynamicznie dodawać dodatkowe informacje do istniejącego raportu. Alternatywnie można zmienić opcje dostępne na stronie na podstawie wyboru użytkownika na poprzedniej stronie.

Klasy kolekcji

Klasy kolekcji umożliwiają tworzenie list, zestawów, struktur, map i tablic.

Klasy obiektów aplikacji

Te klasy systemowe przechowują funkcje aktywowane za każdym razem, gdy używasz Eksploratora aplikacji do tworzenia aplikacji. Na przykład system używa klasy FormDesign podczas definiowania układu formularza w węźle Projekty w Eksploratorze aplikacji. Te klasy umożliwiają również tworzenie i modyfikowanie obiektów aplikacji.

Klasy integracji

Integracja ze środowiskiem jest zwykle implementowana przez klasy. Oto kilka przykładów klas w tej kategorii:

  • COM — wywołanie metod w obiektach COM.
  • DLL — wywołanie funkcji biblioteki DLL systemu Microsoft Windows.
  • We/Wy — odczyt i zapis plików zewnętrznych.
  • ODBCConnection — interfejs open database connectivity (ODBC) dla obcej bazy danych.