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
Samfélagsáhugahópar hafa nú flust frá Yammer yfir í Microsoft Viva Engage. Til að ganga í Viva Engage samfélag og taka þátt í nýjustu umræðunum, fylltu út eyðublaðið Request access to Finance and Operations Viva Engage Community og veldu það samfélag sem þú vilt ganga í.
Þessi grein lýsir notkun eiginda í X++.
Eiginleiki er óabstrakt klasi sem framlengir (erfir frá) SysAttribute klasanum. Eigindir tákna eða geyma lýsigögn um gerðir og aðferðir. Þú getur tengt eiginleika við klasa, klasareit, klasaaðferð, viðmót eða töflu.
Beita eiginleikum á umsjónarmenn fulltrúa og aðferðir til að varpa meðhöndlunum á þau markmið.
Stofna eigindaflokk
Eigindaflokkur getur framlengt SysAttribute klasann beint, eða hann getur framlengt hvaða afkomanda SysAttribute klasans sem er. Þú getur ekki notað SysAttribute klasann sem eiginleika því hann er tilkynntur abstrakt. Eftirfarandi dæmi sýnir yfirlýsingu og hönnun venjulegs eiginleikaklasa sem þú getur búið til.
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 leyft eiginleikaklasanum þínum að geyma sérsniðin lýsigögn í hvert skipti sem hann skreytir klasa með því að láta smiðinn taka breytur. Færibreytur fyrir smiðinn verða að vera bókstafir af frumstæðum gerðum, svo sem int,enum eða str. Þýðandinn býr ekki til eintak af eiginleikaklasanum. Það geymir heiti eigindaflokksins, auk bókstaflegra gilda fyrir smíði hans. Þess vegna, ef rökfræðin í eiginleikasmíði myndi kasta undantekningu, veldur það ekki undantekningunni að skreyta klasa með eiginleikanum. Undantekningin finnst síðar þegar ferli skoðar flokk til að sjá hvaða eiginleika hann er skreyttur með. Þessi ferill er þegar eiginleikinn er smíðaður.
Nafngiftir
Allir eigindaflokkar hafa viðskeytið Eigind í nafni sínu. Eiginleikaviðskeytið er nafnaviðskeytið sem Microsoft mælir 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 engin aðferð til að telja upp allar aðferðir eða klasa sem eru skreyttir ákveðnum eiginleika úr X++ kóða. Hins vegar, þar sem X++ þýðandinn skráir þessar upplýsingar í krossvísunargagnagrunninum, geturðu unnið þessar upplýsingar þaðan.
Dæmi um endurspeglunarkóða lýsigagna
Notaðu DictMethod klasann til að finna lýsigagnagildi eiginleika sem skreytir 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értæk fyrir SysEntryPointAttribute flokkinn og hún erfir 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");
}
**************/