• SPCAMLEditor–灵活实用的CAML编辑工具(上)


    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服务器上使用。

  • 相关阅读:
    js将UTC时间转化为当地时区时间 用JS将指定时间转化成用户当地时区的时间
    elementUI里面,用tabs组件导致浏览器卡死的问题
    根据数组对象中的属性值删除对象
    js货币金额正则表达式
    vue elementui input不能输入的问题
    vue+elementui--$message提示框被dialog遮罩层挡住问题解决
    Oracle日期函数
    plsql查询报错:Dynamic Performamnce Tables not accessible
    Oracle rownum和rowid的区别
    Oracle通过序列实现主键自增长
  • 原文地址:https://www.cnblogs.com/jianyi0115/p/1404327.html
Copyright © 2020-2023  润新知