如何使用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本身自帶儲存對象的封裝。可以參考。