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

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

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

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

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

  1. function SetAndDisablePeoplePicker(fieldName, userAccountName) {
  2. var controlName = fieldName;
  3. var peoplePickerDiv = $("[id$='ClientPeoplePicker'][title='" + controlName + "']");
  4. var peoplePickerEditor = peoplePickerDiv.find("[title='" + controlName + "']");
  5. var spPeoplePicker = SPClientPeoplePicker.SPClientPeoplePickerDict[peoplePickerDiv[0].id];
  6.  
  7. peoplePickerEditor.val(userAccountName);
  8. spPeoplePicker.AddUnresolvedUserFromEditor(true);
  9.  
  10. //disable the field
  11. spPeoplePicker.SetEnabledState(false);
  12. //hide the delete/remove use image from the people picker
  13. peoplePickerDiv.find('.sp-peoplepicker-delImage').css('display','none');
  14. }
  15.  
  16. SetAndDisablePeoplePicker("申请人", $().SPServices.SPGetCurrentUser({fieldName:"UserName"}));

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

这里直接使用了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文件还没有执行。

  1. <script type="text/javascript">RegisterSod("clientpeoplepicker.js", "\u002f_layouts\u002f15\u002fclientpeoplepicker.debug.js?rev=1g1eASPDnQkf5uTwy7wWMA\u00253D\u00253D");</script>
  2. <script type="text/javascript">RegisterSod("sp.js", "\u002f_layouts\u002f15\u002fsp.debug.js?rev=IR\u00252FvhMqBTNIUqECkE3HAZw\u00253D\u00253D");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文件加载后,再执行初期处理。

  1. ExecuteOrDelayUntilScriptLoaded(init, "sp.js");
  2.  
  3. function init() {
  4. SetAndDisablePeoplePicker("申请人", $().SPServices.SPGetCurrentUser({fieldName:"UserName"}));
  5. }

【SharePoint】SharePoint2013中使用客户端对象模型给用户控件赋初值的更多相关文章

  1. c# 中的UserControl是什么 用户控件和自定义控件有什么区别

    用户控件是许多控件的集成 自定义控件是自己写一个控件类,或者继承已有的控件类 复合控件是封装在公共容器内的 Windows 窗体控件的集合.这种控件有时称为“用户控件”.包含的控件称为“构成控件”. ...

  2. wpf的UserControl用户控件怎么添加到Window窗体中

    转载自 http://www.cnblogs.com/shuang121/archive/2013/01/09/2853591.html 我们来新建一个用户控件UserControl1.xaml &l ...

  3. C# WinForm中添加用户控件

    转:https://blog.csdn.net/haelang/article/details/40681003 有的时候我们需要频繁使用一些系统默认工具的组合,那么就可以使用自定义用户控件. 起一个 ...

  4. ASP.NET MVC 中使用用户控件——转

    讲讲怎么在 ASP.NET MVC2中使用用户控件.首先我们新建一个用户控件,   我们命名为SelectGroup.ascx,代码如下 <%@ Control Language="C ...

  5. 在VisualStudio 工具箱中隐藏用户控件

    当我们创建一个用户控件后,VisualStudio会自动将其添加到工具箱中,本来这是一个比较贴心的设计.但是,有的时候,我们并不想将用户控件放到工具箱中. 例如:在WPF中,为了避免一个页面的控件过多 ...

  6. .Net用户控件

    用户控件用户控件是个什么东西?自定义的反复重用的控件集合 好处?1.代码重用2.结构良好3.分工开发4.局部缓存 难点:一.交换信息: 注意信息的交换只在相邻层之间进行交换,如果是嵌套交换信息除Ses ...

  7. ASP.Net用户控件的使用

    一.概述: 与WEB窗体页相同,程序员可以使用任何文本编辑器创作用户控件,或者使用代码隐藏类开发用户控件.此外,与WEB窗体页一样,用户控件可以在第一次请求时被编译并存储在服务器内存中,从而缩短以后请 ...

  8. ios用户控件

    22:48:452015-03-16说道用控件,很地东方都在用.用好了,可以加快开发进度,提高可维护性,程序的稳定,健壮性,用不好,也可以提高经验值啊,下次就好了,算是学习成本吧. 不同语言,不同项目 ...

  9. ASP.NET MVC加载用户控件后并获取其内控件值或赋值

    有网友看了这篇<ASP.NET MVC加载ASCX之后,并为之赋值>http://www.cnblogs.com/insus/p/3643254.html 之后,问及Insus.NET,不 ...

随机推荐

  1. HDU 4178 模拟

    Roll-call in Woop Woop High Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  2. CodeForces Round #521 (Div.3) A. Frog Jumping

    http://codeforces.com/contest/1077/problem/A A frog is currently at the point 00 on a coordinate axi ...

  3. 节点流——FileReaderWriter

    import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io ...

  4. 地精部落(bzoj 1925)

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  5. Linux中的小括号和大括号,${}/$()/()/{}/${var:-string}/${var:=string}/${var:+string}/${var:?string}/${var%pattern}/${var#pattern}/${var%%pattern}/${var##pattern}

    简单记录一下大小括号在Linux中的用处. 1.${var},这是Linux中变量的原形.所以$var,别忘记了你的本来面目. # a= # echo $a # echo ${a} # echo ${ ...

  6. [转]在Storyboard中使用自定义的segue类型

    转自:http://my.oschina.net/u/728866/blog/92709 我们知道segue共有三种类型:push.modal以及custom.如下图:   很明显,这三种类型的作用分 ...

  7. MySQL冗余数据的三种方案

    一,为什么要冗余数据 互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量. 水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非pa ...

  8. activity dialog生命周期

    Android生命周期包括以下几个状态: onCreate(Bundle savedInstanceState):可以进行一些初始化的工作在activity第一次被创建的时候调用.这里是你做所有初始化 ...

  9. ZSTU 4248 KI的目标(dfs)

    KI的目标 Time Limit: 2 Sec  Memory Limit: 128 MB                                                        ...

  10. 某考试T2 frog

    题目背景 无 题目描述 数轴上有 n 只青蛙,分别编号为 1 到 n.青蛙 i 的初始位置的坐标为 xi. 它们准备进行如下形式的移动:每轮包括 m 次跳跃,第 i 次跳跃由青蛙 ai(1 < ...