2

以下 CAML 查询对我不起作用.. 我对 sharepoint 平台了解不多。我正在使用 SP 2007 并尝试将 IN 运算符用于查找字段。

"<Where>"
                                + "<And>"
                                + "<And>"
                                + "<In>"
                                + "<FieldRef Name='Role'/>"
                                + "<Values>"
                                + "<Value Type = 'Text'>A</Value>"
                                + "<Value Type = 'Text'>B</Value>"
                                + "</Values>"
                                + "</In>"
                                + "<Leq>"
                                + "<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>"
                                + "</Leq>"
                                + "</And>"
                                + "<Includes>"
                                + "<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>"
                                + "</Includes>"
                                + "</And>"
                                + "</Where>";

上述查询不返回任何内容,但我的列表中有上述组合的值。

如果我稍微修改查询,如下所示,不使用 IN,那么它工作正常。

"<Where>"
                                + "<And>"
                                + "<And>"
                                + "<Eq>"
                                + "<FieldRef Name='Role'/>"
                                //+ "<Values>"
                                + "<Value Type = 'Text'>A</Value>"
                                //+ "<Value Type = 'Text'>B</Value>"
                                //+ "</Values>"
                                + "</Eq>"
                                + "<Leq>"
                                + "<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>"
                                + "</Leq>"
                                + "</And>"
                                + "<Includes>"
                                + "<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>"
                                + "</Includes>"
                                + "</And>"
                                + "</Where>";

(请不要建议我使用 CAML Query builder 因为我无法在我的 DEV 盒子上安装任何东西。而且我还没有在我的本地安装 SP WSS :))

4

3 回答 3

6

CAML 的 IN 运算符是在 Sharepoint 2010 中引入的。您不能在 Sharepoint 2007 中使用它。要获得相同的结果,您必须将其编写为 OR。

<Or>
 <Eq>
  <FieldRef Name='Role' />
  <Value Type='Text'>A</Value>
 </Eq>
 <Eq>
  <FieldRef Name='Role' />
  <Value Type='Text'>B</Value>
 </Eq>
</Or>
于 2013-05-22T04:33:08.100 回答
2

如果有人仍在使用 Sharepoint 2007 并且想使用具有多个条件的 IN 运算符,您可以像下面这样实现,这里我使用“OR”运算符而不是“IN”

string lCAMLQuery =                "<Where>"
                                        + "<And>"
                                        + "<And>"
                                            + "<Leq>"
                                                + "<FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>"
                                            + "</Leq>"
                                        + "<Or>"
                                            + "<Eq>"
                                                + "<FieldRef Name='Role' />"
                                                + "<Value Type='Text'>A</Value>"
                                            + "</Eq>"
                                             + "<Eq>"
                                                + "<FieldRef Name='Role' />"
                                                + "<Value Type='Text'>D</Value>"
                                            + "</Eq>"
                                        + "</Or>"
                                        + "</And>"
                                            + "<Includes>"
                                                + "<FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>"
                                            + "</Includes>"
                                        + "</And>"
                                    + "</Where>";
于 2013-05-22T06:56:07.227 回答
1
string lCAMLQuery = @"<Where>
                    <And>
                    <And>
                        <Leq>
                            <FieldRef Name='Enddate'/><Value Type = 'DateTime'>" + SPUtility.CreateISO8601DateTimeFromSystemDateTime(Dt) + " </Value>
                        </Leq>
                    <Or>
                        <Eq>
                            <FieldRef Name='Role' />
                            <Value Type='Text'>A</Value>
                        </Eq>
                        <Eq>
                            <FieldRef Name='Role' />
                            <Value Type='Text'>D</Value>
                        </Eq>
                    </Or>
                    </And>
                        <Includes>
                            <FieldRef Name='Menu'/><Value Type='Text'>Benefits</Value>
                        </Includes>
                    </And>";
于 2013-09-26T14:18:18.670 回答