自定義SharePoint 2013 元數據選擇控件

元數據在Sharepoint中是一個很經常使用的功能,他提供一個方法來管理企業中經常使用的關鍵詞,能夠更加統一的使用和更新。默認狀況下,綁定在列表或庫中的元數據字段能夠設置是否容許爲多個值。可是沒法控制在彈出選擇元數據窗口上的術語集是否爲多選值。因此想了個辦法來解決 javascript

 

  

  這裏是重寫系統腳本_layouts/15/scriptforwebtaggingui.js 第312行,這個函數是用來設置Dialog到top window裏面。咱們到裏面加一個函數initCustomPickerDialogjava

  

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行,node

Microsoft.SharePoint.Taxonomy.WebTaggingDialog.addToFieldControl

這個函數是選擇術語到框裏面的事件。在這個函數中加入咱們自定義的代碼,就能夠控制是否容許選擇與否此術語。web

 

上面的代碼是控制彈出窗口裏面的事件,可是若是直接在輸入框裏面輸入呢?能夠用下面的腳原本處理函數

//設置值,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,就能夠獲取到選擇的值。或者咱們直接在頁面上重寫系統函數。ui

/_layouts/15/scriptforwebtaggingui.js 2893行:get_suggestValue 
Microsoft.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;
}

 

 

相關文章
相關標籤/搜索