2016-05-02 42 views
1

下のCAMLQueryに別のOR条件を追加しようとしていますが、何も動作していないようです。助けてもらえますか?複数の条件付きCAMLクエリ?

ここには、既存の動作中のクエリがあります。別のOr条件を追加して、(Permissions_Type = x1またはPermissions_Type = x2)AND(Category = y1 OR Category = y2)AND(User_Specific = z1 OR User_Specific = z2)を追加しようとしています。

<Query> 
<Where> 
    <And> 
     <And> 
      <Or> 
       <Eq> 
        <FieldRef Name="Permissions_Type"/> 
        <Value Type="Lookup">User</Value> 
       </Eq> 
       <Eq> 
        <FieldRef Name="Permissions_Type"/> 
        <Value Type="Lookup">Superuser</Value> 
       </Eq> 
      </Or> 
      <Or> 
       <Eq> 
        <FieldRef Name="Category"/> 
        <Value Type="Text">Survey</Value> 
       </Eq> 
       <Eq> 
        <FieldRef Name="Category"/> 
        <Value Type="Text">Notification</Value> 
       </Eq> 
      </Or> 
     </And> 
     <Geq> 
      <FieldRef Name="Event_End" /> 
      <Value Type="DateTime"><Today Offset="-1" /></Value> 
     </Geq> 
    </And> 
</Where> 
<OrderBy><FieldRef Name="Created" Ascending="FALSE" /></OrderBy> 
</Query> 

そして、これが私の付加状態であるために私がしたい...多かれ少なかれUser_Specificがnullであるか、User_Specificは、z覚えておくと便利です何

<Or> 
    <IsNull><FieldRef Name="User_Specific"/></IsNull> 
    <Eq> 
     <FieldRef Name="User_Specific"/> 
     <Value Type="Number">9</Value> 
    </Eq> 
</Or> 
+0

作業クエリは動作しません。あなたが上でそれを記述する方法。 '(Permissions_Type = a OR Permissions_Type = b)AND(カテゴリ= x ORカテゴリ= y)'それで、別のOR条件を追加すると、そのように動作し続けたいのですか? '(Permissions_Type = aまたはPermissions_Type = b)AND(カテゴリ= x ORカテゴリ= y)AND(User_Specific = j OR User_Specific = k)'のような何か? – Thriggle

+1

説明を求めてくれてありがとう。私は更新しました。 – Mike

答えて

1

がある=ここで、すべての<And><Or>ことノード正確に 2つの子ノードが必要です。

3つ以上のAND条件またはOR条件がある場合は、必要に応じてネストされた<And>および<Or>ノードを使用して結合する必要があります。

あなたのロジックをマッピングしているとき、と考えるために役立つこととORそれぞれが2つのパラメータのみ取る機能などがありますあなたはCAMLに、あなたは終わるだろうことを翻訳した場合

AND( 
    OR(permissions=user, permissions=superuser), 
    AND( 
     OR(category=survey, category=notification), 
     OR(user_specific=z1, user_specific=z2) 
    ) 
) 

をこのような何かを持つアップ:

<Where> 
    <And> 
     <And> 
      <Or> 
       <Eq> 
        <FieldRef Name="Permissions_Type"/> 
        <Value Type="Lookup">User</Value> 
       </Eq> 
       <Eq> 
        <FieldRef Name="Permissions_Type"/> 
        <Value Type="Lookup">Superuser</Value> 
       </Eq> 
      </Or> 
      <And> 
       <Or> 
        <Eq> 
         <FieldRef Name="Category"/> 
         <Value Type="Text">Survey</Value> 
        </Eq> 
        <Eq> 
         <FieldRef Name="Category"/> 
         <Value Type="Text">Notification</Value> 
        </Eq> 
       </Or> 
       <Or> 
        <IsNull><FieldRef Name="User_Specific"/></IsNull> 
        <Eq> 
         <FieldRef Name="User_Specific"/> 
         <Value Type="Number">9</Value> 
        </Eq> 
       </Or> 
      </And> 
     </And> 
     <Geq> 
      <FieldRef Name="Event_End" /> 
      <Value Type="DateTime"><Today Offset="-1" /></Value> 
     </Geq> 
    </And> 
</Where> 

(私は最後にあなたの<Geq>条件のための余分な<And>にタックしなければならなかった。)

+0

私のUser_Specific列名または列型に何かがあったようです。何が正確かわからない。いずれかの方法。別の列名で削除して再作成しました。出来た! :) – Mike