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.
Athugasemd
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 notkun eiginda í X++.
Eigind er óabstrakt flokkur sem framlengir (erfir frá) SysAttribute flokknum. Eigindir tákna eða geyma lýsigögn um gerðir og aðferðir. Eigind er hægt að tengja við klasa, klasareit, klasaaðferð, viðmót eða töflu.
Eigindum er beitt á umsjónarmenn fulltrúa og aðferðir, til að varpa umsjónarmönnum á þessi markmið.
Stofna eigindaflokk
Eigindaflokkur getur framlengt SysAttribute klasann beint, eða hann getur framlengt hvaða afkomanda SysAttribute klasans sem er. Ekki er hægt að nota SysAttribute flokkinn sem eigind vegna þess að hann er lýstur óhlutbundinn. Eftirfarandi dæmi sýnir yfirlýsingu og hönnun venjulegs eigindaklasa sem hægt er að stofna.
public class PracticeAttribute extends SysAttribute
{
// Fields in the classDeclaration.
StartEnd startEndEnum;
str reason;
// Constructor.
public void new(StartEnd _startEndEnum, str _reason)
{
startEndEnum = _startEndEnum;
reason = _reason;
}
// Other methods can go here.
}
Skreyta bekk með eiginleika
Eftirfarandi dæmi sýnir klasa og aðferð sem eru skreytt með PracticeAttribute sem gefin var upp í fyrra dæmi. Ef smíði eigindar tekur engar færibreytur eru svigar fyrir færibreyturnar valfrjálsir. Eiginleikaskreytingin gæti verið [AnotherAttribute] án sviga.
[PracticeAttribute(StartEnd::End, "Use the RegularClass class at the end.")]
public class RegularClass
{
[PracticeAttribute(Startend::Start, "Use the rehearse method at the start.")]
public int rehearse()
{
// Logic goes here.
}
// More fields and methods belong here.
}
Þú getur sleppt viðskeyti eigindaheitisins ef viðskeytið er Attribute. Til dæmis væri hægt að nota [Practice] í staðinn [PracticeAttribute] í dæminu hér á undan.
Eigindasmíðar
Þú getur gert eigindaflokknum þínum kleift að geyma sérsniðin lýsigögn í hvert skipti sem hann er notaður til að skreyta bekk, með því að láta smiðinn taka færibreytur. Færibreytur fyrir smiðinn verða að vera bókstafir af frumstæðum gerðum, svo sem int,enum eða str. Þýðandinn smíðar ekki tilvik af eigindaflokknum. Það geymir heiti eigindaflokksins, auk bókstaflegra gilda fyrir smíði hans. Þess vegna, ef rökfræðin í eigindasmíði myndi kasta undantekningu, myndi undantekningin ekki finnast með því að skreyta flokk með eiginleikanum. Undantekningin myndi finnast síðar þegar ferli skoðar bekk til að sjá eiginleikann sem hann er skreyttur með. Það er þegar eiginleikinn er smíðaður.
Nafngiftir
Allir eigindaflokkar hafa viðskeytið Eigind í nafni sínu. Eigindaviðskeytið er nafnavenjan sem við mælum með, en það er ekki kerfiskrafa. Þú getur ákvarðað hvort klasi nær beint frá SysAttribute með því að velja klasann í Application Explorer og fara yfir eiginleikann Extend í eiginleikaglugganum .
SysObsoleteAttribute
Kerfið býður upp á nokkra eiginleika, þar á meðal SysObsoleteAttribute flokkinn. Ein notkun á SysObsoleteAttribute flokknum er að tilkynna þýðandanum að þýðandinn ætti að mistakast ef tiltekin aðferð er kölluð í frumkóðanum. Þýðandinn hafnar þýðandanum og birtir tiltekin skilaboð sem eru geymd í þessari notkun eigindarinnar. Einnig er hægt að nota SysObsoleteAttribute klasann til að tilkynna þýðandanum að gefa út viðvörunarskilaboð í stað villna.
Dæmi um SysObsoleteAttribute kóða
[SysObsoleteAttribute("The Automobile class might have faster performance.", false)]
class Bicycle
{
// Members of the Bicycle class go here.
}
Speglun lýsigagna
Speglun er notuð til að finna lýsigögn eigindarinnar sem eru tengd við klasa. Flokkarnir sem á að nota til að spegla eiginleika eru sem hér segir:
- DictClass flokkur - Fyrir flokka og viðmót.
- DictMethod flokkur – Fyrir aðferðir á flokkum, viðmótum eða töflum.
Á fyrri ígrundunartímum eru aðferðir til að ígrunda lýsigögn eiginleika sem hér segir:
- getAllAttributes aðferð
- getAttribute aðferð
- getAttributedClasses aðferð
- getAttributes aðferð
Athugasemd
Það er ekkert kerfi til að skrá allar aðferðir eða flokka sem eru skreyttir tilteknum eigindum úr X++ kóða. Hins vegar, vegna þess að X++ þýðandinn skráir þessar upplýsingar í krossviðmiðunargagnagrunninn, er hægt að vinna upplýsingarnar þaðan.
Dæmi um endurspeglunarkóða lýsigagna
Flokkurinn DictMethod er notaður til að finna lýsigagnagildi eigindar sem er skreyting á aðferð. Eftirfarandi kóðadæmi notar klasann SysEntryPointAttribute sem eigind. Það samþykkir færibreytugildin þín fyrir heiti aðferðarinnar og fyrir heiti klasans sem inniheldur aðferðina. parmChecked aðferðin er sérstök fyrir SysEntryPointAttribute klasann og hún erfist ekki frá grunnflokknum SysAttribute. Hver eigindaflokkur getur haft sitt eigið aðferðarheiti fyrir lýsigögn sín.
static public int MetadataOfSysEntryPointAttributeOnMethod
(
str _sNameOfClass,
str _sNameOfMethod
)
{
// Return Values:
// 0 == Has the attribute, its metadata value is false;
// 1 == Has the attribute, its metadata value is true;
// 2 == The method lacks the SysEntryPointAttribute.
int nReturnValue = -1,
nClassId;
boolean boolParmChecked;
DictMethod dm;
Object attributeAsObject;
SysEntryPointAttribute sepAttribute;
Global::info("Starting AttributeReflection"
+ " ::MetadataOfSysEntryPointAttributeOnMethod ....");
Global::info(strFmt
("Parameters are: _sNameOfClass = %1 , _sNameOfMethod = %2 .",
_sNameOfClass, _sNameOfMethod)
);
nClassId = Global::className2Id(_sNameOfClass);
dm = new DictMethod
(UtilElementType::ClassInstanceMethod,
nClassId,
_sNameOfMethod
);
attributeAsObject = dm.getAttribute("SysEntryPointAttribute");
if (attributeAsObject is SysEntryPointAttribute)
{
sepAttribute = attributeAsObject as SysEntryPointAttribute;
boolParmChecked = sepAttribute.parmChecked();
if (boolParmChecked)
nReturnValue = 1;
else
nReturnValue = 0;
Global::info(
strFmt("Return value is %1.",
nReturnValue)
);
}
else
{
nReturnValue = 2;
Global::error("Object is not a SysEntryPointAttribute??");
}
return nReturnValue;
}
/*** Output displayed in the Infolog.
Message (05:03:22 pm)
Starting AttributeReflection ::MetadataOfSysEntryPointAttributeOnMethod ....
Parameters are: _sNameOfClass = CustCustomerService , _sNameOfMethod = create .
Return value is 1.
***/
/**************
// Simple AOT > Jobs job to run the method.
static void AttributeReflection33Job(Args _args)
{
AttributeReflection::MetadataOfSysEntryPointAttributeOnMethod
("CustCustomerService", "create");
}
**************/