CAML 用法SPQuery 写法

1.Geq(>=)
  The Geq element is an arithmetic operator that means "greater than or equal to." It can be used within a Where element in a view definition.
<Query>
  <Where>
    <Or>
      <IsNull>
        <FieldRef Name="Expires" />
      </IsNull>
      <Geq>
        <FieldRef Name="Expires" />
        <Value Type="DateTime">
          <Today />
        </Value>
      </Geq>
    </Or>
   </Where>
   <OrderBy>
   <FieldRef Name="Modified" Ascending="FALSE" />
  </OrderBy>
</Query>
2.Eq(=)
  The Eq element is an arithmetic operator that means "equal to" and is used within the Query element.
<Query>
  <OrderBy>
    <FieldRef Name="Modified" Ascending="FALSE"></FieldRef>
  </OrderBy>
  <Where>
    <Or>
      <Eq>
        <FieldRef Name="Status"></FieldRef>
        <Value Type="Text">Completed</Value>
      </Eq>
      <IsNull>
        <FieldRef Name="Status"></FieldRef>
      </IsNull>
    </Or>
  </Where>
</Query>
3.Gt(>)
The Gt element is an arithmetic operator that means "greater than." This element is used similarly to Eq and Lt.
<Query>
  <Where>
    <Or>
      <IsNull>
        <FieldRef Name="Deadline" />
      </IsNull>
      <Gt>
        <FieldRef Name="Deadline" />
        <Value Type="DateTime">
          <Today />
        </Value>
      </Gt>
    </Or>
  </Where>
  <OrderBy>
    <FieldRef Name="Modified" Ascending="FALSE" />
  </OrderBy>
</Query>
4.Lt(<)
The Lt element is an arithmetic operator that means "less than" and is used in queries in views. This element is used similarly to Eq and Gt.
<Query>
  <Where>
    <Or>
      <IsNull>
        <FieldRef Name="Deadline" />
      </IsNull>
      <Lt>
        <FieldRef Name="Deadline" />
        <Value Type="DateTime">
          <Today />
        </Value>
      </Lt>
    </Or>
  </Where>
  <OrderBy>
    <FieldRef Name="Modified" Ascending="FALSE" />
  </OrderBy>
</Query>
5.Neq(!=)
The Neq element is an arithmetic operator that means "not equal to" and is used in queries.
<Query>
  <OrderBy>
    <FieldRef Name="Modified" Ascending="FALSE"></FieldRef>
  </OrderBy>
  <Where>
    <Or>
      <Neq>
        <FieldRef Name="Status"></FieldRef>
        <Value Type="Text">Completed</Value>
      </Neq>
      <IsNull>
        <FieldRef Name="Status"></FieldRef>
      </IsNull>
     </Or>
   </Where>
</Query>
 

SPQuery 的Where 子句的用法
1、一个条件实例
 

<Where> <Or> <Eq><FieldRef Name='Name'/>
 <Value Type='Text'>Mark</Value></Eq> <Eq><FieldRef
 Name='Name'/><Value Type='Text'>Joe</Value></Eq> </Or>
 </Where>
2、两个条件实例
 

<Where> <Or> <Eq><FieldRef Name='Name'/>
 <Value Type='Text'>Mark</Value></Eq> <Or> <Eq>
 <FieldRef Name='Name'/><Value Type='Text'>Joe</Value></Eq>
 <Eq><FieldRef Name='Name'/><Value Type='Text'>Linda</Value></Eq>
 </Or> </Or> </Where>
 

3、三个条件实例
 

<Where> <Or> <Eq><FieldRef Name='Name'/>
 <Value Type='Text'>Mark</Value></Eq> <Or> <Eq>
 <FieldRef Name='Name'/><Value Type='Text'>Joe</Value></Eq>
 <Eq><FieldRef Name='Name'/><Value Type='Text'>Linda</Value></Eq>
 </Or> </Or> </Where>
下表是CAML查询的一些简单说明:
元素
 说明
 
And
 并且
 
BeginsWith
 以某字符串开始的
 
Contains
 包含某字符串
 
Eq
 等于
 
FieldRef
 一个字段的引用 (在GroupBy 中使用)
 
Geq
 大于等于
 
GroupBy
 分组
 
Gt
 大于
 
IsNotNull
 非空
 
IsNull
 空
 
Leq
 小于等于
 
Lt
 小于
 
Neq
 不等于
 
Now
 当前时间
 
Or
 或
 
OrderBy
 排序
 
Today
 今天的日期
 
TodayIso
 今天的日期(ISO格式)
 
Where
 Where子句
 

简介
协作应用程序标记语言 (CAML) 的 View 元素提供一个在 Microsoft SharePoint? Team Services 的数据库中执行查询和返回值的灵活方法。此元素适应对自定义 SharePoint Team Web 站点的广泛需求,从执行查询以便将数据返回到脚本进行处理,到布置页面部分中列表数据的显示。
要点 您必须具有写页面权限,才能上载页面。您必须以本地 Administrators 组成员的身份登录到服务器计算机,才能写入数据库。
根据您的目的是返回并显示值,还是仅返回值以便在脚本中进行处理,Web 站点的 Default.htm 页或任何列表的 AllItems.htm 页上的列表视图典型方案包含下列子元素。
•Query 如果您只希望在一个列表中返回所有值,则该子元素可以为空。 •ViewBody 可以使用 ViewBody 子元素(带有或不带 ViewHeader 和 ViewFooter 元素)来布置用于显示数据的视图表。•ViewEmpty ViewEmpty 子元素指定当查询未返回任何数据时所显示的内容。它还为执行替代视图提供了有用的制约性,以防查询中不返回任何项目。请参见下面的示例。•ViewFields 当视图不用于显示项目,只用于返回值进行处理时,ViewFields 子元素可以为空。•RowLimit RowLimit 子元素指定要在当前窗口中显示的项目数。•PagedRowset 当 RowLimit 元素包含的值超出时,PagedRowset 子元素将为下一个窗口定义一个视图。 •Toolbar 在 AllItems.htm 页上,Toolbar 子元素定义紧靠列表视图之上的页中显示的按钮和部分行。CAML HTML 元素与 CDATA 标记共同用来在视图中嵌入标记语言或脚本(例如 <HTML><![CDATA[<TABLE><TR><TH>]]></HTML>)。
要点 为了完成下述任务,您必须具有写页面权限才能上载页面。您必须以本地 Administrators 组成员的身份登录到计算机,才能写入数据库。
假设您具有 SharePoint Team Services 数据库的访问权,则可以通过从 Views 表的 View 列复制视图方案来学习和自定义视图。如果有许多视图,您可以通过要修改 ListView 组件的全局统一标识符 (GUID) 来标识相应的数据库记录。在其他情况下(例如在表单中),您可能需要引用 Lists 表(列表的列表)中 ID、Name 或 Title 列值的组合。然后,您可以使用其视图方案替换整个组件,并使用以下 CAML 包围已复制的视图:
<ows:XML>
  <SetList>[u_YourCustomListName[without "u_" for native lists]]</SetList>
  <View>
    .
    .
    .
    [Copied view schema goes here]
    .
    .
    .
  </View>
</ows:XML>
在 Microsoft FrontPage 中,您可以选择一个视图,右键单击此视图,然后单击 Layout Customization 以展开视图方案并进行自定义。
注 应始终保存原始站点页面的副本,以便可以在需要时复原组件。
返回页首
创建基本列表视图
下例布置了用于显示自定义列表 (u_MyCustomList) 的视图表。ViewFields 元素指定要在视图页眉中显示的 Title、Stock 和 Price 字段名称以及视图正文中显示的这些字段的值。
<ows:XML>
  <SetList>[u_MyCustomList]</SetList>
  <View Name="MyNewView">
 

    <ViewFields>
      <FieldRef Name="Title"/>
      <FieldRef Name="Stock"/>
      <FieldRef Name="Price"/>
    </ViewFields>
ViewHeader 元素包含 Fields 和 Field 元素,这些元素枚举了 ViewFields 元素所指定的字段名称。HTML 元素包含用于显示表格标题的标记语言,这取决于 Web 或子站点的 /_layouts/styles/ows.css 文件中定义的 ms-vh 样式。
    <ViewHeader>
      <HTML><![CDATA[<TABLE><TR class="ms-vh">]]></HTML>
      <Fields>
        <HTML><![CDATA[<TH>]]></HTML>
        <Field/>
        <HTML><![CDATA[</TH>]]></HTML>
      </Fields>
      <HTML><![CDATA[</TR>]]></HTML>
    </ViewHeader>
ViewBody 元素包含为列表中的每个项目枚举字段值的 Fields 和 Field 元素。HTML 元素包含用于在表格单元格中显示这些值的标记语言,这取决于 Web 或子站点的 /_layouts/styles/ows.css 文件中定义的 ms-vb 样式。
    <ViewBody>
      <HTML><![CDATA[<TR class="ms-vb">]]></HTML>
        <Fields>
          <HTML><![CDATA[<TD>]]></HTML>
          <Field/>
          <HTML><![CDATA[</TD>]]></HTML>
        </Fields>
      <HTML><![CDATA[</TR>]]></HTML>
    </ViewBody>
 

    <ViewFooter>
      <HTML><![CDATA[</TABLE>]]></HTML>
    </ViewFooter>
Query 部分查询股票小于 15 或价格大于 20.00 的情况。
    <Query>
      <Where>
        <Or>
          <Lt>
            <FieldRef Name="Stock"/>
            <Value Type="Number">
              15
            </Value>
          </Lt>
          <Gt>
            <FieldRef Name="Price"/>
            <Value Type="Currency">
              20.00
            </Value>
          </Gt>
        </Or>
      </Where>
      <OrderBy>
        <FieldRef Name="Title"/>
      </OrderBy>
    </Query>
  </View>
</ows:XML>
为了返回指定字段的所有值,您可以转而使用空的 Query 元素 ()。
返回页首
在脚本中使用视图
下例说明了如何使用 CAML 视图返回项目 ID 并将它们指定给数组,以便在脚本中进行处理。此视图返回事件日期晚于 1/1/2002 的以逗号分隔的项目 ID 列表。这些项目 ID 被指定给 strIDs 变量,然后逐一显示在消息框中。
<Script language="JavaScript">
function getIDs()
{
   var arrIDs = new Array();
   var strIDs="<ows:XML>
             <SetList>Events</SetList>
             <View>
               <ViewFields>
                 <FieldRef Name="ID"/>
               </ViewFields>
               <ViewBody>
                 <Fields>
                   <Field/>
                   <HTML><![CDATA[,]]></HTML>
                 </Fields>
               </ViewBody>
               <Query>
                 <Where>
                     <Gt>
                       <FieldRef Name="EventDate"/>
                       <Value Type="DateTime">2002-01-01T00:00:00Z</Value>
                     </Gt>
                 </Where>
               </Query>
             </View>
           </ows:XML>";
 

   arrIDs=strIDs.split(/,/);
   alert(arrIDs);
}
</Script>
注 如果您要在 CAML 视图中动态插入用户输入的数据,而不只是像上例中那样对值进行硬编码,则需要从解释器掩盖 CAML,以防止立即处理该视图。有关详细信息,请参阅使用 XMLHTTP 在 SharePoint Team Services 中发布命令。
返回页首
添加个性化消息
为了获得当前用户的名称并显示个性化消息,以下代码示例针对 UserInfo 表执行查询,此表是数据库中的全局列表,该数据库包含虚拟服务器上所有小组 Web 站点的所有用户信息。
<ows:XML>
  <SetList>UserInfo</SetList>
  <View>
    <ViewFields>
      <FieldRef Name="Title"/>
    </ViewFields>
    <Query>
      <Where>
        <Eq>
          <FieldRef Name="ID"/>
          <Value Type="Integer"><UserID/></Value>
        </Eq>
      </Where>
    </Query>
    <ViewBody>
      <HTML>
        <![CDATA[<TABLE><TR><TD class="Greeting">Hello ]]>
      </HTML>
      <Field Name="Title"/>
      <HTML>
        <![CDATA[, welcome to the team Web site.</TD></TR></TABLE>]]>
      </HTML>
    </ViewBody>
  </View>
</ows:XML>
此示例查询当前用户的 ID 与 UserInfo 表中的 ID 相匹配的情况,并按 ViewFields 元素的指定显示对应的 Title 字段值(在此例中为用户名)。CDATA 部分布置用于对齐页面上个性化问候的简单表。请注意,为了设置格式,可将自定义样式定义添加到 ows.css 并在 HTML 及其元素中实现。
返回页首
列出服务器上的所有子站点
下例显示如何通过创建数据库中 Projects 表的视图来创建返回服务器上所有子站点链接列表的视图:
<ows:XML>
  <SetList>Projects</SetList>
  <View Name="ProjectsView">
    <ViewFields>
      <FieldRef Name="Title"/>
      <FieldRef Name="HomePageID" Explicit="TRUE"/>
    </ViewFields>
    <ViewHeader>
    <HTML><![CDATA[<TABLE>]]></HTML>
    </ViewHeader>
    <ViewBody>
     <HTML><![CDATA[<TR><TD>]]></HTML>
       <HTML><![CDATA[<a target="_blank" href="]]></HTML>
       <LookupColumn Name="HomePageID"/>
       <HTML><![CDATA[">]]></HTML>
       <Field Name="Title"/>
       <HTML><![CDATA[</a></TD></TR>]]></HTML>
    </ViewBody>
    <ViewFooter>
    <HTML><![CDATA[</TABLE>]]></HTML>
    </ViewFooter>
  </View>
</ows:XML>
HomePageID 字段是 DocMd 表(该表存储服务器上的所有 URL)的查找字段。此处,HTML target 属性设置为 _blank,以便当用户单击子站点链接时,该子站点会显示在新窗口中。
返回页首
预填充输入框
要使用当前用户的名称和电子邮件地址来预填充表单,您可以创建一个返回此用户名的视图,然后将其指定给一个变量。使用 GetEmailFromUser 元素返回当前用户的电子邮件地址。
首先,添加一个 CAML 岛,它将此视图定义给包含该表单的页面(为了适应 MSDN Web 布局的需要,此代码示例已经“被截断”):
<ows:XML>
  <SetList>UserInfo</SetList>
  <View>
    <ViewFields>
      <FieldRef Name="Name"/>
    </ViewFields>
      <Query>
        <Where>
          <Eq>
            <FieldRef Name="ID"/>
            <Value Type="Integer"><UserID/></Value>
          </Eq>
        </Where>
      </Query>
      <ViewBody>
          <SetVar Name="UName" Scope="Request"><Field
Name="Name"/></SetVar>
      </ViewBody>
    </View>
</ows:XML>
请注意,此视图只用于返回当前用户的名称,此名称已指定给自定义 CAML 变量 UName。然后,您可以添加两个输入框,将适当的 CAML 指定给它们的 value 属性:
<input type="text" name="username" size="38" value="<ows:GetVar Name="UName"/>">
 

<input type="text" name="user_email" size="38" value="<ows:GetEmailFromUser HTMLEncode="TRUE"><UserID/></ows:GetEmailFromUser>">
返回页首
在视图中嵌入视图
视图可以嵌入到其他视图中,以便从 SharePoint Team Services 数据库中的多个表返回值。在下例中,将两个视图嵌入到主页上的另一个框架视图中,以便根据当前用户是否有过期任务来显示不同的消息。
此示例包含 Tasks 列表的两个视图,一个用于在当前用户有过期任务的情况下返回具有特定格式的消息,另一个用于返回过期项目的视图。
<ows:XML>
  <SetList>Tasks</SetList>
  <View>
    <ViewFields>
      <FieldRef Name="AssignedTo"/>
    </ViewFields>
    <Query>
      <Where>
        <And>
          <Eq>
            <FieldRef Name="AssignedTo"/>
            <Value Type="Integer">
              <UserID/>
            </Value>
          </Eq>
          <And>
            <Lt>
              <FieldRef Name="DueDate"/>
              <Value Type="DateTime">
                <Today/>
              </Value>
            </Lt>
            <Neq>
              <FieldRef Name="Status"/>
              <Value Type="Choice">Completed</Value>
            </Neq>
          </And>
        </And>
      </Where>
    </Query>
    <ViewBody>
      <HTML><![CDATA[<TABLE><TR><TD class="Warning">Hello ]]></HTML>
      <LookupColumn Name="AssignedTo" HTMLEncode="TRUE"/>
      <HTML><![CDATA[, these items are now past due!</TD></TR>
      <TR><TD>
        <A href="mailto:Manager_Name@example.com" class="ResolveNow">
          Please contact your manager</A>
      </TD></TR>
      <TR><TD>]]></HTML>
此框架视图可针对当前用户的 ID 等于 AssignedTo 字段值的情况以及截止日期在今天之前且状态不等于 Completed 的情况,查询数据库中的 Tasks 表。LookupColumn 元素用于将用户名称作为对用户的个性化警告的一部分返回。
在代码中的此处,可以插入 Tasks 列表的其他视图,以返回并显示过期项目。
     <SetList>Tasks</SetList>
      <View>
        <ViewFields>
          <FieldRef Name="LinkTitle"/>
          <FieldRef Name="Priority"/>
          <FieldRef Name="Body"/>
          <FieldRef Name="DueDate"/>
        </ViewFields>
        <Query>
          <Where>
            <And>
              <And>
                <Lt>
                  <FieldRef Name="DueDate"/>
                  <Value Type="DateTime">
                    <Today/>
                  </Value>
                </Lt>
                <Neq>
                  <FieldRef Name="Status"/>
                  <Value Type="Choice">Completed</Value>
                </Neq>
              </And>
              <Eq>
                <FieldRef Name="AssignedTo"/>
                <Value Type="Integer">
                  <UserID/>
                </Value>
              </Eq>
            </And>
          </Where>
        </Query>
        <ViewHeader>
          <HTML><![CDATA[<TABLE><TR>]]></HTML>
          <Fields>
            <HTML><![CDATA[<TH class="ms-vh">]]></HTML>
            <Field/>
            <HTML><![CDATA[</TH>]]></HTML>
          </Fields>
          <HTML><![CDATA[</TR>]]></HTML>
        </ViewHeader>
        <ViewBody>
          <HTML><![CDATA[<TR>]]></HTML>
          <Fields>
            <HTML><![CDATA[<TD class="ms-vb">]]></HTML>
            <Field/>
            <HTML><![CDATA[</TD>]]></HTML>
          </Fields>
          <HTML><![CDATA[</TR>]]></HTML>
        </ViewBody>
        <ViewFooter>
          <HTML><![CDATA[</TABLE>]]></HTML>
        </ViewFooter>
      </View>
      <HTML><![CDATA[</TD></TR></TABLE>]]></HTML>
    </ViewBody>
这在当前用户具有过期任务的情况下,完成了外部框架视图的 ViewBody 部分。ViewEmpty 部分可用于包含另一个视图,此视图可将另一则消息传送给没有过期任务的当前用户。
<ViewEmpty>
      <SetList>UserInfo</SetList>
      <View>
        <ViewFields>
          <FieldRef Name="Title"/>
        </ViewFields>
        <Query>
          <Where>
            <Eq>
              <FieldRef Name="ID"/>
              <Value Type="Integer"><UserID/></Value>
            </Eq>
          </Where>
        </Query>
        <ViewBody>
          <HTML>
            <![CDATA[<TABLE><TR><TD class="NoOverdues">Hello ]]>
          </HTML>
          <Field Name="Title"/>
          <HTML><![CDATA[, you have no past due items. Great work!</TD></TR></TABLE>]]></HTML>
        </ViewBody>
      </View>
    </ViewEmpty>
  </View>
</ows:XML>
通过将定义添加到 /_layouts/styles/ows.css(如下所示),可以为上述属性定义样式:
.Warning  {
 font-size: 14pt;
 color: red;
 font-weight: bold;
 font-family: verdana;
 }
.ResolveNow  {
 font-size: 12pt;
 color: red;
 text-decoration: underline;
 font-family: verdana;
 padding: 12px;
 font-weight: bold;
 }
.NoOverdues  {
 font-size: 12pt;
 color: green;
 font-family: verdana;
 padding: 12px;
 font-weight: bold;
 }
下例在框架视图的 ViewEmpty 部分中嵌入一个视图,以便将另一消息显示给访问主页的当前用户(这取决于他们是否接受了名为 TeamSurvey 的调查)。如果他们已经接受了调查,则 ViewBody 部分将显示个性化的欢迎消息。如果未接受调查,则 ViewEmpty 部分将显示一则警告,并提供此调查的链接(为了适应 MSDN Web 布局的需要,此代码示例已经“被截断”):
<ows:XML>
  <SetList>u_TeamSurvey</SetList>
  <View>
    <ViewFields>
      <FieldRef Name="Author"/>
    </ViewFields>
    <Query>
      <Where>
        <Eq>
          <FieldRef Name="Author"/>
          <Value Type="Integer"><UserID/></Value>
        </Eq>
      </Where>
    </Query>
    <ViewBody>
      <HTML><![CDATA[<TABLE><TR><TD class="DidSurvey">Hello ]]></HTML>
      <LookupColumn Name="Author" HTMLEncode="TRUE"/>
      <HTML><![CDATA[, thanks for taking the
survey!</TD></TR></TABLE>]]></HTML>
    </ViewBody>
    <ViewEmpty>
      <SetList>UserInfo</SetList>
        <View>
          <ViewFields>
            <FieldRef Name="Title"/>
          </ViewFields>
          <Query>
            <Where>
              <Eq>
                <FieldRef Name="ID"/>
                <Value Type="Integer"><UserID/></Value>
              </Eq>
            </Where>
          </Query>
          <ViewBody>
            <HTML>
              <![CDATA[<TABLE><TR><TD class="Warning">Hello ]]>
            </HTML>
            <Field Name="Title"/>
           <HTML>
             <![CDATA[, you have not yet taken the survey!
               </TD></TR><TR><TD class="TakeNow">
               <A href="http://[server_name]/[subweb_name]/Lists/
                 TeamSurvey/overview.htm">
                 Please take the survey immediately!</A>
               </TD></TR></TABLE>]]></HTML>
          </ViewBody>
        </View>
    </ViewEmpty>
  </View>
</ows:XML>
您还可以将适当的样式定义添加到 ows.css 中。
.TakeNow  {
 font-size: 12pt;
 color: red;
 text-decoration: underline;
 font-family: verdana;
 padding: 12px;
 font-weight: bold;
 }
.DidSurvey  {
 font-size: 12pt;
 color: green;
 font-family: verdana;
 padding: 12px;
 font-weight: bold;
 }
可以采取的更极端方法是让 ViewBody 部分作为空元素,并只使用 ViewEmpty 部分将用户重定向到此调查,而不让他们看到主页,如下所示:
<ows:XML>
  <SetList>u_TeamSurvey</SetList>
    <View>
      <ViewFields/>
      <Query>
        <Where>
          <Eq>
            <FieldRef Name="Author"/>
            <Value Type="Integer"><UserID/></Value>
          </Eq>
        </Where>
      </Query>
      <ViewBody/>
      <ViewEmpty>
        <SetList>UserInfo</SetList>
          <View>
            <ViewFields/>
            <Query>
              <Where>
                <Eq>
                  <FieldRef Name="ID"/>
                  <Value Type="Integer"><UserID/></Value>
                </Eq>
              </Where>
            </Query>
          <ViewBody>
            <HTML><![CDATA[<Script>window.parent.location = 
              "http://[server_name]/[subweb_name]
              /Lists/TeamSurvey/overview.htm";</Script>]]></HTML>
          </ViewBody>
          </View>
      </ViewEmpty>
    </View>
</ows:XML>
此处,ViewBody 部分只包含将调查的 URL 指定到 window.parent.location 的脚本块。
返回页首
创建缩略图
您可以通过在 CAML 中嵌入 HTML 来创建包含图像的文档库的缩略图。下例假设存在一个名为 Image Gallery 的库,除了内置的 FileRef 和 Title 字段外,它还包含一个 Artist 字段。
<ows:xml>
  <SetList>u_ImageGallery</SetList>
  <HTML><![CDATA[<TABLE>]]></HTML>
  <View Name="Image Gallery">
    <ViewFields>
      <FieldRef Name="FileRef"/>
      <FieldRef Name="Title"/>
      <FieldRef Name="Artist"/>
    </ViewFields>
    <ViewBody>
      <HTML><![CDATA[<tr><td>]]></HTML>
      <HTML><![CDATA[<a href="]]></HTML>
      <HttpHost URLEncodeAsURL="TRUE"/>
      <LookupColumn Name="FileRef"/>
      <HTML><![CDATA["><img src="]]></HTML>
      <HttpHost URLEncodeAsURL="TRUE"/>
      <LookupColumn Name="FileRef"/>
      <HTML><![CDATA[" width=50 height=50></a></td><td>]]></HTML>
      <Field Name="Title"/>
      <HTML><![CDATA[</td><td>]]></HTML>
      <Field Name="Artist"/>
      <HTML><![CDATA[</td></tr>]]></HTML>
    </ViewBody>
  </View>
  <HTML><![CDATA[</TABLE>]]></HTML>
</ows:xml>
为图像文件的链接提供 URL 的 href 属性值是使用 CAML HttpHost 和 LookupColumn 元素构造的。LookupColumn 元素用于为列表的 FileRef 字段(即 DocMd 表中包含的图像文件 URL,它存储了服务器上所有站点的所有文档 URL)返回查找值。此视图中还显示了 Title 字段和 Artist 字段。
同一视图还可以与矢量标记语言 (VML) 集成来创建缩略图。您可以使用 CDATA 部分来构造 VML rect 和 imagedata 元素,以便两者均可以将图像显示为缩略图并提供图像文件的链接。
<ows:XML>
  <SetList Scope="Request">u_ArtDocs</SetList>
  <View Name="ThumbNailView">   
    <ViewFields>
      <FieldRef Name="FileRef"/>
      <FieldRef Name="Title"/>
      <FieldRef Name="Artist"/>
    </ViewFields>
    <ViewHeader>
      <HTML><![CDATA[<TABLE><TR><TD>]]></HTML>
    </ViewHeader>
    <ViewBody>
      <HTML><![CDATA[<TABLE  cellpadding=20><TR><TD>]]></HTML>
      <HTML><![CDATA[<v:rect href="]]></HTML>
      <HttpHost URLEncodeAsURL="TRUE"/>
      <LookupColumn Name="FileRef"/>
      <HTML><![CDATA[" style="HEIGHT: 50px; LEFT: 10px;
         POSITION:relative; TOP:10px; WIDTH: 50px">
         <v:imagedata src="]]></HTML>
      <HttpHost URLEncodeAsURL="TRUE"/>
      <LookupColumn Name="FileRef"/>
      <HTML><![CDATA["/></v:rect>]]></HTML>
      <HTML><![CDATA[</TD><TD class=ms-vb><BR>]]></HTML>
      <Field Name="Title"/>
      <HTML><![CDATA[<BR>]]></HTML>
      <Field Name="Artist"/>
      <HTML><![CDATA[</TD></TR></TABLE>]]></HTML>
    </ViewBody>
    <ViewFooter>
      <HTML><![CDATA[</TD></TR></TABLE>]]></HTML>
    </ViewFooter>
    <Query/>
  </View>
</ows:XML>
rect 元素的 href 值(它为图像文件的链接提供 URL)是使用 CAML HttpHost 和 LookupColumn 元素构造的。
页面中需要包括下面的处理说明,以便 VML 正常工作。
在写SharePoint查询XML字符串的时候要注意的一个问题
偶然在SharePointBlogs组里面看到的。

来源:MdP"s MOSS Blog

<And>和<Or>标签里面是不能同时套3个或更多比较标签的。

举例:

这么写是对的:

<And>
 <Eq><FieldRef Name=”Title”><Value Type=”Text”>Value</Value></Eq>
 <Eq><FieldRef Name=”ContentType”><Value Type=”Text”>Product</Value></Eq>
</And>

<Or>
 <Eq><FieldRef Name=”Title”><Value Type=”Text”>Value</Value></Eq>
 <Eq><FieldRef Name=”ContentType”><Value Type=”Text”>Product</Value></Eq>
</Or>

但这么写是错的:

<And>
 <Eq><FieldRef Name=”Title”><Value Type=”Text”>Value</Value></Eq>
 <Eq><FieldRef Name=”ContentType”><Value Type=”Text”>Product</Value></Eq>
 <Eq><FieldRef Name=”Field1”><Value Type=”Text”>Value</Value></Eq>
</And>

<Or>
 <Eq><FieldRef Name=”Title”><Value Type=”Text”>Value</Value></Eq>
 <Eq><FieldRef Name=”ContentType”><Value Type=”Text”>Product</Value></Eq>
 <Eq><FieldRef Name=”Field1”><Value Type=”Text”>Value</Value></Eq>
</Or>

那如果需要同时And多个怎么办?

这样:

<And>
 <And>
  <Eq><FieldRef Name=”Title”><Value Type=”Text”>Value</Value></Eq>
  <Eq><FieldRef Name=”ContentType”><Value Type=”Text”>Product</Value></Eq>
 </And>
 <Eq><FieldRef Name=”Field1”><Value Type=”Text”>Value</Value></Eq>
</And>

<Or>
 <Or>
  <Eq><FieldRef Name=”Title”><Value Type=”Text”>Value</Value></Eq>
  <Eq><FieldRef Name=”ContentType”><Value Type=”Text”>Product</Value></Eq>
 </Or>
 <Eq><FieldRef Name=”Field1”><Value Type=”Text”>Value</Value></Eq>
</Or>

按上面的思路,我思考了下,如果在一个页面中,有多种情况存在呢,可以是1个,也可以是两个,三个,甚至更多,那么不是要判断很多么?于是经过两个多小时的尝试,终于写了一个较简便的方法,我将在下一篇博文中进行整理说明,有需要的可以关注下......(*^__^*)

另外,Web部件管理器和事件处理程序管理器的英文版发布了:

http://www.colladec.com/en/default.aspx

原文地址:https://www.cnblogs.com/KingStar/p/1911891.html