2010-11-06 15 views
6

तो, मेरे पास यह नई परियोजना है। मेरी कंपनी SalesForce.com क्लाउड का उपयोग दिन-प्रतिदिन के संचालन के बारे में जानकारी संग्रहीत करने के लिए करती है। मेरा काम एक नया एप्लीकेशन लिखना है जो अन्य चीजों के साथ, इस डेटा के सीआरयूडी संचालन को मौजूदा इन-हाउस एप्लिकेशन कार्यक्षमता के साथ एकीकृत रूप से एकीकृत करेगा।लिंक से सेल्सफोर्स "एसक्यूएल" प्रदाता

सेल्सफोर्स डब्लूएसडीएल एपीआई का दिल "क्वेरी()" वेब विधियों का एक सेट है जो क्वेरी कमांड को एक स्ट्रिंग के रूप में लेता है। क्वेरी का सिंटैक्स एसक्यूएल-आईएसएच है, लेकिन काफी नहीं है (वे इसे SOQL कहते हैं)। मैं "जादू तार" का प्रशंसक नहीं हूं, इसलिए मैं कोडकैस में लिंक का उपयोग करना चाहता हूं, और IQueryable को एसओक्यूएल क्वेरी में पार्स करना चाहता हूं जो मुझे सेवा के लिए रैपर में चाहिए। यह निश्चित रूप से संभव है (एल 2 ई, एल 2 एसक्यूएल), लेकिन मैं जानना चाहता हूं कि शॉर्टकट है या नहीं, 'अगर मैं कहता हूं कि इसे अपने आप को रोल करने के लिए एक या दो दिन से ज्यादा समय लगेगा, तो मुझे ढूंढने के लिए "प्रोत्साहित किया जाएगा" एक अन्य विधि (संभवतः प्रत्येक सामान्य उपयोग क्वेरी के लिए एक विधि, जो पुराने ऐप्स में उपयोग की जाने वाली विधि थी)। यदि मैं एक सामान्य उद्देश्य SOQL पार्सर बनाने में सफल होता हूं, तो हम इसे कई अन्य आगामी ऐप्स में उपयोग कर सकते हैं, और मैं नायक बनूंगा। यहां तक ​​कि यदि मैं एक साधारण व्यक्ति बनाता हूं जो केवल कुछ क्वेरी संरचनाओं का समर्थन करता है, तो यह मुझे एक परियोजना के साथ एक लिंक-वाई तरीके से आगे बढ़ने की अनुमति देकर लंबा सफर तय करेगा, और मैं इसे अपने खाली समय में विस्तारित कर सकता हूं।

यहाँ विकल्प हैं के रूप में मैं इसे देख:

  • देखो एक मौजूदा Linq2SOQL प्रदाता के लिए कठिन (मेरा गूगल फू किसी और वहाँ बस मुझे यहाँ नाकाम रहने के है, या एक नहीं है, केवल .NET आवरण केवल लिनक को एक अच्छा के रूप में उल्लेख करता है)।
  • अभिव्यक्ति वृक्ष पार्सर बनाएं। इसे कम से कम, चयन और कहां विधि कॉल करने के लिए समर्थन करने की आवश्यकता है, और ऑपरेशन और अनुमानों की आवश्यकता के लिए लैम्बडास को पार्स या उनके विधि निकायों में हेरफेर करने की आवश्यकता है। यह एक बड़ा काम है, लेकिन जैसा कि मैंने कहा, यह निश्चित रूप से संभव है।
  • लिंक 2 एसक्यूएल या इसी तरह के मौजूदा लिंक प्रदाता में सेवा लपेटें जो मुझे एक करीबी पर्याप्त क्वेरी स्ट्रिंग निकालने, इसे पॉलिश करने और इसे सेवा में पास करने की अनुमति देगा। वहाँ दर्जनों होना चाहिए (हालांकि कोई भी जो अभी छोड़ता है, AFAIK)।
  • कॉल अभिव्यक्ति। टोस्टिंग() (या अभिव्यक्ति.डिबग व्यू), और एसओक्यूएल क्वेरी बनाने के लिए उस स्ट्रिंग में हेरफेर करें। यह भंगुर होगा, यह बदसूरत (दृश्यों के पीछे) होगा, और यह केवल वही समर्थन करेगा जो मैं स्पष्ट रूप से ढूंढ रहा हूं, लेकिन यह एक प्राथमिक अनुवाद प्रदान करेगा जो मुझे आगे बढ़ने की अनुमति देगा।

आप क्या सोचते हैं? एक लड़के के लिए दो दिन के काम से अधिक एक लिंक पार्सर का निर्माण कर रहा है? एक मौजूदा लिंक प्रदाता से जुड़े एक हलचल समाधान संभवतः यह करेंगे? अभिव्यक्ति स्ट्रिंग को काटकर और मेरी क्वेरी को इस तरह से बनाने के लिए भयानक होगा?

संपादित करें: ग्राउंडिंग के लिए किर्क के लिए धन्यवाद। मैंने कुछ और अधिक देखा कि मुझे एक बुनियादी एसओक्यूएल पार्सर के लिए क्या करना होगा, और यह किसी भी व्यवहार्य अनुसूची पर लिखे गए वर्किंग कोड कोड के दायरे से बाहर है। उदाहरण के लिए, मुझे चयन() विधि लैम्ब्डा या मेरी डब्लूएसडीएल ऑब्जेक्ट से सभी ज्ञात कॉलम से एक डिफ़ॉल्ट सूची से एक चयन सूची बनाना है, एक ऐसा कार्य जिसे मैंने नहीं सोचा था (मैं जहां पार्सिंग पर अधिक ध्यान केंद्रित कर रहा था) । मुझे यकीन है कि कई अन्य "अज्ञात अज्ञात" हैं जो इसे एक बहुत बड़े सौदे में बदल सकते हैं। मुझे कई लिंक मिले जो एक लिंक प्रदाता लिखने की मूल बातें दिखाते हैं, और हालांकि वे सभी इसे सरल बनाने की कोशिश करते हैं, यह अभी समय-समय पर व्यवहार्य नहीं होगा। मैं अपने भंडार को ढूढ़ूंगा, अब नामित विधियों का उपयोग करके नामित प्रश्नों को समाहित करता हूं (स्वरूपण क्वेरी स्ट्रिंग्स की निरंतर श्रेणी को रखरखाव में सिर-खरोंच की मात्रा को कम करना चाहिए)। सही नहीं है, लेकिन कहीं अधिक व्यवहार्य है। यदि और जब एक Linq2SOQL प्रदाता जमीन से उतरता है, या तो इन-हाउस या ओपन-सोर्स, हम रिफैक्टर कर सकते हैं।, यह एक हालांकि लंबी और शामिल है, का एक बहुत कुछ है -

उत्तर

3

के एक बार में एक लेते हैं: एक मौजूदा Linq2SOQL प्रदाता के लिए

देखो कठिन (मेरा गूगल फू मुझे यहाँ बस विफल हो रहा है, या फिर वहाँ एक नहीं है, केवल .NET रैपर केवल लिनक को एक अच्छा के रूप में उल्लेख करता है)।

हाँ, मुझे संदेह है कि कोई पहले से मौजूद है, लेकिन उम्मीद है कि आप एक पा सकते हैं।

एक अभिव्यक्ति वृक्ष पार्सर बनाएं। इसे कम से कम, चयन और कहां विधि कॉल करने के लिए समर्थन करने की आवश्यकता है, और ऑपरेशन और अनुमानों की आवश्यकता के लिए लैम्बडास को पार्स या उनके विधि निकायों में हेरफेर करने की आवश्यकता है। यह एक बड़ा काम है, लेकिन जैसा कि मैंने कहा, यह निश्चित रूप से संभव है।

यदि आप वास्तव में लंबे समय तक इस बारे में गंभीर हैं तो यह बिल्कुल सही तरीका है।

लिंक 2 एसक्यूएल या इसी तरह के मौजूदा लिंक प्रदाता में सेवा लपेटें जो मुझे एक करीबी पर्याप्त क्वेरी स्ट्रिंग निकालने, इसे पॉलिश करने और सेवा में पास करने की अनुमति देगा। वहाँ दर्जनों होना चाहिए (हालांकि कोई भी जो अभी छोड़ता है, AFAIK)।

"ड्रॉप इन" से आपका क्या मतलब है? आप आसानी से एसएलएल को एल 2 एस से प्राप्त कर सकते हैं।

कॉल अभिव्यक्ति। टोस्टिंग() (या अभिव्यक्ति.डेबग व्यू), और एसओक्यूएल क्वेरी बनाने के लिए उस स्ट्रिंग में हेरफेर करें। यह भंगुर होगा, यह बदसूरत (दृश्यों के पीछे) होगा, और यह केवल वही समर्थन करेगा जो मैं स्पष्ट रूप से ढूंढ रहा हूं, लेकिन यह एक प्राथमिक अनुवाद प्रदान करेगा जो मुझे आगे बढ़ने की अनुमति देगा।

मैं दृढ़ता से, इस दृष्टिकोण से आप को हतोत्साहित, के रूप में कम से कम, यह अभिव्यक्ति के पेड़ ठीक से पार्स करने के रूप में कम से कम के रूप में कठिन हो जाएगा होगा। यदि कुछ भी है, तो इसका उपयोग करने के लिए, आपको सबसे पहले पार्स किए गए तारों को उचित ऑब्जेक्ट मॉडल में रखना होगा - यानी मौजूदा अभिव्यक्ति पेड़ जो आप शुरू कर रहे हैं।


वास्तव में, आपको एक प्रश्न प्रदाता बनाने और यह अधिकार करने के बारे में सोचना चाहिए। मुझे लगता है कि दो दिन एक खिंचाव का एक सा है हालांकि कुछ भी एक आदिम अर्थ में काम करने के लिए, हालांकि यह संभव हो सकता है। आईएमओ, आपको इसे घर पर कुछ और खिलौना के साथ खिलाना चाहिए ताकि आपको बुनियादी टुकड़ों और भागों के साथ कुछ परिचितता हो। तो आप मुश्किल से दो दिनों के बाद कुछ उपयोग करने योग्य प्रश्न प्राप्त करने में सक्षम हो सकते हैं।

ईमानदारी से, इस तरह की परियोजना को पूरी तरह कार्यान्वित करना वास्तव में कई हफ्तों के दायरे में है, अगर महीनों में नहीं - दिन नहीं।

यदि यह बहुत अधिक काम है, तो आप विकल्प 3 पर विचार कर सकते हैं। मैं SOQL पर कोई विशेषज्ञ नहीं हूं, इसलिए कोई विचार नहीं कि सामान्य SQL क्वेरी को SOQL क्वेरीज़ में बदलने में किस तरह का काम शामिल होगा। यदि आपको लगता है कि यह बल्कि एल्गोरिदमिक और विश्वसनीय है, तो यह जाने का तरीका हो सकता है।

+0

"ड्रॉप-इन" द्वारा, मेरा मतलब है एक लिंक प्रदाता जो डीए परत के कार्यान्वयन के साथ काफी कसकर नहीं है; Linq2SQL और Linq2Entities, हालांकि वे SQL बनाते हैं, उन्हें स्कीमा से उत्पन्न डेटा एक्सेस ऑब्जेक्ट्स की एक परत के शीर्ष पर रखने के लिए डिज़ाइन किया गया है। मुझे यकीन नहीं है कि मैं उन्हें आसानी से WDSL- जेनरेट की गई वस्तुओं को लक्षित करने के लिए सेट कर सकता हूं, हालांकि यदि मैं कर सकता हूं, तो मैं 80% कर चुका हूं। – KeithS

संबंधित मुद्दे