天天看點

如何實作無背景代碼使用sharepoint本身自定義formfield。

如何使用custom list form 實作無背景代碼,增加自己控制邏輯,使用sharepoint 本身的formfield控件實作建立新item操作。

實作思想和原理:

在現有的sharepoint form field組合控件基礎上,外挂一個殼子,封裝自己的邏輯在殼子内,然後在現有的相同formfield上重制

自己的操作。

比方說:建立時,有一個字段為複選lookup值,這種情況在SPD上是無法在啟應用上增加自己的邏輯,我們就吧他隐藏,然後在外面做一個類似的自己的控件,然後在操作我自己的控件的時候,去調用隐藏的formfield的方法,那麼我們就不需要修改或重寫save 按鈕的時間和方法。

關鍵方法:

//Get form field object。 去生成的頁面找要的tagName,identifier, title在後面的代碼裡去找示例

function getTagFromIdentifierAndTitle(tagName, identifier, title)

{

    var len = identifier.length;

    var tags = document.getElementsByTagName(tagName);

    for (var i = 0; i < tags.length; i++)

    {

        var tempString = tags[i].id;

        if (tags[i].title == title)

        {

         var a = tempString.indexOf(identifier);

         var b = tempString.length - len;

   if (identifier == "" || a == b)

       return tags[i];

        }

    }

    return null;

}

----------------------------------------

//Set Statutory List Box Items

function SetStatutory(selectID) {

var cValue = getSelectedCompany();

if (null != cValue && "" != cValue) {

var selectObj = document.getElementById(selectID);

var theSelect = getTagFromIdentifierAndTitle("select", "SelectCandidate", "Statutory Nodes possible values");

var addButton = theSelect.parentElement.parentElement.nextSibling.nextSibling.childNodes[0];

if (null != selectObj.options && selectObj.options.length != 0)

RemoveSelectedItemFromSelect(selectObj);

if (null != theSelect.options && theSelect.options.length != 0)

theSelect.options[0].selected = false;

var carray = cValue.split("|");

if (null != selectObj)

{

for (var i = 0; i < carray.length; i++)

{

var tmparray = carray[i].split(';#');

var varItem = new Option(tmparray[1], tmparray[0]);

selectObj.options.add(varItem);

if (null != theSelect)

{

for(var j=0;j<theSelect.options.length;j++)

{

var optionitem = theSelect.options[j];

if(optionitem.value == tmparray[0])

{

optionitem.selected = true;

}

}

}

}

addButton.onclick();

}

}

}

//Get form field object

function getTagFromIdentifierAndTitle(tagName, identifier, title)

{

var len = identifier.length;

var tags = document.getElementsByTagName(tagName);

for (var i = 0; i < tags.length; i++)

{

var tempString = tags[i].id;

if (tags[i].title == title)

{

var a = tempString.indexOf(identifier);

var b = tempString.length - len;

if (identifier == "" || a == b)

return tags[i];

}

}

return null;

}

//Remove Selected Items From Select

function RemoveSelectedItemFromSelect(objSelect) {

var length = objSelect.options.length - 1;

for(var i = length; i >= 0; i--)

{

objSelect.options[i] = null;

}

}

//Remove Statutory list box items

function removeStatutory(selectID,removemode)

{

var theSelect = getTagFromIdentifierAndTitle("select", "SelectResult", "Statutory Nodes selected values");

var removeButton = theSelect.parentElement.parentElement.previousSibling.previousSibling.childNodes[3];

if (null != theSelect.options && theSelect.options.length != 0)

theSelect.options[0].selected = false;

var objSelect = document.getElementById(selectID);

var length = objSelect.options.length - 1;

var enableCompanyNodes="";

if(removemode != "All")

{

for(var i = length; i >= 0; i--)

{

if(objSelect[i].selected == true)

{

enableCompanyNodes += objSelect.options[i].text+"|";

for(var j=0;j<theSelect.options.length;j++)

{

var optionitem = theSelect.options[j];

if(optionitem.value == objSelect.options[i].value)

{

theSelect.options[j].selected = true;

}

}

objSelect.options[i] = null;

}

}

}

else

{

for(var i = length; i >= 0; i--)

{

enableCompanyNodes += objSelect.options[i].text+"|";

for(var j=0;j<theSelect.options.length;j++)

{

var optionitem = theSelect.options[j];

if(optionitem.value == objSelect.options[i].value)

{

theSelect.options[j].selected = true;

}

}

objSelect.options[i] = null;

}

}

if(null != enableCompanyNodes&& "" != enableCompanyNodes)

{

removeSelectedCompany(enableCompanyNodes);

}

removeButton.onclick();

}

function Hierarchy(ddlID,selectID) {

var statutory = document.getElementById("statutoryHierarchy");

var executive = document.getElementById("executiveHierarchy");

var hierarchyType = document.getElementById(ddlID);

var selectedText = hierarchyType.options[hierarchyType.selectedIndex].text;

switch (selectedText) {

case "No Hierarchy":

statutory.style.display = "none";

executive.style.display = "none";

break;

case "Statutory":

statutory.style.display = "inline";

executive.style.display = "none";

break;

case "Executive Function":

statutory.style.display = "none";

executive.style.display = "inline";

break;

default:

statutory.style.display = "inline";

executive.style.display = "inline";

break;

}

if(selectedText != "Statutory")

removeStatutory(selectID,"All");

var theSelect = getTagFromIdentifierAndTitle("select", "DropDownChoice", "Hierarchy Type");

for(var i=0;i<theSelect.options.length;i++)

{

var ddlOpt = theSelect.options[i];

if(ddlOpt.value == selectedText)

{

ddlOpt.selected = true;

}

}

}

function removeSelectedCompany(selectedCompanies) {

if(null != selectedCompanies && selectedCompanies != "")

{

var arr = selectedCompanies.split("|");

var arrTmp;

var chk;

for (var i = 0; i < arr.length; i++) {

if(arr[i] != "")

{

chk = document.getElementById("crightTree" + arr[i]);

if (chk)

{

chk.checked = chk.disabled = false;

rightTree.checkNode(arr[i]);

}

}

}

}

}

function clearAllSelectedNodes() {

var root = document.getElementById("crightTreeRoot");

if (root) {

root.checked = false;

rightTree.checkNode("Root");

}

}

後面這段代碼包含2個已經實作的包裝:一個是通過dropdown實作關聯。另外一個是通過樹展現層次結構,然後講結果儲存到listbox中同時操作formfield的js方法實作sharepoint本身自帶儲存對象的封裝。可以參考。

繼續閱讀