如何实现无后台代码使用sharepoint本身自定义formfield。

本文介绍如何在SharePoint中使用CustomListForm实现自定义表单逻辑,重点讲解了如何不修改后台代码的情况下,利用JavaScript操作SharePoint内置的FormField控件来实现创建新条目的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值