ਡਾਇਨਾਮਿਕਸ AX 2012 ਵਿੱਚ ਕਿਹੜਾ ਸਬਕਲਾਸ ਇੰਸਟੈਂਟੀਏਟ ਕਰਨਾ ਹੈ ਇਹ ਪਤਾ ਲਗਾਉਣ ਲਈ SysExtension ਫਰੇਮਵਰਕ ਦੀ ਵਰਤੋਂ ਕਰਨਾ
ਪ੍ਰਕਾਸ਼ਿਤ: 19 ਮਾਰਚ 2025 9:25:37 ਬਾ.ਦੁ. UTC
ਇਹ ਲੇਖ ਦੱਸਦਾ ਹੈ ਕਿ ਡਾਇਨਾਮਿਕਸ AX 2012 ਅਤੇ ਡਾਇਨਾਮਿਕਸ 365 ਵਿੱਚ ਘੱਟ-ਜਾਣਿਆ SysExtension ਫਰੇਮਵਰਕ ਦੀ ਵਰਤੋਂ ਕਿਵੇਂ ਕਰਨੀ ਹੈ ਤਾਂ ਜੋ ਵਿਸ਼ੇਸ਼ਤਾ ਸਜਾਵਟ ਦੇ ਅਧਾਰ ਤੇ ਉਪ-ਕਲਾਸਾਂ ਨੂੰ ਸਥਾਪਤ ਕੀਤਾ ਜਾ ਸਕੇ, ਜਿਸ ਨਾਲ ਇੱਕ ਪ੍ਰੋਸੈਸਿੰਗ ਕਲਾਸ ਲੜੀ ਦੇ ਇੱਕ ਆਸਾਨੀ ਨਾਲ ਐਕਸਟੈਂਸੀਬਲ ਡਿਜ਼ਾਈਨ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।
Using the SysExtension Framework to Find Out Which Subclass to Instantiate in Dynamics AX 2012
ਇਸ ਪੋਸਟ ਵਿੱਚ ਦਿੱਤੀ ਜਾਣਕਾਰੀ Dynamics AX 2012 R3 ਤੇ ਆਧਾਰਿਤ ਹੈ। ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਹੋਰ ਵਰਜਨਾਂ ਲਈ ਇਸਦੀ ਪ੍ਰਮਾਣਿਕਤਾ ਨਾ ਹੋਵੇ। (ਅੱਪਡੇਟ: ਮੈਂ ਪੁਸ਼ਟੀ ਕਰ ਸਕਦਾ ਹਾਂ ਕਿ ਇਸ ਲੇਖ ਵਿੱਚ ਦਿੱਤੀ ਜਾਣਕਾਰੀ Dynamics 365 for Operations ਲਈ ਵੀ ਸਹੀ ਹੈ)
ਜਦੋਂ ਤੁਸੀਂ Dynamics AX ਵਿੱਚ ਪ੍ਰੋਸੈਸਿੰਗ ਕਲਾਸਾਂ ਨੂੰ ਲਾਗੂ ਕਰਦੇ ਹੋ, ਤਦੋਂ ਤੁਹਾਨੂੰ ਅਕਸਰ ਇੱਕ ਕਲਾਸ ਹਾਇਰਾਰਕੀ ਬਣਾਉਣ ਦਾ ਸਮਨਾ ਕਰਨਾ ਪੈਂਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਹਰ ਸਬਕਲਾਸ ਇੱਕ ਐਨਮ ਮੁੱਲ ਨਾਲ ਸੰਬੰਧਿਤ ਹੁੰਦੀ ਹੈ ਜਾਂ ਕੋਈ ਹੋਰ ਡੇਟਾ ਕੁਪਲਿੰਗ ਹੁੰਦੀ ਹੈ। ਇੱਕ ਕਲਾਸਿਕ ਡਿਜ਼ਾਈਨ ਹੈ ਕਿ ਫਿਰ ਸੁਪਰ ਕਲਾਸ ਵਿੱਚ ਇੱਕ ਕਨਸਟ੍ਰਕਟ ਮੈਥਡ ਹੋਵੇ, ਜਿਸ ਵਿੱਚ ਇੱਕ ਸਵਿੱਚ ਹੁੰਦਾ ਹੈ ਜੋ ਇਨਪੁਟ ਦੇ ਆਧਾਰ 'ਤੇ ਕਿਹੜੀ ਕਲਾਸ ਨੂੰ ਇੰਸਟੈਂਸ਼ੀਏਟ ਕਰਨਾ ਹੈ ਇਹ ਨਿਰਧਾਰਿਤ ਕਰਦਾ ਹੈ।
ਇਹ ਸਿਧਾਂਤ ਰੂਪ ਵਿੱਚ ਚੰਗਾ ਕੰਮ ਕਰਦਾ ਹੈ, ਪਰ ਜੇ ਤੁਹਾਡੇ ਕੋਲ ਕਈ ਵੱਖ-ਵੱਖ ਸੰਭਾਵਿਤ ਇਨਪੁਟ ਹੋਣ (ਐਨਮ ਵਿੱਚ ਕਈ ਤੱਤ ਜਾਂ ਸ਼ਾਇਦ ਇਨਪੁਟ ਕਈ ਵੱਖ-ਵੱਖ ਮੁੱਲਾਂ ਦੇ ਮਿਲਾਓ ਦਾ ਹੁੰਦਾ ਹੈ), ਤਾਂ ਇਹ ਬਹੁਤ ਥਕਾਵਟ ਭਰਿਆ ਅਤੇ ਗਲਤੀ-ਪ੍ਰਵਣ ਹੋ ਸਕਦਾ ਹੈ ਅਤੇ ਡਿਜ਼ਾਈਨ ਦਾ ਹਮੇਸ਼ਾ ਇਹ ਨੁਕਸਾਨ ਹੁੰਦਾ ਹੈ ਕਿ ਤੁਹਾਨੂੰ ਕਨਸਟ੍ਰਕਟ ਮੈਥਡ ਨੂੰ ਸੰਪਾਦਿਤ ਕਰਨ ਦੀ ਜਰੂਰਤ ਪੈਣੀ ਹੁੰਦੀ ਹੈ ਜੇ ਤੁਸੀਂ ਕਦੇ ਕੋਈ ਨਵੀਂ ਸਬਕਲਾਸ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ ਜਾਂ ਇਹ ਫੈਸਲਾ ਕਰਦੇ ਹੋ ਕਿ ਕਿਹੜੀ ਸਬਕਲਾਸ ਨੂੰ ਇਸਤੇਮਾਲ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ, ਜਿਸਦੇ ਆਧਾਰ 'ਤੇ ਇਨਪੁਟ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ।
ਸੌਭਾਗਵਸ਼, ਇਸਨੂੰ ਕਰਨ ਦਾ ਇੱਕ ਹੋਰ ਬਹੁਤ ਹੀ ਸੁੰਦਰ, ਪਰ ਦੁਖਦਾਈ ਤੌਰ 'ਤੇ ਕਮ ਮਸ਼ਹੂਰ ਤਰੀਕਾ ਹੈ, ਜਿਸਨੂੰ ਸਿਸਐਕਸਟੇਂਸ਼ਨ ਫਰੇਮਵਰਕ ਦੇ ਜਰੀਏ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।
ਇਹ ਫਰੇਮਵਰਕ ਉਹ ਗੁਣਵੱਤਾਵਾਂ ਲੈ ਕੇ ਫਾਇਦਾ ਉਠਾਉਂਦਾ ਹੈ ਜੋ ਤੁਸੀਂ ਆਪਣੀਆਂ ਸਬਕਲਾਸਾਂ ਨੂੰ ਸਜਾਉਣ ਲਈ ਇਸਤੇਮਾਲ ਕਰ ਸਕਦੇ ਹੋ, ਤਾਂ ਜੋ ਸਿਸਟਮ ਇਹ ਪਤਾ ਲਾ ਸਕੇ ਕਿ ਕਿਹੜੀ ਸਬਕਲਾਸ ਨੂੰ ਕਿਸ ਕੰਮ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਇਸਤੇਮਾਲ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਤੁਹਾਨੂੰ ਹਜੇ ਵੀ ਇੱਕ ਕਨਸਟ੍ਰਕਟ ਮੈਥਡ ਦੀ ਜਰੂਰਤ ਹੋਵੇਗੀ, ਪਰ ਜੇ ਇਹ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਕੀਤਾ ਜਾਵੇ, ਤਾਂ ਤੁਹਾਨੂੰ ਕਦੇ ਵੀ ਇਸਨੂੰ ਸੰਪਾਦਿਤ ਕਰਨ ਦੀ ਜਰੂਰਤ ਨਹੀਂ ਪਏਗੀ ਜਦੋਂ ਤੁਸੀਂ ਨਵੀਆਂ ਸਬਕਲਾਸਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰੋ।
ਆਓ ਇੱਕ ਕਲਪਨਾਤਮਕ ਉਦਾਹਰਣ ਨੂੰ ਦੇਖੀਏ ਅਤੇ ਕਹੀਏ ਕਿ ਤੁਸੀਂ ਇੱਕ ਹਾਇਰਾਰਕੀ ਲਾਗੂ ਕਰਨ ਵਾਲੇ ਹੋ ਜੋ InventTrans ਟੇਬਲ ਦੇ ਆਧਾਰ 'ਤੇ ਕਿਸੇ ਕਿਸਮ ਦੀ ਪ੍ਰੋਸੈਸਿੰਗ ਕਰਦਾ ਹੈ। ਕਿਹੜੀ ਪ੍ਰੋਸੈਸਿੰਗ ਕਰਨੀ ਹੈ ਇਹ ਰਿਕਾਰਡਾਂ ਦੇ StatusReceipt ਅਤੇ StatusIssue 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ, ਇਨ੍ਹਾਂ ਨਾਲ ਨਾਲ ਇਹ ਵੀ ਕਿ ਰਿਕਾਰਡ ਸੇਲਸਲਾਈਨ, ਪਰਚੇਜ਼ਲਾਈਨ ਜਾਂ ਦੋਹਾਂ ਵਿੱਚੋਂ ਕਿਸੇ ਨਾਲ ਸੰਬੰਧਿਤ ਹਨ ਜਾਂ ਨਹੀਂ। ਪਹਿਲਾਂ ਹੀ, ਤੁਸੀਂ ਕਈ ਵੱਖ-ਵੱਖ ਸੰਯੋਜਨਾਂ ਨੂੰ ਦੇਖ ਰਹੇ ਹੋ।
ਆਓ ਫਿਰ ਕਹੀਏ ਕਿ ਤੁਸੀਂ ਜਾਣਦੇ ਹੋ ਕਿ ਅੱਜ ਦੀ ਤਾਰੀਖ ਵਿੱਚ ਤੁਹਾਨੂੰ ਸਿਰਫ ਕੁਝ ਸੰਯੋਜਨਾਂ ਨੂੰ ਸੰਭਾਲਣਾ ਹੈ, ਪਰ ਤੁਸੀਂ ਇਹ ਵੀ ਜਾਣਦੇ ਹੋ ਕਿ ਸਮੇਂ ਦੇ ਨਾਲ ਤੁਹਾਨੂੰ ਹੋਰ ਅਤੇ ਹੋਰ ਸੰਯੋਜਨਾਂ ਨੂੰ ਸੰਭਾਲਣ ਦੀ ਆਗਿਆ ਦਿੱਤੀ ਜਾਵੇਗੀ।
ਆਓ ਇਸਨੂੰ ਸਧਾਰਨ ਰੱਖੀਏ ਅਤੇ ਕਹੀਏ ਕਿ ਅੱਜ ਦੀ ਤਾਰੀਖ ਵਿੱਚ ਤੁਹਾਨੂੰ ਸਿਰਫ SalesLine ਨਾਲ ਸੰਬੰਧਿਤ ਰਿਕਾਰਡਾਂ ਨੂੰ ਸੰਭਾਲਣਾ ਹੈ ਜਿਨ੍ਹਾਂ ਦਾ StatusIssue ReservPhysical ਜਾਂ ReservOrdered ਹੈ, ਸਾਰੀਆਂ ਹੋਰ ਸੰਯੋਜਨਾਂ ਨੂੰ ਅੱਜ ਲਈ ਅਣਦੇਖਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਪਰ ਕਿਉਂਕਿ ਤੁਸੀਂ ਜਾਣਦੇ ਹੋ ਕਿ ਤੁਹਾਨੂੰ ਇਹਨਾਂ ਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸੰਭਾਲਣਾ ਪਏਗਾ, ਤੁਸੀਂ ਆਪਣਾ ਕੋਡ ਇਸ ਤਰੀਕੇ ਨਾਲ ਡਿਜ਼ਾਈਨ ਕਰਨਾ ਚਾਹੋਗੇ ਜੋ ਸੌਖੀ ਤਰ੍ਹਾਂ ਵਧਾਇਆ ਜਾ ਸਕੇ।
ਤੁਹਾਡੀ ਹਾਇਰਾਰਕੀ ਅੱਜ ਲਈ ਕੁਝ ਇਸ ਤਰ੍ਹਾਂ ਦੀ ਦਿਖਾਈ ਦੇ ਸਕਦੀ ਹੈ:
- MyProcessor
- MyProcessor_Sales
- MyProcessor_Sales_ReservOrdered
- MyProcessor_Sales_ReservPhysical
- MyProcessor_Sales
ਹੁਣ, ਤੁਸੀਂ ਆਸਾਨੀ ਨਾਲ ਸੁਪਰ ਕਲਾਸ ਵਿੱਚ ਇੱਕ ਮੈਥਡ ਲਾਗੂ ਕਰ ਸਕਦੇ ਹੋ ਜੋ ModuleInventPurchSales ਅਤੇ StatusIssue ਐਨਮ ਦੇ ਆਧਾਰ 'ਤੇ ਇੱਕ ਸਬਕਲਾਸ ਨੂੰ ਇੰਸਟੈਂਸ਼ੀਏਟ ਕਰਦਾ ਹੈ। ਪਰ ਫਿਰ ਤੁਹਾਨੂੰ ਹਰ ਵਾਰੀ ਸੁਪਰ ਕਲਾਸ ਨੂੰ ਸੰਪਾਦਿਤ ਕਰਨ ਦੀ ਜਰੂਰਤ ਪਏਗੀ ਜਦੋਂ ਤੁਸੀਂ ਕੋਈ ਸਬਕਲਾਸ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ, ਅਤੇ ਇਹ ਵਸਤੁਕੁਆਂਬਣ ਅਦਾਇਗੀ ਵਿੱਚ ਵਿਰੋਧ ਹੈ। ਅਖੀਰਕਾਰ, ਤੁਹਾਨੂੰ ਹਰ ਵਾਰੀ RunBaseBatch ਜਾਂ SysOperationServiceBase ਨੂੰ ਸੰਪਾਦਿਤ ਕਰਨ ਦੀ ਜਰੂਰਤ ਨਹੀਂ ਪੈਂਦੀ ਜਦੋਂ ਤੁਸੀਂ ਕੋਈ ਨਵਾਂ ਬੈਚ ਜਾਬ ਸ਼ਾਮਲ ਕਰਦੇ ਹੋ।
ਬਦਲੇ ਵਿੱਚ, ਤੁਸੀਂ SysExtension ਫਰੇਮਵਰਕ ਦਾ ਇਸਤੇਮਾਲ ਕਰ ਸਕਦੇ ਹੋ। ਇਸ ਨਾਲ ਤੁਹਾਨੂੰ ਇੱਕ ਹੋਰ ਕਲਾਸ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਜਰੂਰਤ ਹੋਵੇਗੀ, ਜਿਸਨੂੰ SysAttribute ਦਾ ਵਾਧਾ ਕਰਨਾ ਪਏਗਾ। ਇਹ ਕਲਾਸ ਉਸ ਗੁਣਵੱਤਾ ਦੇ ਤੌਰ 'ਤੇ ਵਰਤੋਂ ਵਿੱਚ ਆਏਗੀ ਜਿਸ ਨਾਲ ਤੁਸੀਂ ਆਪਣੀਆਂ ਪ੍ਰੋਸੈਸਿੰਗ ਕਲਾਸਾਂ ਨੂੰ ਸਜਾਉਣ ਲਈ ਇਸਤੇਮਾਲ ਕਰ ਸਕਦੇ ਹੋ।
ਇਹ ਕਲਾਸ ਇਸ ਤਰ੍ਹਾਂ ਹੈ ਕਿ ਤੁਸੀਂ ਜਿਸ ਤਰ੍ਹਾਂ ਸਿਸਓਪਰੇਸ਼ਨ ਦੇ ਅਨੁਸ਼ਾਸਨ ਲਈ ਇੱਕ ਡੇਟਾ ਕਾਨਟ੍ਰੈਕਟ ਕਲਾਸ ਬਣਾਉਂਦੇ ਹੋ, ਇਹ ਵੀ ਕੁਝ ਡੇਟਾ ਮੈਂਬਰ ਅਤੇ ਪਾਰਮ ਮੈਥਡ ਦੇ ਨਾਲ ਆਏਗੀ ਜੋ ਉਹ ਮੁੱਲ ਪ੍ਰਾਪਤ ਕਰਨ ਅਤੇ ਸੈੱਟ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾ ਸਕਦੇ ਹਨ।
ਸਾਡੇ ਮਾਮਲੇ ਵਿੱਚ, ClassDeclaration ਕੁਝ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਾਈ ਦੇ ਸਕਦੀ ਹੈ:
{
ModuleInventPurchSales module;
StatusIssue statusIssue;
StatusReceipt statusReceipt
}
ਤੁਹਾਨੂੰ ਸਾਰੇ ਡੇਟਾ ਮੈਂਬਰ ਇੰਸਟੈਂਸ਼ੀਏਟ ਕਰਨ ਲਈ ਇੱਕ new() ਮੈਥਡ ਬਣਾਉਣ ਦੀ ਜਰੂਰਤ ਹੋਵੇਗੀ। ਜੇ ਤੁਸੀਂ ਚਾਹੋ ਤਾਂ ਤੁਸੀਂ ਉਨ੍ਹਾਂ ਵਿੱਚੋਂ ਕੁਝ ਜਾਂ ਸਾਰੇ ਨੂੰ ਡਿਫ਼ੌਲਟ ਮੁੱਲ ਦੇ ਸਕਦੇ ਹੋ, ਪਰ ਮੈਂ ਇਹ ਨਹੀਂ ਕੀਤਾ।
StatusIssue _statusIssue,
StatusReceipt _statusReceipt)
{
;
super();
module = _module;
statusIssue = _statusIssue;
statusReceipt = _statusReceipt;
}
ਅਤੇ ਤੁਹਾਨੂੰ ਹਰ ਡੇਟਾ ਮੈਂਬਰ ਲਈ ਇੱਕ ਪਾਰਮ ਮੈਥਡ ਲਾਗੂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ, ਪਰ ਮੈਂ ਇਨ੍ਹਾਂ ਨੂੰ ਇੱਥੇ ਛੱਡ ਦਿੱਤਾ ਹੈ ਕਿਉਂਕਿ ਮੈਨੂੰ ਪੱਕਾ ਹੈ ਕਿ ਤੁਸੀਂ ਇਹ ਜਾਣਦੇ ਹੋ ਕਿ ਇਹ ਕਿਵੇਂ ਕਰਨਾ ਹੈ - ਨਹੀਂ ਤਾਂ ਆਓ ਇਸਨੂੰ ਇੱਕ ਅਭਿਆਸ ਸਮਝੀਏ ;-)
ਹੁਣ ਤੁਸੀਂ ਆਪਣੇ ਗੁਣਵੱਤਾ ਕਲਾਸ ਦਾ ਇਸਤੇਮਾਲ ਕਰਕੇ ਆਪਣੇ ਹਰ ਪ੍ਰੋਸੈਸਿੰਗ ਕਲਾਸ ਨੂੰ ਸਜਾ ਸਕਦੇ ਹੋ। ਉਦਾਹਰਨ ਵਜੋਂ, ਕਲਾਸ ਡਿਕਲੇਰੇਸ਼ਨ ਕੁਝ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਾਈ ਦੇ ਸਕਦੇ ਹਨ:
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
{
}
ਤੁਸੀਂ ਆਪਣੇ ਕਲਾਸਾਂ ਨੂੰ ਜਿਸ ਤਰ੍ਹਾਂ ਚਾਹੋ ਨਾਮ ਦੇ ਸਕਦੇ ਹੋ, ਇੱਥੇ ਮਹੱਤਵਪੂਰਨ ਹਿੱਸਾ ਇਹ ਹੈ ਕਿ ਤੁਸੀਂ ਆਪਣੀਆਂ ਕਲਾਸਾਂ ਨੂੰ ਉਹਨਾਂ ਗੁਣਵੱਤਾਵਾਂ ਨਾਲ ਸਜਾਓ ਜੋ ਉਹ ਕਿਸ ਪ੍ਰਕਾਰ ਦੀ ਪ੍ਰੋਸੈਸਿੰਗ ਕਰਦੀਆਂ ਹਨ। (ਪਰ ਯਾਦ ਰੱਖੋ ਕਿ Dynamics 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;
}
ਵਾਸਤਵ ਵਿੱਚ ਦਿਲਚਸਪ ਹਿੱਸਾ - ਅਤੇ ਦਰਅਸਲ ਇਸ ਪੋਸਟ ਦਾ ਮਕਸਦ (ਹਾਸੇ ਦੀ ਖਿਮਾ) - ਹੈ ਸਿਸਐਕਸਟੈਂਸ਼ਨਐਪਕਲਾਸਫੈਕਟਰੀ ਕਲਾਸ ਵਿੱਚ ਮੌਜੂਦ getClassFromSysAttribute() ਮੇਥਡ। ਇਹ ਮੇਥਡ ਜੋ ਕੁਝ ਕਰਦੀ ਹੈ ਉਹ ਇਹ ਹੈ ਕਿ ਇਹ ਇੱਕ ਹਾਇਰਾਰਕੀ ਦੇ ਸੁਪਰ ਕਲਾਸ ਦਾ ਨਾਮ ਲੈਂਦੀ ਹੈ (ਅਤੇ ਇਹ ਸੁਪਰ ਕਲਾਸ ਹਾਇਰਾਰਕੀ ਦੇ ਉੱਪਰ ਵਿੱਚ ਹੋਣੀ ਲਾਜ਼ਮੀ ਨਹੀਂ ਹੈ; ਇਹ ਸਿਰਫ ਇਹ ਦੱਸਦਾ ਹੈ ਕਿ ਕੇਵਲ ਉਹ ਕਲਾਸਾਂ ਜੋ ਇਸ ਕਲਾਸ ਨੂੰ ਐਕਸਟੈਂਡ ਕਰਦੀਆਂ ਹਨ ਉਹ ਯੋਗ ਹੋਣਗੀਆਂ) ਅਤੇ ਇੱਕ ਐਟਰਿਬਿਊਟ ਆਬਜੈਕਟ ਲੈਂਦੀ ਹੈ।
ਫਿਰ ਇਹ ਇੱਕ ਐਸੇ ਕਲਾਸ ਦਾ ਆਬਜੈਕਟ ਵਾਪਸ ਕਰਦੀ ਹੈ ਜੋ ਦਿੱਤੀ ਗਈ ਸੁਪਰ ਕਲਾਸ ਨੂੰ ਤੇ ਐਕਸਟੈਂਡ ਕਰਦੀ ਹੈ ਅਤੇ ਉਸ ਦੇ ਨਾਲ ਇੱਕ ਸਬੰਧਤ ਐਟਰਿਬਿਊਟ ਨਾਲ ਸਜਾਈ ਜਾਂਦੀ ਹੈ।
ਤੁਸੀਂ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਕਨਸਟ੍ਰਕਟ ਮੇਥਡ ਵਿੱਚ ਜਿੰਨਾ ਚਾਹੋ ਉਤਨਾ ਹੋਰ ਵੈਧਤਾ ਜਾਂ ਤਰਕੀਬ ਜੋੜ ਸਕਦੇ ਹੋ, ਪਰ ਇੱਥੇ ਦਾ ਮਹੱਤਵਪੂਰਨ ਸਿੱਖਣਾ ਇਹ ਹੈ ਕਿ ਜਦੋਂ ਇਹ ਲਾਗੂ ਹੋ ਜਾਵੇ, ਤੁਸੀਂ ਮੁੜ ਇਸ ਮੇਥਡ ਨੂੰ ਕਦੇ ਵੀ ਤਬਦੀਲ ਨਹੀਂ ਕਰਨਾ ਚਾਹੀਦਾ। ਤੁਸੀਂ ਹਾਇਰਾਰਕੀ ਵਿੱਚ ਸਬ ਕਲਾਸਾਂ ਜੋੜ ਸਕਦੇ ਹੋ ਅਤੇ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹੋ ਕਿ ਉਨ੍ਹਾਂ ਨੂੰ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਸਜਾਇਆ ਗਿਆ ਹੈ, ਕਨਸਟ੍ਰਕਟ ਮੇਥਡ ਉਹਨਾਂ ਨੂੰ ਲੱਭ ਲਏਗਾ ਹਾਲਾਂਕਿ ਉਹ ਉਸ ਸਮੇਂ ਮੌਜੂਦ ਨਹੀਂ ਸਨ ਜਦੋਂ ਇਹ ਲਿਖਿਆ ਗਿਆ ਸੀ।
ਪ੍ਰਦਰਸ਼ਨ ਬਾਰੇ ਕੀ? ਮੈਂ ਇਮਾਨਦਾਰੀ ਨਾਲ ਇਸ ਦਾ ਬੈਂਚਮਾਰਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਨਹੀਂ ਕੀਤੀ, ਪਰ ਮੇਰੀ ਅੰਦਾਜ਼ਾ ਲਗਾਉਣੀ ਹੈ ਕਿ ਇਹ ਸ਼ਾਇਦ ਕਲਾਸਿਕ ਸਵਿਚ ਸਟੇਟਮੈਂਟ ਡਿਜ਼ਾਈਨ ਨਾਲੋਂ ਘੱਟ ਪ੍ਰਦਰਸ਼ਨ ਕਰਦਾ ਹੈ। ਹਾਲਾਂਕਿ, ਧਿਆਨ ਵਿੱਚ ਰੱਖਦੇ ਹੋਏ ਕਿ ਡਾਇਨਾਮਿਕਸ ਐਕਸ ਵਿੱਚ ਸਭ ਤੋਂ ਜਿਆਦਾ ਪ੍ਰਦਰਸ਼ਨ ਸਮੱਸਿਆਵਾਂ ਡੇਟਾਬੇਸ ਐਕਸੈਸ ਕਰਕੇ ਪੈਦਾ ਹੁੰਦੀਆਂ ਹਨ, ਮੈਂ ਇਸ ਬਾਰੇ ਜ਼ਿਆਦਾ ਚਿੰਤਾ ਨਹੀਂ ਕਰਾਂਗਾ।
ਬਿਲਕੁਲ, ਜੇ ਤੁਸੀਂ ਕੁਝ ਐਸਾ ਲਾਗੂ ਕਰ ਰਹੇ ਹੋ ਜੋ ਹਜ਼ਾਰਾਂ ਆਬਜੈਕਟਾਂ ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਬਣਾਉਣ ਦੀ ਲੋੜ ਰੱਖਦਾ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਹੋਰ ਜਾਂਚ ਕਰਨ ਦੀ ਸੋਚ ਸਕਦੇ ਹੋ, ਪਰ ਉਹਨਾਂ ਕਲਾਸਿਕ ਮਾਮਲਿਆਂ ਵਿੱਚ ਜਿੱਥੇ ਤੁਸੀਂ ਸਿਰਫ ਇੱਕ ਆਬਜੈਕਟ ਨੂੰ ਕੁਝ ਲੰਬੇ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਲਈ ਇੰਸਟੈਂਸ਼ੀਏਟ ਕਰਦੇ ਹੋ, ਮੈਨੂੰ ਸ਼ੱਕ ਹੈ ਕਿ ਇਹ ਮੱਤਵਪੂਰਨ ਹੋਵੇਗਾ। ਇਸ ਦੇ ਨਾਲ, ਮੇਰੀ ਟ੍ਰਬਲਸ਼ੂਟਿੰਗ ਸਲਾਹ (ਅਗਲੇ ਪੈਰਾਗ੍ਰਾਫ) ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਰੱਖਦੇ ਹੋਏ, ਇਹ ਲਗਦਾ ਹੈ ਕਿ ਸਿਸਐਕਸਟੈਂਸ਼ਨ ਫਰੇਮਵਰਕ ਕੈਸ਼ਿੰਗ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ, ਇਸ ਲਈ ਇੱਕ ਚੱਲਦੇ ਹੋਏ ਸਿਸਟਮ ਵਿੱਚ ਮੈਨੂੰ ਸ਼ੱਕ ਹੈ ਕਿ ਇਸ ਦਾ ਕੋਈ ਮਹੱਤਵਪੂਰਣ ਪ੍ਰਦਰਸ਼ਨ ਪ੍ਰਭਾਵ ਹੋਵੇ।
ਟ੍ਰਬਲਸ਼ੂਟਿੰਗ: ਜੇਕਰ ਕਨਸਟ੍ਰਕਟ ਮੇਥਡ ਤੁਹਾਡੇ ਸਬ ਕਲਾਸਾਂ ਨੂੰ ਨਹੀਂ ਲੱਭਦੀ ਹਾਲਾਂਕਿ ਤੁਸੀਂ ਯਕੀਨੀ ਹੋ ਕਿ ਉਹ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਸਜਾਈ ਗਈਆਂ ਹਨ, ਤਾਂ ਇਹ ਕੈਸ਼ਿੰਗ ਦੀ ਸਮੱਸਿਆ ਹੋ ਸਕਦੀ ਹੈ। ਕਲਾਇੰਟ ਅਤੇ ਸਰਵਰ ਦੋਵਾਂ 'ਤੇ ਕੈਸ਼ ਸਾਫ਼ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਇਹ ਜ਼ਰੂਰੀ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ ਕਿ ਅਸਲ ਵਿੱਚ AOS ਨੂੰ ਰੀਸਟਾਰਟ ਕੀਤਾ ਜਾਏ, ਪਰ ਇਹ ਆਖਰੀ ਚੋਣ ਹੋ ਸਕਦੀ ਹੈ।