我使用下面的代码在人员选择器中添加值。该代码在NewForm.aspx中正常工作。但是当我在EditForm.aspx中编辑人物选择器时,它不会采用新值。它仅保存旧值。
function SetNewPeoplePicker(controlName, Username) {
var ppDiv = jQuery("[id$='ClientPeoplePicker'][title='" + controlName + "']");
var ppEditor = ppDiv.find("[title='" + controlName + "']");
var spPP = SPClientPeoplePicker.SPClientPeoplePickerDict[ppDiv[0].id];
ppEditor.val(Username); // Set the value
spPP.AddUnresolvedUserFromEditor(true); // Resolve the User if (!spPP.HasInputError)
{
var userKeys = spPP.GetAllUserInfo();
var myUser = userKeys[0];
Manager = myUser.AutoFillDisplayText;
}
spPP.SetEnabledState(false);
jQuery('a.sp-peoplepicker-delImage').hide();
}
我读到我们必须将webpart属性更改为" Server Rendering"。但是整个用户界面的变化以及用JS编写的其他领域的代码都失败了。
任何人都可以提供解决方案。
答案 0 :(得分:3)
由于您使用的是SharePoint 2013,我建议您考虑以下方法。在SharePoint 2013中引入了一个所谓的Client Rendering Mode (CSR)
,用于使用HTML和JavaScript呈现列表视图和表单,这是默认呈现模式。
下面的示例演示如何在新&中初始化任务列表中的用户字段(AssignedTo
字段)。 编辑表单:
模板代码:
(function () {
var ctx = {};
ctx.Templates = {};
ctx.Templates.Fields = {
'AssignedTo': {
'NewForm': renderPeoplePickerWithDefaultValue,
'EditForm': renderPeoplePickerWithDefaultValue
}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx);
})();
function renderPeoplePickerWithDefaultValue(ctx) {
//1.set user field value
var loginName = String.format('i:0#.f|membership|{0}',_spPageContextInfo.userLoginName); //set to current user login name
var displayName = $('div#SuiteNavUserName').text(); //set to current user display name
var userEntry = createUserEntity(loginName,displayName);
ctx.CurrentFieldValue = []; //Note: it is assumed the user field is a multi-valued field (!)
ctx.CurrentFieldValue.push(userEntry);
//2.render default People Picker
return SPClientPeoplePickerCSRTemplate(ctx);
}
function createUserEntity(loginName,displayName)
{
return {
Description: loginName,
DisplayText: displayName,
EntityGroupName: "",
EntityType: "",
HierarchyIdentifier: null,
IsResolved: true,
Key: loginName,
MultipleMatches: [],
ProviderDisplayName: "",
ProviderName: ""
};
}
P.S。:在指定示例中
AssignedTo
字段设置为当前 用户,为了指定其他用户,修改loginName
和displayName
参数。P.P.S。该示例已在SharePoint Online中进行了测试
如何应用更改至少有两个选项:
Script Editor
/ Content Editor
在页面上放置JavaScript模板
网页零件以下是使用第二个选项:
应用更改的方法NewForm.aspx
)切换为编辑模式Script Editor
webpart。script
标记代码包装到脚本编辑器中,例如:<script type="text/javascript">{Template JS code goes here}</script>