2010-06-07 65 views
0

我在Sharepoint中有一個自定義搜索webpart,它有7個過濾器。我正在使用CAML查詢從Sharepoint列表中獲取數據。我想編寫一個廣義的SPQuery,它將根據搜索參數篩選出數據。搜索參數是可選的。如果用戶輸入任何2個參數,那麼我需要獲取與這2個參數相對應的數據。我如何使用CAML Query來實現這一點?我無法思考了基於搜索參數生成我CAML查詢廣義辦法的..如何在sharepoint中使用可選搜索值的caml查詢

+0

你能舉一個例子,說明輸入可能是什麼樣子?您還需要參數之間的一些邏輯,您允許的選項有哪些? – 2010-06-07 20:54:53

+0

我實際上通過編寫邏輯來動態生成spquery來解決問題 – 2010-06-08 16:41:27

回答

0

實際上寫的邏輯來動態生成spquery

1

這裏解決的問題是一些代碼我在Silverlight中使用基於搜索參數生成CAML查詢。 也許它是有幫助的。

private ClientContext context; 
    private Microsoft.SharePoint.Client.List SampleSPList; 
    private Microsoft.SharePoint.Client.ListItemCollection SampleSPCollection; 

    //Load the List 
    void LoadList() 
    { 
     SampleSPList = context.Web.Lists.GetByTitle("Sample"); 
     context.Load(SampleSPList); 

     CamlQuery query = new Microsoft.SharePoint.Client.CamlQuery(); 

     string camlQueryXml = ""; 
     bool existsWhere = false; 

     if (searchString.Text != "") 
     { 
      camlQueryXml = camlQueryXml + "<Contains><FieldRef Name='sampleString' /><Value Type='Text'>" + searchString.Text + "</Value></Contains>"; 
      if (existsWhere == true) { 
       camlQueryXml = "<And>" + camlQueryXml + "</And>"; 
      } 
      existsWhere = true; 
     } 

     if (searchTextArea.Text != "") 
     { 
      camlQueryXml = camlQueryXml + "<Contains><FieldRef Name='sampleTextArea' /><Value Type='Text'>" + searchTextArea.Text + "</Value></Contains>"; 
      if (existsWhere == true) 
      { 
       camlQueryXml = "<And>" + camlQueryXml + "</And>"; 
      } 
      existsWhere = true; 
     } 

     if (existsWhere == true) { camlQueryXml = "<View><Query><OrderBy><FieldRef Name='ID' /></OrderBy><Where>" + camlQueryXml + "</Where></Query></View>"; } 
     else { camlQueryXml = "<View><Query><OrderBy><FieldRef Name='ID' /></OrderBy></Query></View>"; } 

     query.ViewXml = camlQueryXml; 

     SampleSPCollection = SampleSPList.GetItems(query); 
     context.Load(SampleSPCollection); 
     context.ExecuteQueryAsync(ListLoaded, ListLoadFailed); 
    }