டைனமிக்ஸ் AX 2012 இல் எந்த துணைப்பிரிவை உடனடிப்படுத்த வேண்டும் என்பதைக் கண்டறிய SysExtension கட்டமைப்பைப் பயன்படுத்துதல்.
வெளியிடப்பட்டது: 16 பிப்ரவரி, 2025 அன்று AM 12:26:24 UTC
இந்தக் கட்டுரை, Dynamics AX 2012 மற்றும் Dynamics 365 செயல்பாடுகளில் அதிகம் அறியப்படாத SysExtension கட்டமைப்பை பண்புக்கூறு அலங்காரங்களின் அடிப்படையில் துணை வகுப்புகளை எவ்வாறு உடனடிப்படுத்துவது என்பதை விவரிக்கிறது, இது ஒரு செயலாக்க வகுப்பு படிநிலையின் எளிதில் நீட்டிக்கக்கூடிய வடிவமைப்பை அனுமதிக்கிறது.
Using the SysExtension Framework to Find Out Which Subclass to Instantiate in Dynamics AX 2012
இந்தப் பதிவில் உள்ள தகவல்கள் டைனமிக்ஸ் AX 2012 R3 ஐ அடிப்படையாகக் கொண்டவை. இது மற்ற பதிப்புகளுக்கு செல்லுபடியாகலாம் அல்லது செல்லாமலும் இருக்கலாம். (புதுப்பிப்பு: இந்தக் கட்டுரையில் உள்ள தகவல்கள் டைனமிக்ஸ் 365 ஃபார் ஆபரேஷன்களுக்கும் செல்லுபடியாகும் என்பதை என்னால் உறுதிப்படுத்த முடியும்)
டைனமிக்ஸ் AX இல் செயலாக்க வகுப்புகளை செயல்படுத்தும்போது, ஒவ்வொரு துணைப்பிரிவும் ஒரு எனம் மதிப்புக்கு ஒத்திருக்கும் அல்லது வேறு சில தரவு இணைப்புகளைக் கொண்ட ஒரு வகுப்பு படிநிலையை உருவாக்குவதை நீங்கள் அடிக்கடி எதிர்கொள்கிறீர்கள். ஒரு உன்னதமான வடிவமைப்பு என்பது சூப்பர் வகுப்பில் ஒரு கட்டுமான முறையைக் கொண்டிருப்பதாகும், இது உள்ளீட்டின் அடிப்படையில் எந்த வகுப்பை உடனடிப்படுத்த வேண்டும் என்பதை தீர்மானிக்கும் ஒரு சுவிட்சைக் கொண்டுள்ளது.
கொள்கையளவில் இது நன்றாக வேலை செய்கிறது, ஆனால் உங்களிடம் பல சாத்தியமான உள்ளீடுகள் இருந்தால் (ஒரு எனமில் பல கூறுகள் அல்லது உள்ளீடு பல வேறுபட்ட மதிப்புகளின் கலவையாக இருக்கலாம்), அதைப் பராமரிப்பது கடினமானதாகவும் பிழை ஏற்படக்கூடியதாகவும் மாறும், மேலும் வடிவமைப்பு எப்போதும் ஒரு குறைபாட்டைக் கொண்டுள்ளது, நீங்கள் எப்போதாவது ஒரு புதிய துணைப்பிரிவைச் சேர்த்தாலோ அல்லது எந்த உள்ளீட்டின் அடிப்படையில் எந்த துணைப்பிரிவைப் பயன்படுத்த வேண்டும் என்பதில் மாற்றங்களைச் செய்தாலோ, கூறப்பட்ட கட்டுமான முறையை மாற்றியமைக்க வேண்டும்.
அதிர்ஷ்டவசமாக, இதைச் செய்வதற்கு மிகவும் நேர்த்தியான, ஆனால் துரதிர்ஷ்டவசமாக மிகவும் குறைவாக அறியப்பட்ட ஒரு வழி உள்ளது, அதாவது SysExtension கட்டமைப்பைப் பயன்படுத்துவதன் மூலம்.
இந்த கட்டமைப்பு, உங்கள் துணை வகுப்புகளை அலங்கரிக்க நீங்கள் பயன்படுத்தக்கூடிய பண்புக்கூறுகளைப் பயன்படுத்திக் கொள்கிறது, இதனால் எந்த துணை வகுப்பு எதைக் கையாள வேண்டும் என்பதைக் கண்டுபிடிக்க கணினிக்கு முடியும். உங்களுக்கு இன்னும் ஒரு கட்டுமான முறை தேவைப்படும், ஆனால் சரியாகச் செய்தால், புதிய துணை வகுப்புகளைச் சேர்க்கும்போது அதை நீங்கள் ஒருபோதும் மாற்ற வேண்டியதில்லை.
ஒரு கற்பனை உதாரணத்தைப் பார்ப்போம், நீங்கள் InventTrans அட்டவணையை அடிப்படையாகக் கொண்ட ஒருவித செயலாக்கத்தைச் செய்யும் ஒரு படிநிலையை செயல்படுத்தப் போகிறீர்கள் என்று வைத்துக்கொள்வோம். எந்த செயலாக்கத்தைச் செய்வது என்பது பதிவுகளின் StatusReceipt மற்றும் StatusIssue ஐப் பொறுத்தது, மேலும் பதிவுகள் SalesLine, PurchLine உடன் தொடர்புடையதா அல்லது இரண்டிற்கும் தொடர்புடையதா என்பதைப் பொறுத்தது. ஏற்கனவே, நீங்கள் பல்வேறு சேர்க்கைகளைப் பார்க்கிறீர்கள்.
இப்போதைக்கு நீங்கள் ஒரு சில சேர்க்கைகளை மட்டுமே கையாள வேண்டும் என்பது உங்களுக்குத் தெரியும் என்று வைத்துக்கொள்வோம், ஆனால் காலப்போக்கில் மேலும் மேலும் சேர்க்கைகளைக் கையாள உங்களிடம் கேட்கப்படும் என்பதையும் நீங்கள் அறிவீர்கள்.
ஒப்பீட்டளவில் எளிமையாக வைத்துக்கொள்வோம், இப்போதைக்கு நீங்கள் ReservePhysical அல்லது ReserveOrdered என்ற StatusIssue உடன் SalesLine தொடர்பான பதிவுகளை மட்டுமே கையாள வேண்டும் என்று சொல்லலாம், மற்ற அனைத்து சேர்க்கைகளையும் இப்போதைக்கு புறக்கணிக்கலாம், ஆனால் நீங்கள் அவற்றை பின்னர் கையாள வேண்டியிருக்கும் என்பதை நீங்கள் அறிந்திருப்பதால், உங்கள் குறியீட்டை எளிதாக நீட்டிக்கக்கூடிய வகையில் வடிவமைக்க விரும்புவீர்கள்.
உங்கள் படிநிலை இப்போதைக்கு இப்படி இருக்கலாம்:
- எனது செயலி
- எனது செயலி_விற்பனை
- எனது செயலி_விற்பனை_முன்பதிவு செய்யப்பட்டது
- எனது செயலி_விற்பனை_ரிசர்வ்பிசிகல்
- எனது செயலி_விற்பனை
இப்போது, நீங்கள் சூப்பர் வகுப்பில் ModuleInventPurchSales மற்றும் StatusIssue enum அடிப்படையிலான துணைப்பிரிவை உருவாக்கும் ஒரு முறையை எளிதாக செயல்படுத்தலாம். ஆனால் நீங்கள் ஒவ்வொரு முறையும் ஒரு துணை வகுப்பைச் சேர்க்கும்போது சூப்பர் வகுப்பை மாற்றியமைக்க வேண்டும், மேலும் அது உண்மையில் பொருள் சார்ந்த நிரலாக்கத்தில் மரபுரிமை பற்றிய யோசனை அல்ல. எல்லாவற்றிற்கும் மேலாக, நீங்கள் ஒவ்வொரு முறையும் ஒரு புதிய தொகுதி வேலையைச் சேர்க்கும்போது RunBaseBatch அல்லது SysOperationServiceBase ஐ மாற்றியமைக்க வேண்டியதில்லை.
அதற்கு பதிலாக, நீங்கள் SysExtension கட்டமைப்பைப் பயன்படுத்தலாம். அதற்கு நீங்கள் மற்றொரு வகுப்பைச் சேர்க்க வேண்டும், இது SysAttribute ஐ நீட்டிக்க வேண்டும். இந்த வகுப்பு உங்கள் செயலாக்க வகுப்புகளை அலங்கரிக்கக்கூடிய பண்புக்கூறாகப் பயன்படுத்தப்படும்.
இந்த வகுப்பு, SysOperation செயல்படுத்தலுக்கான தரவு ஒப்பந்த வகுப்பை எவ்வாறு உருவாக்குவீர்கள் என்பதற்கு மிகவும் ஒத்திருக்கிறது, அதில் சில தரவு உறுப்பினர்கள் மற்றும் அந்த மதிப்புகளைப் பெறுவதற்கும் அமைப்பதற்கும் parm முறைகள் இருக்கும்.
எங்கள் விஷயத்தில், வகுப்பு அறிவிப்பு இப்படி இருக்கலாம்:
{
ModuleInventPurchSales module;
StatusIssue statusIssue;
StatusReceipt statusReceipt
}
எல்லா தரவு உறுப்பினர்களையும் உடனடிப்படுத்துவதற்கு நீங்கள் ஒரு புதிய() முறையை உருவாக்க வேண்டும். நீங்கள் விரும்பினால் அவற்றில் சில அல்லது அனைத்தையும் இயல்புநிலை மதிப்புகளைக் கொடுக்கலாம், ஆனால் நான் அதைச் செய்யவில்லை.
StatusIssue _statusIssue,
StatusReceipt _statusReceipt)
{
;
super();
module = _module;
statusIssue = _statusIssue;
statusReceipt = _statusReceipt;
}
மேலும் நீங்கள் ஒவ்வொரு தரவு உறுப்பினருக்கும் ஒரு parm முறையை செயல்படுத்த வேண்டும், ஆனால் அதை எப்படி செய்வது என்று உங்களுக்குத் தெரியும் என்பதால் நான் அவற்றை இங்கே தவிர்த்துவிட்டேன் - இல்லையெனில், அதை ஒரு பயிற்சியாகக் கருதுவோம் ;-)
இப்போது உங்கள் ஒவ்வொரு செயலாக்க வகுப்புகளையும் அலங்கரிக்க உங்கள் பண்புக்கூறு வகுப்பைப் பயன்படுத்தலாம். எடுத்துக்காட்டாக, வகுப்பு அறிவிப்புகள் இப்படி இருக்கும்:
StatusIssue::None,
StatusReceipt::None)]
class MyProcessor_Sales extends MyProcessor
{
}
[MyProcessorSystemAttribute(ModuleInventPurchSales::Sales,
StatusIssue::ReservOrdered,
StatusReceipt::None)]
class MyProcessor_Sales_ReservOrdered extends MyProcessor_Sales
{
}
[MyProcessorSystemAttribute(ModuleInventPurchSales::Sales,
StatusIssue::ReservPhysical,
StatusReceipt::None)]
class MyProcessor_Sales_ReservPhysical extends MyProcessor_Sales
{
}
உங்கள் வகுப்புகளுக்கு நீங்கள் எப்படி வேண்டுமானாலும் பெயரிடலாம், இங்கு முக்கியமான பகுதி என்னவென்றால், அவை செய்யும் செயலாக்கத்திற்கு ஏற்ற பண்புக்கூறுகளால் உங்கள் வகுப்புகளை அலங்கரிப்பதாகும். (ஆனால் டைனமிக்ஸ் AX இல் வகுப்பு படிநிலைகளுக்கு பெயரிடும் மரபுகள் உள்ளன, முடிந்தால் அவற்றைப் பின்பற்றுவது எப்போதும் நல்லது என்பதை நினைவில் கொள்ளுங்கள்).
இப்போது உங்கள் வகுப்புகள் ஒவ்வொன்றும் எந்த வகையான செயலாக்கத்தைச் செய்கின்றன என்பதை அடையாளம் காண நீங்கள் அலங்கரித்துள்ளீர்கள், தேவைக்கேற்ப துணை வகுப்புகளின் பொருட்களை உடனடிப்படுத்த SysExtension கட்டமைப்பைப் பயன்படுத்திக் கொள்ளலாம்.
உங்கள் சூப்பர் வகுப்பில் (MyProcessor), இது போன்ற ஒரு கட்டுமான முறையை நீங்கள் சேர்க்கலாம்:
StatusIssue _statusIssue,
StatusReceipt _statusReceipt)
{
MyProcessor ret;
MyProcessorSystemAttribute attribute;
;
attribute = new MyProcessorSystemAttribute( _module,
_statusIssue,
_statusReceipt);
ret = SysExtensionAppClassFactory::getClassFromSysAttribute(classStr(MyProcessor), attribute);
if (!ret)
{
// no class found
// here you could throw an error, instantiate a default
// processor instead, or just do nothing, up to you
}
return ret;
}
இந்த முழு இடுகையின் மிகவும் சுவாரஸ்யமான பகுதி - மற்றும் உண்மையில் பொருள் (மன்னிக்கவும்) - SysExtensionAppClassFactory வகுப்பில் உள்ள getClassFromSysAttribute() முறை. இந்த முறை என்னவென்றால், அது ஒரு படிநிலையின் சூப்பர் வகுப்பின் பெயரை ஏற்றுக்கொள்கிறது (மேலும் இந்த சூப்பர் வகுப்பு படிநிலையின் உச்சியில் இருக்க வேண்டிய அவசியமில்லை; இதன் பொருள் இந்த வகுப்பை நீட்டிக்கும் வகுப்புகள் மட்டுமே தகுதி பெறும்) மற்றும் ஒரு பண்புக்கூறு பொருளை ஏற்றுக்கொள்கிறது.
பின்னர் அது குறிப்பிட்ட சூப்பர் கிளாஸை நீட்டித்து , தொடர்புடைய பண்புக்கூறால் அலங்கரிக்கப்பட்ட ஒரு கிளாஸின் பொருளைத் திருப்பி அனுப்புகிறது.
நீங்கள் விரும்பும் அளவுக்கு கட்டுமான முறைக்கு மேலும் சரிபார்ப்பு அல்லது தர்க்கத்தைச் சேர்க்கலாம் என்பது தெளிவாகிறது, ஆனால் இங்கே முக்கியமான விஷயம் என்னவென்றால், செயல்படுத்தப்பட்ட பிறகு, இந்த முறையை மீண்டும் ஒருபோதும் மாற்ற வேண்டியதில்லை. நீங்கள் படிநிலையில் துணை வகுப்புகளைச் சேர்க்கலாம், மேலும் அவற்றை சரியான முறையில் அலங்கரிப்பதை உறுதிசெய்தால், கட்டுமான முறை எழுதப்பட்டபோது அவை இல்லாவிட்டாலும் அவற்றைக் கண்டுபிடிக்கும்.
செயல்திறன் பற்றி என்ன? நான் உண்மையைச் சொல்லப் போனால், நான் அதை பெஞ்ச்மார்க் செய்ய முயற்சிக்கவில்லை, ஆனால் இது கிளாசிக் ஸ்விட்ச் ஸ்டேட்மென்ட் வடிவமைப்பை விட மோசமாகச் செயல்படும் என்பது என் உள்ளுணர்வு. இருப்பினும், டைனமிக்ஸ் AX இல் பெரும்பாலான செயல்திறன் சிக்கல்கள் தரவுத்தள அணுகலால் ஏற்படுகின்றன என்பதைக் கருத்தில் கொண்டு, நான் அதைப் பற்றி அதிகம் கவலைப்பட மாட்டேன்.
நிச்சயமாக, ஆயிரக்கணக்கான பொருட்களை விரைவாக உருவாக்க வேண்டிய ஒன்றை நீங்கள் செயல்படுத்தினால், நீங்கள் மேலும் விசாரிக்க விரும்பலாம், ஆனால் நீண்ட செயலாக்கத்தைச் செய்ய ஒரு பொருளை மட்டுமே உடனடிப்படுத்தும் உன்னதமான நிகழ்வுகளில், அது முக்கியமா என்று நான் சந்தேகிக்கிறேன். மேலும், எனது சரிசெய்தல் உதவிக்குறிப்பை (அடுத்த பத்தி) கருத்தில் கொண்டால், SysExtension கட்டமைப்பு தற்காலிக சேமிப்பை நம்பியிருப்பதாகத் தெரிகிறது, எனவே இயங்கும் அமைப்பில் இது குறிப்பிடத்தக்க செயல்திறன் வெற்றியைப் பெற்றுள்ளதாக நான் சந்தேகிக்கிறேன். சரிசெய்தல்: கட்டுமான முறை உங்கள் துணை வகுப்புகளைக் கண்டுபிடிக்கவில்லை என்றால், அவை சரியாக அலங்கரிக்கப்பட்டுள்ளன என்பது உங்களுக்குத் தெரிந்தாலும், அது ஒரு தற்காலிக சேமிப்பின் சிக்கலாக இருக்கலாம். கிளையன்ட் மற்றும் சர்வர் இரண்டிலும் தற்காலிக சேமிப்பை அழிக்க முயற்சிக்கவும். உண்மையில் AOS ஐ மறுதொடக்கம் செய்ய வேண்டிய அவசியமில்லை, ஆனால் அது கடைசி முயற்சியாக இருக்கலாம்.