CAMLQuery有多个或条件?

时间:2016-05-02 17:05:31

标签: sharepoint caml

我试图在下面的CAMLQuery中添加另一个OR条件,但似乎没有任何效果。有人可以帮忙吗?

这是现有的和有效的查询。我试图添加另一个Or条件,以便查询是(Permissions_Type = x1 OR 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>

1 个答案:

答案 0 :(得分:1)

有用的是,每个<And><Or>节点需要完全两个子节点。

如果您有两个以上的AND或OR条件,则需要根据需要使用嵌套的<And><Or>节点组合它们。

当您将逻辑映射出来时,将AND和OR视为每个只带两个参数的函数可能会有所帮助:

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

当您将其翻译为CAML时,您最终会得到以下内容:

<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>

(最后我必须为你的<And>条件增加额外的<Geq>。)