现在的位置: 首页 > 综合 > 正文

MOSS CAML(6)嵌套视图、缩略图及XML

2017年07月30日 ⁄ 综合 ⁄ 共 5206字 ⁄ 字号 评论关闭

下例在框架视图的 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> 

抱歉!评论已关闭.