自定义SharePoint 2013 元数据选择控件
元数据在Sharepoint中是一个很常用的功能,他提供一个方法来管理企业中常用的关键词,可以更加统一的使用和更新。默认情况下,绑定在列表或库中的元数据字段可以设置是否允许为多个值。但是无法控制在弹出选择元数据窗口上的术语集是否为多选值。所以想了个办法来解决

这里是重写系统脚本_layouts/15/scriptforwebtaggingui.js 第312行,这个函数是用来设置Dialog到top window里面。我们到里面加一个函数initCustomPickerDialog
Microsoft.SharePoint.Taxonomy.ControlObject.set_termPickerDialog = function Microsoft_SharePoint_Taxonomy_ControlObject$set_termPickerDialog(value) {ULSX8o:;
window.top.termPickerDialog = value;
if(value!=null)
initCustomPickerDialog();
return value;
}
function initCustomPickerDialog(){
if(typeof window.top.termPickerDialog.$0_0.contentWindow.Microsoft == "undefined")
{
setTimeout(initCustomPickerDialog,500);
return;
}
window.top.termPickerDialog.$0_0.contentWindow.Microsoft.SharePoint.Taxonomy.WebTaggingDialog.addToFieldControl
= function Microsoft_SharePoint_Taxonomy_WebTaggingDialog$addToFieldControl ()
{ULSXWv:;
//alert('come');
var cnode = window.top.termPickerDialog.$0_0.contentWindow.Microsoft.SharePoint.Taxonomy.WebTaggingDialog.$1.get_focusNode();
var currentNodeInfo={ name: cnode.$1B_2 , id: cnode._element.id};
var parentNodeInfo= { name: cnode.$1Z_2._element.parentNode.control.$1B_2, id:cnode.$1Z_2._element.parentNode.id}
//alert(JSON.stringify(currentNodeInfo));
//alert(JSON.stringify(parentNodeInfo));
//TODO you job ...
if(currentNodeInfo.name.startsWith("全"))
return false;
window.top.termPickerDialog.$0_0.contentWindow.Microsoft.SharePoint.Taxonomy.WebTaggingDialog.addTermToField(cnode);
}
}
然后注入代码到弹出窗口中。重写_layouts/15/webtaggingdialog.js 188行,
Microsoft.SharePoint.Taxonomy.WebTaggingDialog.addToFieldControl
这个函数是选择术语到框里面的事件。在这个函数中加入我们自定义的代码,就可以控制是否允许选择与否此术语。
上面的代码是控制弹出窗口里面的事件,但是如果直接在输入框里面输入呢?可以用下面的脚本来处理
//设置值,webTaggingId 是元数据框的id
function setTaxonomyControlObjectValue(webTaggingId, termValue) {
var webTaggingCtl = $get(webTaggingId);
var taxCtlObj = new Microsoft.SharePoint.Taxonomy.ControlObject(webTaggingCtl);
taxCtlObj.enableControl(true);
taxCtlObj.setRawText(termValue);
taxCtlObj.retrieveTerms();
} function getTaxonomyControlObjectValue(webTaggingId) {
var webTaggingCtl = $get(webTaggingId);
var taxCtlObj = new Microsoft.SharePoint.Taxonomy.ControlObject(webTaggingCtl);
var termValue = taxCtlObj.getRawText();
return termValue;
}
肯定会觉得webTaggingId不知道从哪来的。使用调试工具,一般结构都是这样的。找到这个id即可

然后我们获取到了这个id,就可以获取到选择的值。或者我们直接在页面上重写系统函数。
/_layouts/15/scriptforwebtaggingui.js 2893行:get_suggestValueMicrosoft.SharePoint.Taxonomy.Suggestion.prototype.get_suggestValue=function(){
var selectedSuggestValue=this.$4_2.suggestValue;
//format : 手机|70517c38-0977-4ba0-942c-999e5df42ab2
//我们在经过业务验证后如果是不允许的值,直接返回
//不允许|00000000-0000-0000-0000-000000000000 就可以显示一段错误信息
// alert(this.$4_2.suggestValue);
return this.$4_2.suggestValue;
}
//这个函数也可以用来处理
Microsoft.SharePoint.Taxonomy.ControlObject.prototype.$23_2 = function ($p0) {
var $v_0 = '';
this.$1i_2(false);
console.log('in');
var customValidation = function(term){ //这个是我自己加的验证函数
debugger;
var termName = term.$5_0;
var termID = term.$7_0; return termName.startsWith("个人");
}
debugger;
if ($p0) {
var $v_1 = false;
var selectedTerms = Microsoft.SharePoint.Taxonomy.Term.getTerms($p0);
for (var i = 0; i < selectedTerms.length; i++) {
var term = selectedTerms[i]; if (i > 0) {
$v_0 += ';' + Microsoft.SharePoint.Taxonomy.ControlObject.$f;
}
if ((term.get_isValid() && (this.getIsMulti() || !i)) && customValidation(term)) {
$v_0 += this.$C_2('valid-text', '') + Microsoft.SharePoint.Taxonomy.ControlObject.$A(selectedTerms[i].$5_0) + this.$J_2();
$v_1 = true;
}
else {//这一块就是处理标记成错误数据的
if (!this.getIsMulti() && i > 0) {
$v_0 += this.$C_2('invalid-text', Microsoft.SharePoint.Taxonomy.ScriptResources.webTaggingUI_Tooltip_multi_in_single);
}
else {
$v_0 += this.$C_2('invalid-text', Microsoft.SharePoint.Taxonomy.ScriptResources.webTaggingUI_Tooltip_invalid);
}
$v_0 += Microsoft.SharePoint.Taxonomy.ControlObject.$A(selectedTerms[i].$5_0) + this.$J_2();
if (selectedTerms[i].get_isUnvalidated()) {
this.$1i_2(true);
}
$v_1 = false;
}
}
if (this.getIsMulti() && $v_1) {
$v_0 += ';' + Microsoft.SharePoint.Taxonomy.ControlObject.$f;
}
}
return $v_0;
}

自定义SharePoint 2013 元数据选择控件的更多相关文章
- Android 自定义支持快速搜索筛选的选择控件(一)
Android 自定义支持快速搜索筛选的选择控件 项目中遇到选择控件选项过多,需要快速查找匹配的情况. 做了简单的Demo,效果图如下: 源码地址:https://github.com/whieenz ...
- Android自定义View(RollWeekView-炫酷的星期日期选择控件)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/53420889 本文出自:[openXu的博客] 目录: 1分析 2定义控件布局 3定义Cus ...
- 【C#】wpf自定义calendar日期选择控件的样式
原文:[C#]wpf自定义calendar日期选择控件的样式 首先上图看下样式 原理 总览 ItemsControl内容的生成 实现 界面的实现 后台ViewModel的实现 首先上图,看下样式 原理 ...
- 在 SharePoint 2013 中选择正确的 API 集
决定使用哪个 API 集的因素 您可以在多个 API 集中选择一个来访问 SharePoint 2013 平台.您使用哪一个 API 集取决于以下因素: 应用程序的类型. 可能的类型包括但不限于以 ...
- SNF开发平台WinForm之三-开发-单表选择控件创建-SNF快速开发平台3.3-Spring.Net.Framework
3.1运行效果: 3.2开发实现: 3.2.1 这个开发与第一个开发操作步骤是一致的,不同之处就是在生成完代码之后,留下如下圈红程序,其它删除. 第一个开发地址:开发-单表表格编辑管理页面 http: ...
- 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)
本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.a ...
- 使用sui实现的选择控件【性别、日期、省市级联】
使用sui mobile做的选择控件,其中sm.js有修改,增加自定义api,详情请看index.html的注释,不多说了,上代码 <!DOCTYPE html> <html> ...
- 通用数据水平层级选择控件v0.70升级版使其支持jQuery v1.9.1
升级原因:作者原来脚本支持的jquery版本太低了,查找了下资料,使得它能支持最新版本的jquery 备注说明:脚本代码源作者跟源文出处很难找,只能在此特感谢他的分享. 更新部分: 1.新版本不再支持 ...
- C# 中带有中国农历的日期选择控件
开源一款自己刚开始接触 C# 时开发的带有农历信息的日期选择控件,记得那时还是在2010年的寒假期间做的这个东西.刚开始接触 C# 时,使用WinForm来开发桌面程序,觉得简直是简单又迅速,由于 C ...
随机推荐
- 十七、EnterpriseFrameWork框架核心类库之Web控制器
回<[开源]EnterpriseFrameWork框架系列文章索引> EFW框架源代码下载:http://pan.baidu.com/s/1qWJjo3U EFW框架中的WebContro ...
- Qt lcdNumber 不能显示完整时间
利用lcdNumber编了一个电子时钟,发现只显示“分”和“秒”,“时”没有显示出来.作为小白一名,谷歌了一下别人的程序才知道,原因是没有设置lcdNumber可以显示的位数,默认应该是显示4位的,所 ...
- spring框架面试相关问题
Spring 框架中核心组件有三个:Core.Context 和 Beans.其中最核心的组件就是Beans, Spring提供的最核心的功能就是Bean Factory. Spring 解决了的最核 ...
- JavaScript面试库
1.将一段字符串转成驼峰命名法. var str = "web-kit-index"; function to(str){ var j = str.split("-&qu ...
- Scene视图辅助线绘制
有时候需要在Scene视图中绘制一些辅助线,方便进行一些编辑的工作,可以通过如下类和函数完成: 绘制辅助线,相关类: Gizmos类:用于在Scene视图中绘制调试信息或辅助线,这些辅助线只有在Sce ...
- c++中继承和java中继承的对比
java中: class Parent{ public void test(int a){ System.out.println("Parent:" + a); System.ou ...
- ruby -- 基础学习(二) 外键配置实现级联删除
该系列学习基于rails4.0 数据表:admins (id, name, address), articles (id, admin_id, title) admin_id 是表articles中的 ...
- ruby -- 问题解决(八)解决Paperclip::NotIdentifiedByImageMagickError
好吧!又见 Paperclip::NotIdentifiedByImageMagickError,之前遇过一次... 最近又遇到一次,解决了之后,忘了写博客,然后再次遇到的时候,有一种被车撞到的节奏. ...
- 【算法题】Multiples of 3 and 5
Multiples of 3 and 5 原题 题意如下: 找出N以内的3和5的倍数的和. 思路 1.刚看到觉得好弱智,直接遍历一遍不就OK了吗?但是第2和第3个测试用例报了TLE,超时. 2.然后想 ...
- 超赞!12套你没见过的社交媒体 & 社交网站图标
如今,社交网络成为我们信息获取和传播的重要途径,很多网站都有把内容分享到社交媒体的功能.社交媒体图标作为向用户传递信息的重要媒介,不管是在网页还是 Web 应用程序中都非常需要.今天这篇文章和大家分享 ...