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时经常要做的,一般我们采用以下的手段来实现:
-
利用SharePoint Designer将列表webpart转换成数据视图,然后修改xslt。
-
自己开发字段类型。
方法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服务器上使用。