खोज…


BQL पार्स और सत्यापित करें

कोई भी Acumatica एप्लिकेशन डेवलपर अपने समय को BQL कोड लिखने में बहुत अधिक खर्च करता है। इसी समय, हर कोई अंतर्निहित विवरण नहीं जानता है कि बीक्यूएल कैसे हुड के तहत काम करता है।

BQL के दिल में दो प्रमुख तरीके हैं: Parse Parse() और Verify() , IBqlCreator इंटरफ़ेस द्वारा घोषित। आमतौर पर उपयोग किए जाने वाले BQL प्रकारों में से अधिकांश, जैसे कि Where<> , And<> , Or<> आदि, इस इंटरफ़ेस से प्राप्त होते हैं।

यह माना जाना चाहिए कि ऐतिहासिक रूप से अटके इन तरीकों के नाम बहुत वर्णनात्मक नहीं हैं। उनके लिए बेहतर बेहतर वैकल्पिक नाम PrepareCommandText और Evaluate

पार्स

public void Parse(
    PXGraph graph, 
    List<IBqlParameter> pars, 
    List<Type> tables, 
    List<Type> fields, 
    List<IBqlSortColumn> sortColumns, 
    StringBuilder text, 
    BqlCommand.Selection selection)

Parse Parse() का एकमात्र उद्देश्य BQL को SQL कमांड में DBMS में भेजने के लिए अनुवाद करना है। इसलिए, यह विधि वर्तमान में बनाए जा रहे SQL कमांड का प्रतिनिधित्व करते हुए एक StringBuilder पैरामीटर को स्वीकार करता है, जिसमें BQL निर्माता स्वयं SQL पाठ प्रतिनिधित्व प्रस्तुत करता है।

उदाहरण के लिए, And<> विधेय के Parse() विधि कमांड पाठ में " AND " को जोड़ देगा, और सभी नेस्टेड BQL रचनाकारों के पुनरावर्ती अनुरोध करेगा।

विशेष रूप से, And<ARRegister.docType, Equal<ARDocType.invoice>> "AND "ARRegister.DocType = 'AR'" जैसी किसी चीज़ में अनुवाद करेगा।

सत्यापित करें

public void Verify(
    PXCache cache, 
    object item, 
    List<object> pars, 
    ref bool? result, 
    ref object value)

Parse() विपरीत, Verify() आवेदन स्तर पर विशुद्ध रूप से संचालित होता है।

एक रिकॉर्ड (जैसे एक ARRegister ऑब्जेक्ट) को देखते हुए, इसका उपयोग उस पर अभिव्यक्ति की गणना करने के लिए किया जा सकता है, जिसमें सूत्रों की गणना करना और परिस्थितियों का मूल्यांकन करना शामिल है।

result पैरामीटर का उपयोग बूलियन स्थिति मूल्यांकन परिणाम को संग्रहीत करने के लिए किया जाता है। यह ज्यादातर जैसे विधेय BQL रचनाकारों द्वारा किया जाता है Where<>

value पैरामीटर का उपयोग अभिव्यक्ति गणना परिणाम को संग्रहीत करने के लिए किया जाता है। उदाहरण के लिए, BQL Constant<string> का value उस स्थिरांक का स्ट्रिंग निरूपण है।

अधिकांश समय, BQL निर्माता या तो परिणाम या मूल्य को प्रभावित करेंगे, लेकिन शायद ही कभी दोनों।

Verify() पद्धति का एक उल्लेखनीय उपयोग स्थिर BqlCommand.Meet() विधि में है, इसका उपयोग PXCache द्वारा यह निर्धारित करने के लिए किया जाता है कि क्या दिया गया आइटम BQL कमांड को संतुष्ट करता है:

public bool Meet(PXCache cache, object item, params object[] parameters)
{
    List<object> pars = new List<object>(parameters);
    bool? result = null;
    object value = null;
    try {
        Verify(cache, item, pars, ref result, ref value);
    }
    catch (SystemException ex) {
        throw new PXException(String.Format("BQL verification failed! {0}", this.ToString()), ex);
    }
    return result == null || result == true;
}

निष्कर्ष

BQL रचनाकारों की वास्तविक शक्ति और सुंदरता निहित है, उनमें से अधिकांश का उपयोग डेटाबेस और एप्लिकेशन स्तर दोनों में किया जा सकता है, जिससे एक्यूमैटिक के कैश विलय तंत्र को सक्षम करने और कोड पुन: प्रयोज्य के लिए एक महान अवसर प्रदान किया जा सकता है।

उदाहरण के लिए, जब आप डेटाबेस से रिकॉर्ड चुनते हैं, तो BQL कमांड का Where<> क्लाज:

  • कमांड तैयारी के दौरान खुद को SQL पाठ में अनुवाद करने के लिए Parse() प्रदान करेगा।
  • कैशे मर्जिंग के दौरान वेरीफाई Verify() प्रदान करेगा, यह निर्धारित करने के लिए कि कौन से आइटम पहले से ही कैश Meet() Where<> क्लॉज की शर्तों ताकि परिणाम सेट में ऐसी कैश्ड वस्तुओं को शामिल किया जा सके।


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