[译]使用JavaScript来操纵数据视图DataView新建视图的默认值

觉得这篇文章比较有参考价值,把大意翻译过来,没有忠实于原文。

原文链接:http://blogs.msdn.com/sharepointdesigner/archive/2007/06/13/using-javascript-to-manipulate-a-list-form-field.aspx

为什么要这样做?
很多人抱怨经过SharePoint Designer设计的数据视图不够智能化,其中之一就是:SPD没有办法来设定字段的默认值,当然我们可以通过SharePoint中的WEB界面来设定某个列表中的字段的默认值,但是那样做的话,只能设置固定的值。比如我想设计一个表单,这个表单有一栏叫做“审批人”,系统根据用户在前一个页面的选择来产生的一个URL查询参数。
比如http://www.server.com/page.aspx?RequestName=RequestValue这样来设置“审批人”的值为RequestValue。

机制:
首先,
找到这个字段的HTML控件的ID,然后对这个控件进行设置。SharePoint对视图中的字段的渲染的特点如下表:

字段类型     ID属性中包括的字串 使用的HTML标记
Single Line of Text TextField input
Multiple Lines of Text TextField input
Number TextField input
Currency TextField input
Choice (dropdown) DropDownChoice select
Lookup (single)* Lookup select
Lookup (multiple) SelectCandidate; SelectResult select
Yes/No BooleanField input

此外,最重要的是,字段的Title属性等于字段的“友好名称”,比如第一段提到的,“审批人”系统在渲染这个控件时,这个HTML的控件就TITLE就为“审批人”。
然后,再设置这个控件的值为URL查询参数的值。

特别:对于查阅项如果超过20个,那么Select标记会被系统内的INPUT标记包复,应先使用DropDown这个方法把包复的控件展开。

把文中的
<<QUERYSTRING VARIABLE NAME>> 换你传递的查询字串,
 <<FIELD DISPLAY NAME>>换成你字段的中英文名称就OK了。
然后 通过SPD把下面的代码插入你页面的HTML中去。



<script type="text/javascript">

 

// This javascript sets the default value of a lookup field identified 

// by <<FIELD DISPLAY NAME>> to the value stored in the querysting variable

// identified by <<QUERYSTRING VARIABLE NAME>>

 

 

// Customize this javascript by replacing <<FIELD DISPLAY NAME>> and 

// <<QUERYSTRING VARIABLE NAME>> with appropriate values.

// Then just paste it into NewForm.aspx inside PlaceHolderMain

 

_spBodyOnLoadFunctionNames.push(
"fillDefaultValues");

 

function fillDefaultValues() {

  
var qs = location.search.substring(1, location.search.length);

  
var args = qs.split("&");

  
var vals = new Object();

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

    
var nameVal = args[i].split("=");

    
var temp = unescape(nameVal[1]).split('+');

    nameVal[
1= temp.join(' ');

    vals[nameVal[
0]] = nameVal[1];

  }
  

  setLookupFromFieldName(
"<<FIELD DISPLAY NAME>>", vals["<<QUERYSTRING VARIABLE NAME>>"]);

}


 

function setLookupFromFieldName(fieldName, value) {

  
if (value == undefined) return;

  
var theSelect = getTagFromIdentifierAndTitle("select","Lookup",fieldName);

  

// if theSelect is null, it means that the target list has more than

// 20 items, and the Lookup is being rendered with an input element

  

  
if (theSelect == null

    
var theInput = getTagFromIdentifierAndTitle("input","",fieldName);

    ShowDropdown(theInput.id); 
//this function is provided by SharePoint 

    
var opt=document.getElementById(theInput.opt);

    setSelectedOption(opt, value);

    OptLoseFocus(opt); 
//this function is provided by SharePoint 

  }
 else {

    setSelectedOption(theSelect, value);

  }


}


 

function setSelectedOption(select, value) {

  
var opts = select.options;

  
var l = opts.length;

  
if (select == nullreturn;

  
for (var i=0; i < l; i++{

    
if (opts[i].value == value) {

      select.selectedIndex 
= i;

      
return true;

    }


  }


  
return false;

}


 

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 && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {

      
return tags[i];

    }


  }


  
return null;

}


</script>



posted @ 2008-03-06 22:39  dosboy  阅读(2094)  评论(2编辑  收藏  举报