Nóta
Aðgangur að þessari síðu krefst heimildar. Þú getur prófað aðskrá þig inn eða breyta skráasöfnum.
Aðgangur að þessari síðu krefst heimildar. Þú getur prófað að breyta skráasöfnum.
Nóta
Hagsmunahópar samfélagsins hafa nú færst frá Yammer yfir í Microsoft Viva Engage. Til að ganga í Viva Engage samfélag og taka þátt í nýjustu umræðum skaltu fylla út eyðublaðið Biðja um aðgang að Finance and Operations Viva Engage Community og velja samfélagið sem þú vilt ganga í.
Þessi grein lýsir því hvernig á að búa til og nota fjölvi í X++.
Forþýðingarleiðbeiningar, þ.e. makró, eru huglægt unnin áður en kóðinn er þýddur. Tilskipanirnar lýsa yfir og meðhöndla fjölvi og gildi þeirra. Fyrirmælin eru skipt út fyrir það efni sem þau tilgreina, svo þýðandinn rekst aldrei á þau. X++ þýðandinn sér aðeins röð stafa sem skrifað er inn í X++ kóðann með tilskipununum.
Viðvörun
Makró eru arfgrir eiginleikar og gætu verið úrelt í framtíðarútgáfum. Notaðu tungumálasmíði í staðinn: Í stað makróa, notaðu tungumálasmíði eins og þessar:
Skilgreining makróefna
Þú skilgreinir nafngreint makró með því að nota setningafræðina sem sýnd er hér að neðan
- #define. MyMacro(Value) býr til makró með valfrjálsu gildi.
- #if. MyMacro athugar hvort makró sé skilgreint.
- #undef. MyMacro fjarlægir makróskilgreiningu.
#define og #if tilskipanir
Allar fyrirsetningar og tákn fyrir forþýðara byrja á stafnum # .
Skilgreindu makró með eftirfarandi setningafræði:
#define.MyMacro(Value) // creates a macro with a value.
#define.AnotherMacro() // creates a macro without a value.
Þú getur skilgreint makró hvar sem er í kóðanum þínum. Makróið getur haft gildi sem er röð stafa, en það þarf ekki að hafa gildi. Fyrirmælið #define gefur fyrirskipunaraðilanum fyrirmæli um að búa til makróbreytuna, valkvætt með gildi.
Leiðbeiningin #if athugar hvort breytan sé skilgreind og, valfrjálst, hvort hún hafi ákveðið gildi, eins og sýnt er í eftirfarandi dæmi:
#if.MyMacro
// The MyNaacro is defined.
#endif
#ifnot.MyMacro
// The MyNaacro is not defined.
#endif
X++ forþýðanlegar skipanir, makró-nöfnin sem þær skilgreina og prófanir á #if leiðbeiningagildum eru allar óháð hástöfum. Hins vegar skaltu skilgreina makrónöfn sem byrja á hástöfum.
#undef tilskipun
Notaðu leiðbeininguna #undef til að fjarlægja makróskilgreiningu sem er til úr fyrri #define.
#undef.MyMacro
#if.MyMacro
// The macro is not defined, so this is not included
#endif
Þú getur endurskilgreint makrónafn sem þú fjarlægðir með #undef því að nota annað #define.
Nota fjölvagildi
Hægt er að skilgreina heiti fjölva til að hafa gildi.
#define.Offset(42)
...
print #Offset; // 42
Makrógildi hefur ekki ákveðna gagnategund – það er bara röð stafa. Úthlutaðu gildi á makró með því að gefa gildið sem er lokað í sviga í lok leiðbeiningar #define.MyMacro . Notaðu makrótáknið þar sem þú vilt að gildið komi fyrir í X++ kóðanum. Makrótákn er nafn fjölva með stafnum # bætt við sem forskeyti. Eftirfarandi kóðadæmi sýnir fjölvatákn #MyMacro. Tákninu er skipt út fyrir gildi fjölvi.
Prófaðu fjölgildi
Þú getur prófað makró til að ákvarða hvort það hafi gildi. Þú getur líka ákvarðað hvort gildi þess sé jafnt ákveðinni röð stafa. Þessi próf gera þér kleift að setja kóðalínur með skilyrðum í X++ forritið þitt. Það er engin leið að prófa hvort skilgreint makró hafi gildi. Þú getur aðeins prófað hvort makrógildið passi við ákveðið gildi. Sem besta venja, skilgreindu alltaf gildi fyrir hvaða makrónafn sem þú skilgreinir, eða aldrei skilgreina gildi. Þegar þú skiptir á milli þessara stillinga verður kóðinn þinn erfiður að skilja.
#defInc og #defDec tilskipanir
#defInc og #defDec eru einu fyrirmælin sem túlka gildi makró. Þau gilda aðeins fyrir makró sem hafa gildi sem forþýðandinn getur umbreytt í formlega int tegundina. Þessar leiðbeiningar breyta tölulegu gildi makró við þýðingartíma. Gildið getur aðeins innihaldið tölur. Eini stafurinn sem ekki er tölustafur sem er leyfður er leiðandi neikvætt tákn (-). Heiltölugildið er meðhöndlað sem X++ int, ekki sem int64. Fyrir makró-nöfn sem leiðbeiningin #defInc notar, ætti fyrirmælið #define sem býr til makróið ekki að vera í flokksyfirlýsingu. Hegðun #defInc í þessum tilfellum er ófyrirsjáanleg. Í staðinn er skilgreint slík makró aðeins í einni aðferð. Notaðu #defInc og #defDec leiðbeiningarnar aðeins fyrir makró sem hafa heiltölugildi. Forþýðandinn fylgir sérstökum reglum þegar #defInc makrógildið er ekki heiltala, eða þegar gildið er óvenjulegt eða öfgakennt. Í eftirfarandi töflu er listi yfir gildin sem #defInc breytast í núll (0) og hækka síðan. Þegar #defInc gildi breytist í 0 geturðu ekki endurheimt upprunalega gildið, ekki einu sinni með því að nota #defDec.
| Makró gildi | defInc gildi | Hegðun |
|---|---|---|
| (+55) | 56 | Jákvæða forskeytið (+) gerir það að verkum að forþýðandinn meðhöndlar þetta gildi sem ótölulegan streng. Forþýðandinn meðhöndlar alla strengi sem ekki eru tölustafir sem 0 þegar hann meðhöndlar #defInc (eða #defDec) tilskipun. |
| ("3") | 1 | Heiltölur sem eru innan gæsalappa eru meðhöndlaðar sem 0. |
| ( ) | 1 | Röð af bilum er meðhöndluð sem 0. |
| () | 1 | Strengur með núlllengd er meðhöndlaður sem 0. |
| (Handahófskenndur strengur.) | 1 | Sérhver ótölulegur strengur stafa er meðhöndlaður sem 0. |
| (0x12) | 1 | Sextándatölur eru meðhöndlaðar sem ótölulegir strengir. Því breytir forþýðandinn þeim í 0. |
| (-44) | -43 | Neikvæðar tölur eru ásættanlegar. |
| (2147483647) | -2147483648 | Hámarks jákvætt int gildi flæðir yfir í lágmark neikvætt int gildi með #defInc. |
| (999888777666555) | 1 | Einhver stór fjöldi, umfram getu int og int64. |
| (5.8) | 1 | Rauntölur eru túlkaðar sem 0. |
| 1 | Þegar ekkert gildi og engar sviga eru gefnar fyrir leiðbeininguna #define.MyValuelessMacro er gildið 0. |
#globaldefine tilskipun
Tilskipunin #globaldefine er svipuð tilskipuninni #define . Notaðu #define í staðinn fyrir #globaldefine.
#localmacro og #macro leiðbeiningar
Leiðbeiningin #localmacro er góð ákvörðun þegar þú vilt að makró hafi gildi sem er nokkrar línur langt, eða þegar makrógildið þitt inniheldur lokandi sviga, sem gerir þau að góðum kostum til að innihalda frumkóðabrot.
#macro.RetailMatchedAggregatedSalesLine(
%1.price == %2.price
&& %1.businessDate == %2.businessDate
&& %1.itemId == %2.itemId
&& ((((%3) && (%1.qty <= 0)) || ((! %3) && (%1.qty > 0))) || (%4))
)
#endmacro
Tilskipunina #localmacro má skrifa sem #macro. Hins vegar #localmacro er ráðlagt hugtak. Með því að nota tilskipunina #if er hægt að prófa hvort fjölvaheiti sé gefið upp með tilskipuninni #define . Hins vegar geturðu ekki prófað hvort makrónafnið sé tilkynnt með leiðbeiningunni #localmacro . Aðeins fjölvi sem lýst er yfir með tilskipuninni #define verða fyrir áhrifum af tilskipuninni #undef . Í leiðbeiningum #define er hægt að tilgreina heiti sem þegar er innan umfangs sem .#localmacro Áhrifin eru að henda og #localmacro búa til #define fjölvi. Þetta á einnig við um gagnstæða röð, sem þýðir að a #localmacro getur endurskilgreint .#define A #localmacro (sem hefur bæði fjölvaheiti og gildi) hnekkir alltaf fyrri #localmacro sem hefur sama nafn. Þetta sama vandamál kemur upp með #globaldefine. Helsti munurinn á #define fjölvi og #localmacro fjölvi er í því hvernig setningafræði þeirra er hætt. Terminators eru sem hér segir:
-
#define– er sagt upp af–) -
#localmacro– er sagt upp af–#endmacro
#localmacro er betri kostur fyrir fjölvi með mörg línugildi. Mörg línugildi eru venjulega línur af X++ eða SQL kóða. X++ og SQL innihalda fullt af sviga og þeir myndu binda enda á #define of snemma. Bæði #define og #localmacro er hægt að lýsa yfir og ljúka annað hvort á einni línu eða á síðari línum. Í raun er lokið #define á sömu línu og það er lýst yfir. Í reynd er því #localmacro hætt á síðari línu.
Makró breytur
Hægt er að skilgreina fjölvigildi til að innihalda færibreytutákn. Fyrsta færibreytutáknið er %1, annað er %2, og svo framvegis. Þú sendir gildi fyrir færibreyturnar þegar þú vísar í heiti fjölvatáknsins fyrir stækkun. Makróbreytugildi eru stafaraðir án formlegrar gerðar og eru afmarkaðar með kommum. Það er engin leið að setja komma sem hluta af breytugildi. Fjöldi færibreyta sem sendar eru getur verið minni en, meiri en eða jafn fjölda færibreyta sem fjölvagildið er hannað til að taka á móti. Kerfið þolir misræmi í fjölda færibreyta sem farið er. Ef færri færibreytur eru sendar en fjölvi býst við, er hver færibreyta sem sleppt er meðhöndluð sem núlllengd röð stafa.
Hreiður makrótákn
Hægt er að hreiðra skilgreiningartilskipanir fyrir þýðanda inni í ytri skilgreiningartilskipun. Helstu skilgreiningar tilskipana eru #define og #localmacro.
Tilskipun #define er hægt að gefa inni í #localmacro tilskipun og a #localmacro getur verið inni í .#define
#macrolib tilskipun
Í Application Explorer undir Macros hnútnum undir Code hnútinum eru margir bókasafnshnútar sem innihalda sett af makrófyrirmælum. Bæði #define og #localmacro birtast oft í innihaldi þessara makrósafna. Þú getur notað #macrolib. MyAOTMacroLibrary til að innihalda innihald fjölvasafns í X++ kóðanum þínum. Og #if#undef leiðbeiningarnar gilda ekki um #macrolib nöfn. Hins vegar eiga þær við um #define tilskipanir sem eru innihald #macrolib þjóðhags. Tilskipunin #macrolib. MyAOTMacroLibrary má einnig skrifa sem #MyAOTMacroLibrary. Forskeytið #macrolib er mælt með því það er aldrei óljóst fyrir þann sem les kóðann síðar.
#linenumber tilskipun
Þú getur notað tilskipunina #linenumber við þróun og kembiforrit á kóða. Það er skipt út fyrir línunúmerið í kóðaskránni áður en makró er stækkað.
Macro scope
Sviðið sem þú getur vísað í makró fer eftir því hvar þú skilgreinir makróið. Í klasa geturðu vísað í makró sem þú skilgreinir í foreldraklasanum. Þegar forþýðandinn meðhöndlar barnaklasa, rekur hann fyrst erfðakeðjuna til rótarklasans. Forþýðandinn vinnur síðan úr öllum fyrirmælum frá rótarklasanum til þess klasa sem verið er að þýða. Það geymir alla fjölvi og gildi þeirra í innri töflum sínum. Niðurstöður skipananna í hverri flokksyfirlýsingu gilda um innri töflur sem þegar eru fylltar úr fyrirmælum sem hún fann fyrr í erfðakeðjunni.
Hins vegar meðhöndlar forþýðandinn hverja aðferð sérstaklega. Það uppfærir innri töflur sínar svo það geti endurheimt stöðu þeirra eins og þau voru áður en núverandi aðferð var unnin. Eftir að forþýðandinn meðhöndlar fyrstu aðferðina, endurheimtir hann innri töflurnar áður en hann meðhöndlar næstu aðferð.
Í þessu samhengi er aðferð skilgreind sem innihald aðferðarhnúts í AOT (Application Object Tree). Í AOT geturðu stækkað Classes hnútinn, stækkað class hnút, hægrismellt á aðferðarhnút og valið Breyta. Síðan er hægt að bæta við línu fyrir #define.MyMacro("abc") á undan aðferðayfirlýsingunni. Forþýðandinn meðhöndlar þessa #define tilskipun sem hluta af aðferðinni, jafnvel þó að hún #define eigi sér stað utan blokkar {} aðferðarinnar.