Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Notat
Community-interessegrupper er nu flyttet fra Yammer til Microsoft Viva Engage. Hvis du vil deltage i et Viva Engage-community og deltage i de seneste diskussioner, skal du udfylde formularen Anmod om adgang til Finance and Operations Viva Engage Community og vælge det community, du vil deltage i.
I denne artikel beskrives biblioteket med klasser i X++.
Der findes to typer klasser: programklasser og systemklasser.
- Programklasser – implementer disse klasser i X++. Du kan finde dem under noden Kodeklasser > i Application Explorer.
- Systemklasser – disse klasser kaldes nogle gange kerneklasser. De vises under noden Klasser for systemdokumentation > i Application Explorer. Du kan ikke få adgang til kildekoden for disse klasser. Du kan se en liste over systemklasser under API, klasse og tabelreference.
Typisk struktur for en programklasse
Følgende kodebloktyper er standard for programklasser:
- klasse- og variabelerklæringer: Klasseerklæringen indeholder modifikatorer, f.eks. offentlige, private og udvider.
- variabelerklæringer: Dette er feltmedlemmerne for objekter, der er oprettet ud fra klassen. Når du skriver nøgleordet dette på en variabel for en klasseforekomst, kan IntelliSense vise en liste over medlemmerne.
- new method: Denne metode opretter en forekomst af klassen. Du kan kun kalde konstruktøren ved hjælp af det nye nøgleord. Afledte klasser kan kalde den nye metode for konstruktøren ved at kalde referencen til supermetoden . Du kan få flere oplysninger under X++-nedarvning.
- finalize-metode : Denne metode afslutter en forekomst af klassen. Denne metode er destructormetoden. Det er dog kun en destruktor efter konvention. Systemet kalder ikke automatisk metoden finalize under indsamling af affald.
Flere metoder til en klasse omfatter følgende typer:
- Forekomstmetoder
- Statiske metoder
- Hovedmetoder
Du kan oprette metoder for mange typer elementer. Her er nogle eksempler:
- Klasser
- Maps
- Views
- Datasæt
- Formularer
- Forespørgsler
Erstatning af programklasser for systemklasser
Brug erstatningsprogramklasserne i stedet for de systemklasser, de udvider.
Under Systemdokumentationsklasser >i Application Explorer har flere kerne- eller systemklasser navne, der starter med små bogstaver x. Disse klasser kaldes x-systemklasser. Eksempler på disse systemklasser er xApplication og xVersionControl. Nogle af disse klasser udvides af programklasser. Programklassen udvider f.eks. xApplication-systemklassen.
De klasser, der stammer fra x-systemklasser, kaldes erstatningsanvendelsesklasser. I Application Explorer under noden Klasser adskiller ikonet ud for erstatningsprogramklasser sig fra standardikonet.
x-systemklasser
Nogle af erstatningsprogramklasserne er knyttet til en særlig global variabel, der repræsenterer en forekomst af klassen. Appl-variablen refererer f.eks. til et forud instantieret objekt fra programklassen. Fordelen ved appl-variablen er, at systemet bevarer objektet i hele sessionens omfang. Din kode ville være mindre effektiv, hvis den gentagne gange brugte den nye Application()- syntaks til at hente en forekomst af programklassen . Brug ikke xApplication-systemklassen . Brug i stedet Programerstat programklassen.
Du kan referere til de statiske medlemmer af programklassen ved hjælp af følgende standardsyntaks: Application::checkForNewBatchJobs(). Hvis du vil referere til forekomstmedlemmerne af programklassen , skal du dog bruge den pågældende klasses appl-variabel , hvis den findes. Dette mønster gælder for de fleste x-systemklasser. Sessionserstatningsprogramklassen er én undtagelse, fordi der ikke er nogen særlig global variabel for Session.
I følgende tabel vises de x-systemklasser, der har en tilsvarende erstatningsprogramklasse. De særlige globale variabler vises også for de klasser, der har en.
| Programklasse | x-systemklasse | Global variabel |
|---|---|---|
| Args | xArgs | Ikke relevant |
| Program | xApplication | appl |
| ClassFactory | xClassFactory | classFactory |
| Firma | xCompany | appl.company |
| Global | xGlobal | Ikke relevant |
| Info | xInfo | Infolog |
| Menufunktion | xMenuFunction | Ikke relevant |
| Session | xSession | Ikke relevant |
| VersionControl | xVersionControl | versionControl |
Eksempel på x-systemklasser
I følgende eksempel vises syntaksen for brug af flere specialvariabler, der refererer til forekomster af erstatningsprogramklasserne.
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."
Batchbehandlingsklasser
Implementer klasser ved hjælp af batchbehandlingssystemet og ved at udvide klasserne RunBase og RunBaseBatch . Hvis du vil fjerne knappen Gentagelse fra dialogboksen Batchbehandling , skal du bruge metoden Args::p armEnum . Angiv en klasse, der skal køres som en serverbundet batchmetode. Serverbundne batchmetoder er mere sikre end batchmetoder, der ikke er serverbundne af følgende årsager:
- Metoden kører ved hjælp af tilladelserne for den bruger, der har sendt metoden.
- Metoden kan kun bruge specifikke info - og globale klassemetoder til at interagere med den klient, der behandler den. Denne begrænsning begrænser interaktionen med klienten.
Aktivér en klasse for at køre som en serverbundet batchmetode
Opret en klasse, der udvider Klassen RunBaseBatch .
Tilsidesæt metoden RunBaseBatch.runsImpersonated for at returnere true, som vist i følgende eksempel.
public boolean runsImpersonated() { return true; }Bekræft, at klassen kun kalder følgende metoder for klassen Info og Global :
- tilføje
- Info.copy
- Info.cut
- Info.import
- Info.export
- Info.line
- Info.num
- Global::fejl
- Global::info
- Global::advarsel
Metoderne Info.line og Info.num nedarves fra klassen xInfo.
Fjern knappen Gentagelse fra dialogboksen til batchbehandling
Når du implementerer en klasse ved hjælp af batchbehandlingssystemet, skal du fjerne knappen Gentagelse ved at kalde metoden Args.parmEnum og overføre noyes:: Yes-systemoptællingsværdien. NoYes-systemoptællingen bestemmer, om knappen Gentagelse fjernes fra dialogboksen. Standardværdien er NoYes::Nej.
I følgende eksempel implementeres klassen InventTransferMultiShip . BatchDialog::main-metoden opretter dialogboksen Batchbehandling.
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);
}
Klasser til billedmanipulation
Med to systemklasser kan du manipulere grafik og ikoner: Billed- og billedliste.
- Billede – denne klasse giver dig mulighed for at indlæse, gemme og manipulere individuelle billeder. Du kan f.eks. hente en skærm og gemme den som et billede, beskære eller rotere et billede eller ændre farvedybden.
- Imagelist – Denne klasse giver dig mulighed for at arbejde med et sæt billeder, der har fælles egenskaber, f.eks. størrelse og gennemsigtighedsfarve. Du kan få vist de billedlister, som programklasserne ImageListAppl bruger.
Forespørgselsobjektmodel
Forespørgselsobjektmodellen indeholder klasser, som du bruger til at definere og køre en forespørgsel. Brug forespørgselsobjekterne til at definere forespørgselsdatakilden, de felter, der returneres, postområder og relationer til underordnede datakilder. Forespørgselsklasserne er mere synlige, når du opretter en dynamisk forespørgsel i kode, men de bruges også i baggrunden, når du opretter en statisk forespørgsel i Application Explorer.
I følgende tabel beskrives klasserne i forespørgselsobjektmodellen.
| Systemklasse | Beskrivelse |
|---|---|
| Forespørgselskørsel | Denne klasse kører forespørgslen og henter dataene. |
| Query | Denne klasse indeholder nogle egenskaber og har en eller flere relaterede datakilder. Det er det øverste niveau i forespørgselsdefinitionen. |
| QueryBuildDataSource | Denne klasse definerer adgang til en enkelt datakilde i forespørgslen. Hvis der er mere end én datakilde på samme niveau i en forespørgsel, opretter forespørgslen separate SQL-sætninger og kører dem sekventielt. Hvis én datakilde er underordnet en anden datakilde, opretter forespørgslen en joinforbindelse mellem de to datakilder. |
| QueryBuildFieldList | Denne klasse definerer de felter, der returneres fra databasen. Feltlisten er som standard dynamisk, og alle felter returneres fra datakildetabellen, afbildningen eller visningen. Hver datakilde har kun ét QueryBuildFieldList-objekt . Dette objekt indeholder oplysninger om alle markerede felter. Du kan angive aggregeringsfunktioner, f.eks . SUM, COUNT og AVG, på feltlisteobjektet. |
| QueryBuildRange | Denne klasse definerer et undersæt af poster, der returneres, baseret på et enkelt felt. Et område oversættes til en WHERE-delsætning i forespørgslens SQL-sætning. Hvis der bruges mere end ét felt til at begrænse forespørgslen (WHERE-delsætningen ), indeholder datakilden mere end ét område. |
| QueryBuildDynalink | Denne klasse indeholder oplysninger om en relation (begrænsning) til en ekstern post. Når forespørgslen kører, konverteres disse oplysninger til yderligere poster i WHERE-delsætningen i forespørgslens SQL-sætning. Denne klasse kan kun findes i den overordnede datakilde for en forespørgsel. Formularer bruger funktionen , når to datakilder synkroniseres. Den underordnede datakilde indeholder derefter en eller flere DLL-filer til den overordnede datakilde. Funktionen bruges, selvom de to datakilder er placeret i to forskellige formularer, men stadig synkroniseres. |
| QueryBuildLink | Denne klasse angiver relationen mellem de to datakilder i joinforbindelsen. Denne klasse kan kun findes i en underordnet datakilde. |
Du kan også bruge SysDa-API'en til at forespørge om data.
Oversigt over systemklasser
Kilden til systemklasser er ikke tilgængelig. En systemklasse kan have følgende egenskaber:
- Statiske metoder (eller klassemetoder)
- Dynamiske metoder
- Properties – Disse egenskaber er medlemsfunktioner, der angiver egenskaber. Et eksempel er LeftMargin.
Du kan ikke tilsidesætte systemklassemetoder. Det er ikke meningen, at du skal bruge systemklasserne til at designe dine programobjekter fra bunden. Brug dem i stedet til at udvide eller ændre standardfunktionaliteten i Application Explorer. Du kan f.eks. dynamisk føje ekstra oplysninger til en eksisterende rapport. Du kan også ændre de indstillinger, der er tilgængelige på en side, baseret på brugerens valg på en forrige side.
Samlingsklasser
Med samlingsklasserne kan du oprette lister, sæt, strukturer, kort og matrixer.
Programobjektklasser
Disse systemklasser indeholder funktioner, der aktiveres, når du bruger Application Explorer til at oprette dit program. Systemet bruger f.eks. klassen FormDesign , når du definerer layoutet af din formular i noden Design i Application Explorer. Med disse klasser kan du også oprette og redigere programobjekter.
Integrationsklasser
Klasser implementerer typisk integrationen med miljøet. Her er nogle eksempler på klasserne i denne kategori:
- COM – kaldet af metoder på COM-objekter.
- DLL – kaldet af Microsoft Windows DLL-funktioner.
- IO – Læs og skriv eksterne filer.
- ODBCConnection – en ODBC-grænseflade (Open Database Connectivity) til en fremmed database.