खोज…


ग्राफ़ में ओवरराइड DAC विशेषताओं में CacheAttached का उपयोग करना

कभी-कभी, आपको किसी विशेष स्क्रीन के लिए एक विशेष डेटा एक्सेस क्लास (DAC) फ़ील्ड की एक या अधिक विशेषताओं को ओवरराइड करने की आवश्यकता होती है, अन्य स्क्रीन के लिए मौजूदा व्यवहार को बदले बिना।

सभी विशेषताओं को प्रतिस्थापित करना

मान लें कि मूल DAC फ़ील्ड विशेषताओं को नीचे दिखाए गए अनुसार घोषित किया गया है:

public class ARInvoice : IBqlTable
{
    [PXDBDecimal(4)]
    [PXDefault(TypeCode.Decimal, "0.0")]
    [PXUIField(DisplayName = "Commission Amount")]
    public virtual Decimal? CommnAmt 
    { 
        get; 
        set; 
    }
}

ग्राफ़ में फ़ील्ड की विशेषताओं को ओवरराइड करने का मूल तरीका ग्राफ़ में CacheAttached ईवेंट हैंडलर घोषित करना है जो CacheAttached के नामकरण के लिए मानक सम्मेलन का अनुसरण करता है (ईवेंटअर्ग तर्क की अनुपस्थिति पर ध्यान दें)। ईवेंट हैंडलर के निकाय को निष्पादित नहीं किया जाएगा, लेकिन हैंडलर पर आपके द्वारा प्लेस की जाने वाली कोई भी विशेषताएँ एएसी फ़ील्ड के अनुरूप विशेषताओं को बदल देगी:

[PXDBDecimal(4)]
[PXDefault(TypeCode.Decimal, "0.0")]
[PXUIField(DisplayName = "Commission Amount")]
[PXAdditionalAttribute(NecessaryProperty = true)]
protected virtual void ARInvoice_CommnAmt_CacheAttached(PXCache sender) { }

DAC फ़ील्ड में एक नया गुणन लागू करना

CacheAttached हैंडलर पर रखी गई विशेषताओं का सेट DAC में फ़ील्ड पर रखी गई विशेषताओं के पूरे सेट को फिर से परिभाषित करेगा। यह लगभग हमेशा ओवरकिल है; ध्यान दें कि पिछले उदाहरण में, फ़ील्ड में केवल एक विशेषता जोड़ने के लिए, आपको DAC से अन्य सभी विशेषता घोषणाओं को कॉपी करना होगा। यह अवांछित कोड दोहराव की ओर जाता है, साथ ही साथ DAC और ग्राफ के सिंक से बाहर जाने की संभावना। ऐसी स्थिति की कल्पना करना बहुत आसान है जब कोई व्यक्ति डिफ़ॉल्ट रूप से तर्क में परिवर्तन करता है, उदाहरण के लिए, डैक में PXDefaultAttribute , लेकिन विभिन्न ग्राफ़ में CacheAttached हैंडलर पर रखी गई सभी संबंधित विशेषताओं को अपडेट करना भूल जाता है।

इस समस्या को हल करने के लिए, Acumatica फ्रेमवर्क एक विशेष विशेषता प्रदान करता है जिसे PXMergeAttributesAttribute कहा जाता है। जब इस विशेषता को CacheAttached हैंडलर पर रखा जाता है, तो आप DAC में परिभाषित मौजूदा विशेषताओं का पुन: उपयोग कर सकते हैं।

PXMergeAttributesAttribute का उपयोग करके एक विशेषता PXMergeAttributesAttribute :

[PXMergeAttributes(Method = MergeMethod.Append)]
[PXAdditionalAttribute(NecessaryProperty = true)]
protected virtual void ARInvoice_CommnAmt_CacheAttached(PXCache sender) { }

उपरोक्त उदाहरण में, मूल DAC से विशेषताओं का पूरा सेट पुन: उपयोग किया जाएगा, जो कि CacheAttached ईवेंट हैंडलर पर आपके द्वारा घोषित किसी भी विशेषता द्वारा जोड़ा जाएगा।

PXMergeAttributesAttribute विधि गुण के लिए निम्नलिखित संभावित मानों के अनुसार अन्य मर्ज व्यवहार हैं:

  • MergeMethod.Replace DAC की विशेषताओं को पूरी तरह से प्रतिस्थापित करता है ( PXMergeAttributesAttribute की अनुपस्थिति के PXMergeAttributesAttribute )।
  • MergeMethod.Append CacheAttached हैंडलर से मूल DAC विशेषताओं के लिए विशेषताओं को जोड़ता है।
  • MergeMethod.Merge Append समान है; हालाँकि, यह भी जाँचता है कि हैंडलर विशेषताओं और DAC फ़ील्ड विशेषताओं के बीच कोई परस्पर विरोधी विशेषताएँ हैं या नहीं। यदि कोई विरोध है, तो CacheAttached विशेषता पूर्वता लेता है और संबंधित DAC विशेषता को छोड़ दिया जाता है।

एक गुण की एक एकल संपत्ति को ओवरराइड करना

एक बहुत ही सामान्य अनुप्रयोग विकास परिदृश्य तब होता है जब आपको किसी विशेष स्क्रीन के लिए DAC की विशेषता की सिर्फ एक ही संपत्ति को फिर से परिभाषित करना होता है; उस स्थिति पर विचार करें जब आपको PXUIFieldAttribute की DisplayName संपत्ति को परिभाषित करना है।

उस प्रयोजन के लिए, आप एक और विशेष विशेषता Acumatica फ्रेमवर्क द्वारा प्रदान किया गया उपयोग कर सकते हैं: PXCustomizeBaseAttributeAttribute । इसका निर्माणकर्ता तीन मूल्यों को स्वीकार करता है:

  • DAC विशेषता का प्रकार जिसकी संपत्ति को ओवरराइड करने की आवश्यकता है
  • ओवरराइड करने के लिए गुण की संपत्ति का नाम (कोड रखरखाव के लिए # # 6.0 में nameof ऑपरेटर का उपयोग करें)
  • निर्दिष्ट संपत्ति के लिए नया मूल्य।

मान लीजिए कि केवल एक स्क्रीन के लिए कमीशन राशि से आधार मुद्रा आयोग तक UI प्रदर्शन नाम को बदलने की आवश्यकता है। निम्न कोड उदाहरण दर्शाता है कि वांछित व्यवहार को कैसे लागू किया जाए।

[PXMergeAttributes(Method = MergeMethod.Append)]
[PXCustomizeBaseAttribute(typeof(PXUIFieldAttribute), nameof(PXUIFieldAttribute.DisplayName), "Base Currency Commission")]
protected virtual void ARInvoice_CommnAmt_CacheAttached(PXCache sender) { }

इस उदाहरण में, PXMergeAttributes यह सुनिश्चित करता है कि मूल DAC विशेषताएँ संरक्षित हैं, और PXCustomizeBaseAttribute सॉफ्टवेयर इंजीनियर को ग्राफ़ में प्रश्न के लिए UI फ़ील्ड के प्रदर्शन नाम को ओवरराइड करने की अनुमति देता है।

एक विशेषता को दूसरे गुण के साथ बदलना

मान लीजिए कि एक आवश्यकता एक डीएसी क्षेत्र के बदलने के लिए है कि वहाँ PXDefaultAttribute साथ PXDBDefaultAttribute केवल एक स्क्रीन के लिए।

यह निम्नलिखित तरीके से प्राप्त किया जा सकता है:

[PXMergeAttributes(Method = MergeMethod.Append)]
[PXRemoveBaseAttribute(typeof(PXDefaultAttribute))]
[PXDBDefault(typeof(SOShipment.siteID), PersistingCheck = PXPersistingCheck.Nothing)]
protected void SOOrderShipment_SiteID_CacheAttached(PXCache sender) { }

गुण-अनुरूपण गुणों का अनुप्रयोग क्रम

  1. PXCustomizeBaseAttribute
  2. PXRemoveBaseAttribute
  3. PXMergeAttributes


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow