【SharePoint】SharePoint2013中使用客户端对象模型给用户控件赋初值
本文要实现的功能:新建一条列表记录,打开新建记录画面时,自动给【申请人】赋值为当前登录用户。
在SharePoint2010中,可以使用SPServices的SPFindPeoplePicker方法来设定用户选择控件的值。
其中SPGetCurrentUser用来取得当前登录的用户名。
$().SPServices.SPFindPeoplePicker({
peoplePickerDisplayName: "申请人",
valueToSet: $().SPServices.SPGetCurrentUser(),
checkNames: true
});
但是SPServices的SPFindPeoplePicker方法在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|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文件还没有执行。
<script type="text/javascript">RegisterSod("clientpeoplepicker.js", "\u002f_layouts\u002f15\u002fclientpeoplepicker.debug.js?rev=1g1eASPDnQkf5uTwy7wWMA\u00253D\u00253D");</script>
<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文件加载后,再执行初期处理。
ExecuteOrDelayUntilScriptLoaded(init, "sp.js"); function init() {
SetAndDisablePeoplePicker("申请人", $().SPServices.SPGetCurrentUser({fieldName:"UserName"}));
}
【SharePoint】SharePoint2013中使用客户端对象模型给用户控件赋初值的更多相关文章
- c# 中的UserControl是什么 用户控件和自定义控件有什么区别
用户控件是许多控件的集成 自定义控件是自己写一个控件类,或者继承已有的控件类 复合控件是封装在公共容器内的 Windows 窗体控件的集合.这种控件有时称为“用户控件”.包含的控件称为“构成控件”. ...
- wpf的UserControl用户控件怎么添加到Window窗体中
转载自 http://www.cnblogs.com/shuang121/archive/2013/01/09/2853591.html 我们来新建一个用户控件UserControl1.xaml &l ...
- C# WinForm中添加用户控件
转:https://blog.csdn.net/haelang/article/details/40681003 有的时候我们需要频繁使用一些系统默认工具的组合,那么就可以使用自定义用户控件. 起一个 ...
- ASP.NET MVC 中使用用户控件——转
讲讲怎么在 ASP.NET MVC2中使用用户控件.首先我们新建一个用户控件, 我们命名为SelectGroup.ascx,代码如下 <%@ Control Language="C ...
- 在VisualStudio 工具箱中隐藏用户控件
当我们创建一个用户控件后,VisualStudio会自动将其添加到工具箱中,本来这是一个比较贴心的设计.但是,有的时候,我们并不想将用户控件放到工具箱中. 例如:在WPF中,为了避免一个页面的控件过多 ...
- .Net用户控件
用户控件用户控件是个什么东西?自定义的反复重用的控件集合 好处?1.代码重用2.结构良好3.分工开发4.局部缓存 难点:一.交换信息: 注意信息的交换只在相邻层之间进行交换,如果是嵌套交换信息除Ses ...
- ASP.Net用户控件的使用
一.概述: 与WEB窗体页相同,程序员可以使用任何文本编辑器创作用户控件,或者使用代码隐藏类开发用户控件.此外,与WEB窗体页一样,用户控件可以在第一次请求时被编译并存储在服务器内存中,从而缩短以后请 ...
- ios用户控件
22:48:452015-03-16说道用控件,很地东方都在用.用好了,可以加快开发进度,提高可维护性,程序的稳定,健壮性,用不好,也可以提高经验值啊,下次就好了,算是学习成本吧. 不同语言,不同项目 ...
- ASP.NET MVC加载用户控件后并获取其内控件值或赋值
有网友看了这篇<ASP.NET MVC加载ASCX之后,并为之赋值>http://www.cnblogs.com/insus/p/3643254.html 之后,问及Insus.NET,不 ...
随机推荐
- RUBY 模拟rtsp消息
require 'rtsp/client' require 'log_switch' require 'socket' RTSP::Client.log? # => false RTSP::Cl ...
- 修改Linux内核参数 减少TIME-WAIT
编辑/etc/sysctl.conf文件 增加 net.ipv4.tcp_syncookies = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle ...
- [UOJ#132][BZOJ4200][luogu_P2304][NOI2015]小园丁与老司机
[UOJ#132][BZOJ4200][luogu_P2304][NOI2015]小园丁与老司机 试题描述 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维平面.田野上有 \(n\) 棵许愿 ...
- 【CF1043A】Elections(签到)
题意:给定n个数字,第i个为a[i],求使得sigma k-a[i]>sigma a[i]最小的k n,a[i]<=1e2 思路: #include<cstdio> #incl ...
- POJ1595 Prime Cuts
Prime Cuts Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11961 Accepted: 4553 Descr ...
- BZOJ 3876 支线剧情
支线剧情 [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往都有很多的支线剧情,现在JYY想花费最 ...
- [LeetCode] Rotate List 单项链表旋转
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...
- IPC最快的方式----共享内存(shared memory)
在linux进程间通信的方式中,共享内存是一种最快的IPC方式.因此,共享内存用于实现进程间大量的数据传输,共享内存的话,会在内存中单独开辟一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限 ...
- 《30天学习30种新技术》-Day 15:Meteor —— 从零开始创建一个 Web 应用
目录:https://segmentfault.com/a/1190000000349384 原文: https://segmentfault.com/a/1190000000361440 到目前为止 ...
- LeetCode OJ-- Distinct Subsequences ** 递推
https://oj.leetcode.com/problems/distinct-subsequences/ 对于string S 和 T求,T 是 S的几种子串. 首先想到了递归方法,列出递归公式 ...