2011-08-29 16 views
2

下面是我在做什麼(這是在谷歌快速搜索,只是第一的成績之一):需要幫助瓦特/的SharePoint CAML查詢

http://msdn.microsoft.com/en-us/library/cc300163(v=office.12).aspx

我的數據綁定DropDownList的項目如下:

<listitem>All Providers</listitem> 
<listitem>Provider 1</listitem> 
<listitem>Provider 2</listitem> 

視圖我現在的CAML查詢看起來像:

<Query> 
<Where> 
    <And> 
    <Or> 
    <Eq> 
    <FieldRef Name="Status" /> 
    <Value Type="Lookup">Submitted</Value> 
    </Eq> 
    <Eq> 
    <FieldRef Name="Status" /> 
    <Value Type="Lookup">In Progress</Value> 
    </Eq> 
    </Or> 
    <Eq> 
    <FieldRef Name="Provider"/> 
    <Value Type="Text">{Param1}</Value> 
    </Eq> 
    </And> 
</Where> 
<OrderBy> 
    <FieldRef Name="ID" Ascending="FALSE"></FieldRef> 
</OrderBy> 
</Query> 

我需要的是這個...

在僞代碼:

如果{}參數1等於「所有供應商」只是狀態篩選,其中狀態等於「已提交」或「進行中」 否則,如果{Param1}不等於「狀態」和「提供者」上的「所有提供者」過濾器,其中狀態等於「已提交」或「正在進行」,提供者等於{參數1}

如何將此代碼放入View XML架構?

我知道這可以做,因爲微軟已經在SharePoint中使用它,並有第三方控件。

例如...

1)在SP,在左側導航菜單中點擊 「列表」。

2)在最右邊的搜索框下方,您會看到「View:」並顯示下拉菜單。

3)根據您選擇的視圖,URL的查詢字符串包含「BaseType」,該值將更改爲您選擇的值。如果選擇「所有網站內容」,則「查詢字符串」中的「BaseType」將被忽略。

感謝, 約書亞

+1

您沒有提及SharePoint的版本,但是在2007年,您可以使用U2U CAML查詢生成器(http://www.u2u.net/res/Tools/CamlQueryBuilder.aspx)來構建您的查詢。這爲我節省了很多頭痛。 –

+1

CAML查詢生成器也適用於SharePoint 2010。鏈接:http://www.u2u.net/res/Tools/CamlQueryBuilder.aspx – CBono

回答

1

首先,我認爲你是對的提供商領域更好adding a filter webpart,因爲這可以讓你不爲空值過濾。

如果必須有過濾器上的「所有供應商」,你可以創建列表呼叫AllProviders說上計算的字段,用公式參數:

="All Providers" 

這便於查詢子句被輸入:

<Query> 
    <Where> 
    <And> 
     <Or> 
     <Eq> 
      <FieldRef Name="AllProviders"/> 
      <Value Type="Text">{Param1}</Value> 
     </Eq> 
     <Eq> 
      <FieldRef Name="Provider"/> 
      <Value Type="Text">{Param1}</Value> 
     </Eq> 
     </Or> 
     <Or> 
     <Eq> 
      <FieldRef Name="Status"/> 
      <Value Type="Lookup">In Progress</Value> 
     </Eq> 
     <Eq> 
      <FieldRef Name="Status"/> 
      <Value Type="Lookup">Submitted</Value> 
     </Eq> 
     </Or> 
    </And> 
    </Where> 
</Query> 

狀態字段將始終匹配「正在進行」或「已提交」。

如果您的參數=「所有提供者」,那麼您將匹配計算的字段,否則您將匹配提供者字段。

請注意,這確實會阻止提供者調用「所有提供者」。