编写MOSS自定义字段类型的小意外
这段时间手头要做一个KM系统,在发表新知识文章时需要选择一个或多个维度下的知识分类。其实实现方法有很多,例如说再做一个专门用于设置知识分类的页面,让了发表完知识时或者在了表知识前让用户选择;又或者扩展ITEM的Action,弹出一个对话框来选择。但个人觉得这三种实现都似乎是强加上去,就算实现了,也会不太自然,像是个附加品。
为了让知识分类的选择能完全融入MOSS列表中,做一个自定义字段类型来显示一个棵知识分类树供用户选择最恰当不过了,碰巧上周刚好学了自定义字段类型,嗯,看来正好能派上用场。
于是我马上动工“写”(从网上的例子中拷)了几行代码,先把框架和文件建好:
字段定义:
![](/assets/blank.gif)
1
![](/assets/blank.gif)
2
![](/assets/blank.gif)
3
![](/assets/blank.gif)
4
![](/assets/blank.gif)
5
![](/assets/blank.gif)
6
![](/assets/blank.gif)
7
![](/assets/blank.gif)
8
![](/assets/blank.gif)
9
![](/assets/blank.gif)
10
![](/assets/blank.gif)
11
![](/assets/blank.gif)
12
![](/assets/blank.gif)
13
![](/assets/blank.gif)
14
![](/assets/blank.gif)
15
![](/assets/blank.gif)
字段类:
![](/assets/blank.gif)
1
![](/assets/blank.gif)
2
![](/assets/blank.gif)
3
![](/assets/blank.gif)
4
![](/assets/blank.gif)
5
![](/assets/blank.gif)
6
![](/assets/blank.gif)
7
![](/assets/blank.gif)
8
![](/assets/blank.gif)
9
![](/assets/blank.gif)
10
![](/assets/blank.gif)
11
![](/assets/blank.gif)
12
![](/assets/blank.gif)
13
![](/assets/blank.gif)
14
![](/assets/blank.gif)
15
![](/assets/blank.gif)
16
![](/assets/blank.gif)
17
![](/assets/blank.gif)
18
![](/assets/blank.gif)
19
![](/assets/blank.gif)
20
![](/assets/blank.gif)
21
![](/assets/blank.gif)
22
![](/assets/blank.gif)
23
![](/assets/blank.gif)
24
![](/assets/blank.gif)
25
![](/assets/blank.gif)
26
![](/assets/blank.gif)
27
![](/assets/blank.gif)
28
![](/assets/blank.gif)
29
![](/assets/blank.gif)
30
![](/assets/blank.gif)
31
![](/assets/blank.gif)
32
![](/assets/blank.gif)
33
![](/assets/blank.gif)
34
![](/assets/blank.gif)
35
![](/assets/blank.gif)
36
![](/assets/blank.gif)
37
![](/assets/blank.gif)
38
![](/assets/blank.gif)
字段控件类:
![](/assets/blank.gif)
1
![](/assets/blank.gif)
2
![](/assets/blank.gif)
3
![](/assets/blank.gif)
4
![](/assets/blank.gif)
5
![](/assets/blank.gif)
6
![](/assets/blank.gif)
7
![](/assets/blank.gif)
8
![](/assets/blank.gif)
9
![](/assets/blank.gif)
10
![](/assets/blank.gif)
11
![](/assets/blank.gif)
12
![](/assets/blank.gif)
13
![](/assets/blank.gif)
14
![](/assets/blank.gif)
15
![](/assets/blank.gif)
16
![](/assets/blank.gif)
17
![](/assets/blank.gif)
18
![](/assets/blank.gif)
19
![](/assets/blank.gif)
字段值类:
![](/assets/blank.gif)
1
![](/assets/blank.gif)
2
![](/assets/blank.gif)
3
![](/assets/blank.gif)
4
![](/assets/blank.gif)
5
![](/assets/blank.gif)
6
![](/assets/blank.gif)
7
![](/assets/blank.gif)
8
![](/assets/blank.gif)
9
![](/assets/blank.gif)
10
![](/assets/blank.gif)
11
![](/assets/blank.gif)
12
![](/assets/blank.gif)
13
![](/assets/blank.gif)
14
![](/assets/blank.gif)
15
![](/assets/blank.gif)
最后当然是控件的模板文件(用户控件)
![](/assets/blank.gif)
2
![](/assets/blank.gif)
3
![](/assets/blank.gif)
4
![](/assets/blank.gif)
5
![](/assets/blank.gif)
6
![](/assets/blank.gif)
7
![](/assets/blank.gif)
8
![](/assets/blank.gif)
9
![](/assets/blank.gif)
10
![](/assets/blank.gif)
11
![](/assets/blank.gif)
12
![](/assets/blank.gif)
13
![](/assets/blank.gif)
14
![](/assets/blank.gif)
15
![](/assets/blank.gif)
16
![](/assets/blank.gif)
17
![](/assets/blank.gif)
N多文件“写”完了,习惯性地就先部署一下,看看就这么一点代码能不能跑(全部写完再跑的话,挂了都不知挂在哪了!)拷贝xml、ascx、dll,iisreset,OK!在一列表中新建一个栏看看,应该ascx的内容就会显示在我新建的栏中——挂了!结果竟然是什么都没~~NewForm.aspx中只显示了新建栏的名称,但ascx中的内容显没显示出来,问了N高手,又再三翻查了代码,搞了一个下午还是没有任何进展!(大家能看出上,上面的代码就是有问题的代码)
上图红框的就是我新加入的自定义字段
无奈之下只能把SDK翻了又翻,功夫不负有心人啊,竟然给我在查与模板文件相关的章节时翻到这么一段:
![](/assets/blank.gif)
上面意思是说字段控件类中重写的DefaultTemplateName属性的值是模板文件(ascx文件)中的RenderingTemplate控件的ID,马上打开ASCX文件看看,哦~~~,马上茅塞顿开!因为我的代码框架是从另外一个例子中拷过来的,控件的ID没有注意改掉,把模板中的代码
![](/assets/blank.gif)
改成
![](/assets/blank.gif)
与字段控件类中的方法对应起来
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
更新文件并Reset一下IIS后,模板的内容出现了
注意:这里更新了ASCX文件也得IISReset,可能是给MOSS缓存了吧!
这说明了什么呢?首先说明了字段控件类中的DefaultTemplateName返回的必须是RenderingTemplate的ID
并不是那个ascx文件的文件名(我刚开始以为是的),但后来尝试把ascx的文件名改成其它名字,发现是没影响的,只要保持RenderingTemplate的ID与字段控件类的DefaultTemplateName返回的字符串相同就行了。这也解释了为什么改ascx文件都得reset iis 了,因为moss在render模板时并不是去找对应的模板文件,而是老早就把controltemplates下的文件读取出来了,所以再改ascx文件也不会马上有反应,必须iisreset一下!
那我们把多个RenderingTemplate写到一个ascx文件里行不?答案是肯定的。同时,当我们写多个自定义字段时,各个RenderingTemplate的ID不能有相同,否则新建与编辑页面就会抛出“发生意外错误”的信息!
综上所述,我们在“拿来主义”的指导下时,也得认真检查,个人觉得在初学的时候还是不要用Ctrl+C,Ctrl+V的方法了,宁愿慢一点,把代码照着抄一篇也是好的,起码可以检查一遍代码,对读懂代码也有很大的帮助。记得以前老人家总是说“快则慢,慢则快”还是挺有道理的,像我这样浪费了一个下午的时间多不值得啊!以上是纯属个人意见啦!哈哈!
http://www.cnblogs.com/davidluozw/archive/2008/02/22/1056884.html
转载于:https://www.cnblogs.com/Areas/archive/2011/11/21/2257437.html
编写MOSS自定义字段类型的小意外相关推荐
- 自定义字段类型的开发[转]
自定义字段类型的开发--2级联动Combox 在网上找了一些关于自定义字段类型开发的文章.发现在MOSS开发中关于这一部分的文章很少.不过这些也够我们入门了. 1,创建MOSS2007自定义字段类型实 ...
- Sharepoint 自定义字段类型
Moss2007默认有许多常见类型,如:文本,日期,数字,选项- ,有时我们需要根据需求自定义一个类型!在WSS3.0中可以通过C#或者VB来编写扩展字段,所有的自动需要继承内置的Sharepoint ...
- 使用VS2010开发一个简单的自定义字段类型
在SharePoint中创建自定义字段类型,必须完成两个工作:创建继承于SPField的字段类:编写字段的配置文件,声明字段的基本属性.字段的实现类和字段的呈现逻辑等. 首先在SharePoint站点 ...
- sharepoint2010问卷调查(3)-实现问卷的开始和结束时间(采用自定义字段类型)...
接着上面的图片调查,sharepoint自带的问卷调查是没有开始和结束时间的.这个在项目过程不太实用.问卷一般有开始和结束时间的.因此需要自己 动手开发一个自定义字段类型字段.如下图: 开发添加栏目会 ...
- JIRA自定义字段类型
说明 JIRA中提供了许多自定义字段类型,如文本框,选择等.但有时不能完全满足我们的要求,我们需要自定义一些字段类型,下面以自定一个问题选择下拉框为例. 添加配置 先看下 官网的说明,示例中需要在at ...
- 修改mysql 视图字段类型_记一次mysql视图创建时自定义字段类型不同环境不同的原因...
由于老项目使用的是hibernate,当项目启动时会去检查数据库字段类型等,发现一张视图中某个自定义字段在开发环境中类型为text,但是到了生产环境类型却为mediumtext,导致代码在生产上会有问 ...
- peewee创建mysql_python – peewee MySQL,如何创建包装SQL构建的ins的自定义字段类型?...
我想在peewee(通过 MySQL)创建一个自定义UUID字段. 在python中,我使用UUID作为一个六角形字符串,例如: uuid ='110e8400-e29b-11d4-a716-4466 ...
- 自定义列表字段类型(3)
在上一次我们已经编写好了一个带有格式验证功能的Email地址栏,那么如果需要用到这个自定义字段,必须先对其进行注册,通知SharePoint有了一个新的字段类型.其方法就是编写一个xml文件. 先来看 ...
- sqlite bool mysql_MySQL/SQLite-数据库常用字段类型使用
本文分两部分: 第一部分:MySQL 常用数据字段类型介绍 第二部分:SQLite 常用数据字段类型介绍 永远不要在背后批评别人,尤其不能批评你的老板无知.刻薄和无能.(因为这样的心态,会使你走上坎坷 ...
最新文章
- c++ eos智能合约开发_干货|EOS智能合约开发(一)EOS环境搭建和启动节点
- python交互式程序设计导论第二周_沧州学堂云Python 交互式程序设计导论搜题公众号...
- 【全球AI人才排行榜】美国第一,中国仅排名第7
- C和指针之指针数组和指向数组的指针
- 前端学习(2576):选择何种方式的路由和底层原理
- 【牛客161 - A】字符串(尺取法,桶标记法)
- C++基础学习-20120516
- 在Oracle 数据类型中如何使用dump函数
- 云计算和主机托管有哪几点不同?
- 剑指offer二:替换空格
- 2014 找工作总结
- 2021年起重机司机(限桥式起重机)考试题库及起重机司机(限桥式起重机)考试试卷
- php+ioncube',PHP安装ioncube扩展
- win8dns服务器没响应,win8笔记本dns服务器未响应怎么办
- 新安装Win7 Windows Update 错误 代码80072EE2 80072EFE
- 1月5日 负数的十六进制如何表示。
- C# 函数引用传递(址传递)ref、out以及值传递之间的运行效率问题
- js实现淘宝右侧导航栏功能
- 【教程】在Steam Deck上安装系统引导软件rEFInd
- 精品素材:WALK RIDE 单页网站模板下载
热门文章
- body添加代码 js_hexo 博客添加评论和阅读量
- python 为什么没有重载_python是否支持重载
- 猫和老鼠服务器维修有问题,猫和老鼠:游戏中大范围的断网掉线问题 玩家:土豆服务器就这样...
- python split space
- DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网...
- pandas groupby 分组操作
- Cordova:安卓启动页图片变形
- 安装gitlab并汉化
- Ubuntu中使用WPS
- rabbitmq之partitions