2008-12-04 15 views
5

CAML में मैं "इसमें शामिल हैं" का उपयोग कर SharePoint Listitems से पूछताछ कर सकता हूं, लेकिन इसमें कोई "इसमें शामिल नहीं है" - मैं उपयोग कर सकता हूं।सीएएमएल में "शामिल नहीं है"?

तो उन वस्तुओं को प्राप्त करने का सबसे अच्छा तरीका क्या है जिसमें स्ट्रिंग नहीं है? क्या प्रत्येक आइटम के माध्यम से लूप की तुलना में बेहतर तरीका है?

उत्तर

4

वही प्रतिबंध BeginWith पर लागू होता है। मुझे दुख से कोई अच्छा समाधान नहीं पता है। आप क्या कर सकते हैं: प्रत्येक आइटम के माध्यम से एक क्वेरी-क्वेरी, लूप करें और आईडी प्राप्त करें, फिर "ID NotEqual 1 या ID NotEqual 2 या ID NotEqual 3 ......" के लिए एक और बड़ी क्वेरी करें क्योंकि आईडी को अनुक्रमित किया गया है जहां तक ​​मुझे पता है, डेटाबेस पर इसका छोटा प्रभाव होना चाहिए, लेकिन यह अभी भी वास्तव में खराब है।

छोटी सूची के लिए इससे कोई फर्क नहीं पड़ता, बड़ी सूचियों के लिए मैं एसक्यूएल सर्वर प्रोफाइलर का उपयोग यह देखने के लिए करता हूं कि प्रभाव क्या है।

+0

यह वास्तव में बुरा गंध है, तो आप आपकी शेष क्वेरी के अलावा एक गणना स्तंभ का उपयोग की कोशिश की है देखते हैं? –

+0

@AlexanderN एक गणना कॉलम हमेशा काम नहीं करता है, उदाहरण के लिए यदि आप बनाए गए फ़ील्ड या अन्य फ़ील्ड पर फ़िल्टर कर रहे हैं जो सामग्री प्रकारों का हिस्सा हैं - वे कॉलम सूची में अनुपलब्ध प्रतीत होते हैं। –

0

'इसमें शामिल' और 'शुरुआती' के साथ यह समस्या मुझे भी परेशान करती है। मुझे उम्मीद है कि शेयरपॉइंट कैमल के अगले संस्करण में वास्तविक उपकरण के रूप में विस्तारित किया जाएगा, न केवल हमारे पैर पर एक चट्टान।

जिस तरह से मैं इसे करता हूं, उतना ही क्वेरी निर्दिष्ट करना है और फिर उन पंक्तियों को फ़िल्टर करना जो सी # कोड में शर्तों से मेल नहीं खाते हैं। कभी-कभी यह बहुत बदसूरत होता है क्योंकि आपको कभी-कभी 100 पंक्तियों को 1 परिणाम के साथ समाप्त करने की प्रक्रिया होती है जो मैच की स्थिति होती है।

0

@ ड्रेक्स: आइए आशा करें कि सीएएमएल दूर हो जाए। यह निश्चित रूप से वर्तमान एसपी प्रोग्रामिंग के सबसे खराब पहलुओं में से एक है।

+0

यह अच्छा होगा लेकिन उत्पाद के कई हिस्सों पर इसका निर्माण किया गया है! –

+1

सीएएमएल एक सूची परिभाषा भाषा (ONET.xml) के रूप में काफी उपयोगी है। एसक्यूएल एक एसक्यूएल प्रतिस्थापन के रूप में एक मजाक है, और यहां तक ​​कि एक अच्छा भी नहीं है। –

3

तो आइटम प्राप्त करने का सबसे अच्छा तरीका क्या है जिसमें कोई स्ट्रिंग नहीं है?

एक मूल्यवान कॉलम का उपयोग करके आप जिस मान को देख रहे हैं उसे प्रतिबिंबित करने के लिए गणना मूल्य का उपयोग करने का प्रयास करें।

उदाहरण के लिए, कॉलम को IsCritical कहा जाता है। फिर, स्तंभ एक "हाँ/नहीं" और सूत्र के रूप में के रूप में

=ISNUMBER(FIND("Critical"), [Title])) 

फिर

<Query> 
<Where> 
    <Eq> 
    <FieldRef Name='IsCritical'/> 
    <Value Type='Boolean'>0</Value> 
    </Eq> 
</Where> 
</Query> 

एक 0 इस क्वेरी में जोड़ने के अपने CAML क्वेरी में थोड़े दर्शाता है "महत्वपूर्ण नहीं है"। हालांकि मुझे यकीन नहीं है कि मूल सीएएमएल "नहीं सामग्री" होने के विरोध में प्रदर्शन क्या हो सकता है जो दुर्भाग्य से मौजूद नहीं है।

इसके अलावा CAML Query Schema at MSDN

0

न करने का प्रयास भी शामिल है

<NotIncludes> 
<FieldRef Name='FileLeafRef' /> 
              <Value Type='Text'>stringvalue</Value> 
             </NotIncludes> 
संबंधित मुद्दे