• [译]使用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>



  • 相关阅读:
    labview 中的一些简写全称
    socket
    putty
    在波形图表中显示多条曲线
    简单的通电延时触发电路
    Linux sed 批量替换多个文件中的字符串
    PhpMyAdmin管理,登录多台远程MySQL服务器
    MySQL客户端工具推荐
    Redis的几个认识误区
    Redis 的 5 个常见使用场景
  • 原文地址:https://www.cnblogs.com/dosboy/p/1094104.html
Copyright © 2020-2023  润新知