Sharepoint 2013 - EditForm,人们选择新值不保存

时间:2014-12-17 06:48:52

标签: jquery sharepoint sharepoint-2013

我使用下面的代码在人员选择器中添加值。该代码在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编写的其他领域的代码都失败了。

任何人都可以提供解决方案。

1 个答案:

答案 0 :(得分:3)

由于您使用的是SharePoint 2013,我建议您考虑以下方法。在SharePoint 2013中引入了一个所谓的Client Rendering Mode (CSR),用于使用HTML和JavaScript呈现列表视图和表单,这是默认呈现模式

如何使用CSR

初始化新建/编辑表单中的用户字段

下面的示例演示如何在&中初始化任务列表中的用户字段(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中进行了测试

如何应用更改

如何应用更改至少有两个选项:

  1. 使用JSLink property
  2. 通过Script Editor / Content Editor在页面上放置JavaScript模板 网页零件
  3. 以下是使用第二个选项

    应用更改的方法
    1. 将页面(NewForm.aspx)切换为编辑模式
    2. 在列表视图Web部件正下方添加Script Editor webpart。
    3. 将指定的代码用script标记代码包装到脚本编辑器中,例如:<script type="text/javascript">{Template JS code goes here}</script>
    4. 保存页面
    5. 结果

      enter image description here

      参考