2011-02-07 15 views
7

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

यू 2 यू सीएएमएल क्वेरी बिल्डर इस क्वेरी को आदेश देगा जब मैं इसे संपादक में बनाउंगा।

String baseQuery = "<Query><Where><Eq><FieldRef Name='paApproved' /><Value Type='Boolean'>1</Value></Eq></Where><OrderBy><FieldRef Name='paState' Ascending='True' LookupValue='TRUE' /></OrderBy></Query>"; 

qStates.Query = baseQuery; 

SPListItemCollection byState = web.Lists["paUpdates"].GetItems(qStates); 

बाकी पाश कि संग्रह पार्स करके उसे प्रदर्शित करता है के लिए एक है:

यहाँ मैं कैसे निर्माण और क्वेरी निष्पादित की एक कोड का टुकड़ा है। यदि आवश्यक हो तो मैं इसे पोस्ट कर सकता हूं।

यहां सीएएमएल क्वेरी टूल द्वारा किए गए एसओएपी कॉल हैं, मैंने इसे वायरसहार्क के साथ HTTP स्ट्रीम से स्क्रैप किया है।

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope 
     xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
    <GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
    <listName>paUpdates</listName> 
    <query> 
    <Query xmlns=""> 
    <Where> 
     <Eq> 
     <FieldRef Name="paApproved" /> 
     <Value Type="Boolean">1</Value> 
     </Eq> 
    </Where> 
    <OrderBy> 
     <FieldRef Name="paState" Ascending="False" /> 
    </OrderBy> 
    </Query> 
    </query> 
    <viewFields> 
    <ViewFields xmlns="" /> 
    </viewFields> 
    <queryOptions> 
    <QueryOptions xmlns="" /> 
    </queryOptions> 
    </GetListItems> 
</soap:Body> 
</soap:Envelope> 

जो भी कारण CAML क्वेरी उपकरण काम करता है के लिए, मेरे कोड ऐसा नहीं करता। किसी को पता है क्यों? अग्रिम में धन्यवाद।

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

उत्तर

7

कोड नमूना आप पोस्ट wireshark क्वेरी से मेल नहीं खाता:

<Query><Where><Eq><FieldRef Name='paApproved' /><Value Type='Boolean'>1</Value></Eq></Where><OrderBy><FieldRef Name='Title' Ascending='True' /></OrderBy></Query>

होना चाहिए:

<Where><Eq><FieldRef Name="paApproved" /><Value Type="Boolean">1</Value></Eq></Where><OrderBy><FieldRef Name="paState" Ascending="False" /></OrderBy>

आप <Query></Query> तत्वों (see here for an example) की जरूरत नहीं है।

+0

आप सही हैं। क्षमा करें, मैं कुछ परीक्षण कर रहा था। मैं यह देखने के लिए "शीर्षक" का उपयोग कर रहा था कि यह एक लुकअप के बजाय टेक्स्ट फ़ील्ड को सॉर्ट करेगा या नहीं। जिस कोड का मैं उपयोग कर रहा था उसके पास "paState" फ़ील्ड के रूप में था, और यह काम नहीं करता है। मैंने गलत संस्करण काट दिया और चिपकाया। यह एक टेक्स्ट फ़ील्ड को सॉर्ट करेगा, लेकिन अब लुकअप फ़ील्ड पर होगा। – kevingreen

+0

आरोही मान समान नहीं हैं, लेकिन मैंने इसे दोनों तरीकों से परीक्षण किया है, यह अभी भी सी # क्वेरी में ऑर्डर नहीं करेगा। – kevingreen

+0

वूप्स मेरे पास एक टाइपो था। SPQuery का उपयोग करते समय आपको ' 'नोड भी शामिल नहीं करना चाहिए। मेरा अपडेट देखें। –

1

मैंने समस्या को पुन: पेश करने की कोशिश की। आपकी क्वेरी वास्तव में सही ढंग से क्रमबद्ध नहीं है। मैंने इसे काम करने के लिए दो बदलाव किए हैं - हटाए गए क्वेरी तत्व और हटाए गए LookupValue = 'TRUE' (तत्व स्कीमा में ऐसे नाम के साथ कोई विशेषता नहीं है)। उसके बाद सब ठीक लगता है।