如何使用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本身自带保存对象的封装。可以参考。