SPCAMLEditor–灵活实用的CAML编辑工具

(上)

查看word版本:SPCAMLEditor_灵活实用的CAML编辑工具1.doc

 

CAML简述

CAML全称Collaborative Application Markup Language,翻译成协作应用程序标记语言,是一种基于XML的语言。SharePoint利用CAML来描述各种对象的属性设置,定义视图的显示样式和逻辑等。 SharePoint中处处有CAML的影子,字段定义,列表定义,视图定义,内容类型,站点定义等等都是采用CAML来实现。可以说,CAML将SHAREPOINT中的各种元素(页面,字段,DLL)"胶合"在一起。了解甚至精通CAML,对SHAREPOINT开发人员很是必要。

本文将对CAML进行简要介绍,并介绍一个CAML编辑工具-SPCAMLEditor,利用SPCAMLEditor修改站点对象的CAML定义,是一种"独特"的SharePoint定制手段,可以"快速"的实现一些常见的功能。

笔者对CAML也不能称之为"精通"只能算"初窥其门",开发中用到啥查啥,希望本文能起到抛砖引玉的作用。

SPCAMLEditor介绍

SPCAMLEditor是一个修改SharePoint站点对象属性和CAML定义的工具。它提供了CAML编辑时的智能提示功能,实现了视图CAML编辑的即时预览。利用这个工具,可以方便的修改视图和列表栏的Schema定义,来实现一些特殊的功能。

SharePoint站点对象属性

站点对象属性的查看

一个SharePoint对象,一般具有两类属性:简单属性和Schema属性。简单属性采用简单类型来定义,Schema属性一般是字符串类型的,字符串中的内容实际上是对象的CAML定义。使用SPCAMLEditor可以方便的查看站点对象的所有属性。

使用方法:

利用File->Open菜单,输入站点的URL打开站点。如下图。

 

在导航树任一个节点右击,出现操作菜单,利用其中的Property项可以查看或修改对象的属性,如下图:

 

 

选中某个对象之后,通过SchemaXml标签可以查看内容类型,列表,视图,列表字段的CAML定义。如下图:

 

站点对象属性的修改

通过修改SharePoint对象的属性,我们可以定制站点的外观和行为,SharePoint的网站管理提供了部分对象属性的设置功能,但是还有很多的属性配置是"隐藏"起来的,我们只能通过对象模型写代码来控制。有了SPCAMLEditor,只要是站点对象可以修改的属性,都可以方便的配置。

    我们经常碰到的一个需求是:控制列表表单页面可以显示或编辑的字段。通过SPCAMLEditor可以很方便的实现这一点。

    下面演示如何将任务列表的完成百分比栏从新建页面隐藏掉。

操作步骤:

    Step1:找到要修改的栏。

    利用SPCAMLEditor打开站点,展开要修改的任务列表,展开Fields节点,找到完成百分比栏。如下图:

 

Step2:调出属性修改窗口。

通过鼠标右键菜单的Property菜单项调出属性修改窗口。

 

Step3:修改属性值。

ShowInDisplayForm属性值改为False,单击OK按钮。

 

Step4:最后,可以到站点上查看效果了:

修改之前的新建页面:

 

修改之后的新建页面:

 

定制SharePoint列表栏

对列表栏的小修小改是我们定制SHAREPOINT时经常要做的,一般我们采用以下的手段来实现:

  1. 利用SharePoint Designer将列表webpart转换成数据视图,然后修改xslt。
  2. 自己开发字段类型。

    方法1做起来较简单,但是列表转换成数据视图之后就丧失了一些功能,比如动态修改视图字段。

    方法2是最灵活的,但是缺点就是麻烦,开发一个字段类型要编写xml,写一个继承与SPField的类,再写一个继承与BaseFieldControls的类,然后部署到GAC中。当然,如果我们做的这些工作是为了实现一个通用的功能,那也是值得的。但是如果只是针对"特殊"的需求,做这个就"太浪费代码了"。

    那么有什么更好的方法吗?即简单,又能跟系统机制完美结合?

    答案就是SPCAMLEditor。

    利用SPCAMLEditor,可以直接修改字段的Schema,或者创建出具有新Schema的字段。

     

    下面举一个实际的例子。    

 

功能描述:在列表页面添加一个链接栏,单击这个链接可以转到某个页面(/_layouts/page1.aspx),并把当前列表项的ID作为参数传递(page1.aspx?ID=1)。

 

操作步骤:

Step1: 基于已有的字段创建一个新的字段。

利用SPCAMLEditor打开站点,找到要修改的列表,展开Fields节点。如下图:

 

一般我们以系统的"编辑"字段作为模板,复制出一个新的字段。

找到"编辑"字段,通过右键菜单的Copy创建一个新的字段。

 

注意:创建新字段的时候有时会出错,不过没关系,若出错,通过工具栏上的Reflash按钮刷新一下界面,然后找到我们新建的字段:

选中这个字段,然后单击SchemaXml选项卡中的DisplayPattern节点。

DisplayPattern定义了字段的呈现逻辑。如下图:

我们可以仔细观察一下DisplayPattern的内容,这是标准的CAML语句。

IfHasRights和RightsChoices指定只有用户具有EditListItem权限时字段内容才会呈现。

<URL Cmd="Edit" />输出了当前列表项的编辑页面的URL。注意GoToLink函数,这个JS函数会自动附加当前页面的URL到Edit页面,一般我们链接到表单页面时,页面URL是这样的格式:DispForm.aspx?ID=17&Source=XXX。 这个Source参数就是GoToLink函数附加上的。

下表列出了一些常用的CAML标签,更多标签请参考SDK。    

CAML标签

说明

示例

HTML

输出HTML

<HTML><![CDATA[" ]]></HTML>

Column

输出字段值,

当前字段:<Column/>

指定其他字段名:<Column Name="Title" />

Field

完整输出一个字段,用于联合几个字段的输出。Filed跟Column的区别是:Column只包含值,Field通常不仅包含值还包含字段定义的其他HTML

当前字段:<Field/>

其他字段:<Field Name="Title"/>

Property

输出字段属性,采用Select指定属性名

<Property Select=' DisplayName' URLEncode="TRUE"/>

URL

输出跟当前列表项有关的URL

查看页面:<URL Cmd="Display" />

编辑页面:<URL Cmd="Edit" />

新建页面:<URL Cmd="New" />

Now

输出当前时间

<Now/>

 

Step2: 修改字段名称

通过字段右键菜单中的Property菜单项调出字段属性修改窗体,修改其Title属性为"查看关联数据",单击OK按钮保存。

 

Step3:修改DisplayPattern的内容

我们不需要控制这个链接的权限,所以不需要IfHasRights标签。选中DisplayPattern节点,将其内容改为如下内容:

<DisplayPattern>

<HTML><![CDATA[<a href=" /_layouts/page1.aspx?ID=]]></HTML>

<Column Name="ID" />

<HTML><![CDATA[" onclick="GoToLink(this);return false;" target="_self">]]></HTML>

<HTML>查看关联数据</HTML>

<HTML><![CDATA[</a>]]></HTML>

</DisplayPattern>

 

以上的CAML定义很简单,输出链接的HTMl然后利用Column标签嵌入当前列表项的ID。

 

Step4:预览或保存

SPCAMLEditor对字段Schema的修改默认是没有即时预览功能的,您必须手工保存字段的修改(通过右键菜单的Update菜单项)才能查看效果。有时候我们在开发一个字段的时候需要频繁的测试查看效果,如果每次修改都去点一下那个Update菜单也的确烦人。我们可以配置一下让SPCAMLEditor在预览时自动保存修改,如下图:

 

 

注意:对系统字段的修改可能引发错误,修改的时候一定要谨慎,可以在修改前把字段的Schema保存下来,若出错了覆盖回去即可。对于我们新创建的字读,就可以随便改了。

在这里我们设置允许自动保存字段的修改,切换到Preview选项卡,即可以看到修改结果:

 

Step5:将字段添加到视图

首先通过Property菜单项找到这个字段的InternalName,笔者的环境中是:_x7f16__x8f91__Copy,如下图:

 

然后,单击需要放置这个字段的视图,将_x7f16__x8f91__Copy添加进ViewFields节点。

 

单击视图节点的Update菜单,完成修改。

SPCAMLEditor中的链接是不允许点击的,我们可以利用IE打开站点,查看定制的最终的效果。

 

这是一个简单的例子,在这个例子的基础上,可以扩展出更强的功能,比如利用JS脚本window.open打开一个新窗口。

 

笔者曾写过更复杂的例子。有兴趣的朋友可以参看这两篇文章:

实现视频播放器字段:

http://www.cnblogs.com/jianyi0115/archive/2008/04/28/1175259.html

实现顺序号字段:

http://www.cnblogs.com/jianyi0115/archive/2008/05/28/1209039.html

如何得到SPCAMLEditor

SPCAMLEditor最新版本请到http://www.codeplex.com/spcamleditor下载。 软件第一次运行时会注册一些DLL,出现一个控制台窗口,忽略即可。

注意:SPCAMLEditor通过对象模型访问SharePonit,而对象模型只有在服务器上才可用,应此,这个工具只能在SharePoint服务器上使用。

posted on 2009-03-06 01:37  jianyi  阅读(1979)  评论(3编辑  收藏  举报