zoukankan      html  css  js  c++  java
  • 【SharePoint】SharePoint2013中使用客户端对象模型给用户控件赋初值

    本文要实现的功能:新建一条列表记录,打开新建记录画面时,自动给【申请人】赋值为当前登录用户。

    在SharePoint2010中,可以使用SPServicesSPFindPeoplePicker方法来设定用户选择控件的值。
    其中SPGetCurrentUser用来取得当前登录的用户名。

    $().SPServices.SPFindPeoplePicker({ 
        peoplePickerDisplayName: "申请人", 
        valueToSet: $().SPServices.SPGetCurrentUser(), 
        checkNames: true
    });

    但是SPServicesSPFindPeoplePicker方法在SharePoint2013中没有效果。 

    后来发现了这篇文章SP2013: Setting people picker value in NewForm.aspx
    原文里隐藏删除图标的代码有bug,下面是修改后的代码:

    function SetAndDisablePeoplePicker(fieldName, userAccountName) {
        var controlName = fieldName;
        var peoplePickerDiv = $("[id$='ClientPeoplePicker'][title='" + controlName + "']");
        var peoplePickerEditor = peoplePickerDiv.find("[title='" + controlName + "']");
        var spPeoplePicker = SPClientPeoplePicker.SPClientPeoplePickerDict[peoplePickerDiv[0].id];
    
        peoplePickerEditor.val(userAccountName);
        spPeoplePicker.AddUnresolvedUserFromEditor(true);
    
        //disable the field
        spPeoplePicker.SetEnabledState(false);
        //hide the delete/remove use image from the people picker
        peoplePickerDiv.find('.sp-peoplepicker-delImage').css('display','none');
    }
    
    
    SetAndDisablePeoplePicker("申请人", $().SPServices.SPGetCurrentUser({fieldName:"UserName"}));

    本来想用SPGetCurrentUser方法默认的Name属性值,但在SharePoint2013中会变成 【i:0#.w|domainusername】的样子,直接使用的话无法检索到用户。

    这里直接使用了UserName属性值,另外还可以使用Name属性值中竖线后面部分的值。

    单独执行上面的代码可以成功实现赋值的效果,但是在画面加载后执行时出现如下错误。

    Uncaught ReferenceError: SPClientPeoplePicker is not defined
    或者
    Uncaught TypeError: Cannot read property ‘get_current’ of undefined

    debug发现是代码加载顺序导致的。 虽然JS代码使用了_spBodyOnLoadFunctionNames.push(“funcName”)方法在页面加载完成后执行上面的JS代码,但是由于使用了RegisterSod延迟加载,导致即使页面加载完了,相关的JS文件还没有执行。

    <script type="text/javascript">RegisterSod("clientpeoplepicker.js", "u002f_layoutsu002f15u002fclientpeoplepicker.debug.js?rev=1g1eASPDnQkf5uTwy7wWMAu00253Du00253D");</script>
    <script type="text/javascript">RegisterSod("sp.js", "u002f_layoutsu002f15u002fsp.debug.js?rev=IRu00252FvhMqBTNIUqECkE3HAZwu00253Du00253D");RegisterSodDep("sp.js", "sp.runtime.js");RegisterSodDep("sp.js", "sp.ui.dialog.js");RegisterSodDep("sp.js", "sp.res.resx");</script>

    参照SharePoint JS延迟加载类(SP.SOD)介绍。使用executeOrDelayUntilScriptLoaded方法,待sp.js文件加载后,再执行初期处理。

    ExecuteOrDelayUntilScriptLoaded(init, "sp.js");
    
    function init() {
        SetAndDisablePeoplePicker("申请人", $().SPServices.SPGetCurrentUser({fieldName:"UserName"}));
    }
  • 相关阅读:
    SQL SERVER 2005生成带数据的脚本文件 [work around]
    VB.NET窗体关闭事件
    Code::Blocks The open source, cross platform, free C++ IDE.
    VB Twips And Pixels 缇和像素
    JQuery 鼠标点击其它地方隐藏层
    Asp.net 基于Form的权限方法备忘
    JQuery Highcharts图表控件多样式显示多组数据
    ASP.NET中动态获取数据使用Highcharts图表控件
    使用windows服务和.NET FileSystemWatcher对象来监控磁盘文件目录的改变
    【JQuery插件】Select选择框的华丽变身
  • 原文地址:https://www.cnblogs.com/Ryukaka/p/4645940.html
Copyright © 2011-2022 走看看