javascript - SharePoint 2013 JavaScript 从用户(人员)字段获取值(value)

标签 javascript jquery field sharepoint-2013

是否有人成功地从专门针对 SharePoint 2013 的新建或编辑表单中获取用户(个人或组)字段的值?

我已经尝试了通过搜索互联网找到的所有解决方案以及我自己能想到的所有解决方案,所有结果都为空白或未定义。

我得到的最接近的是以下链接,如果有人感兴趣,后者可以设置该值,但我无法成功地调整它来检索该值。

https://jasonscript.wordpress.com/2013/08/07/javascript-and-working-with-the-sharepoint-2013-people-picker/

http://www.sharepointcolumn.com/sp2013-setting-people-picker-value-in-newform-aspx/

我的目标是仅当该值为空时才设置该值,但我无法获取当前值。

在 DOM 中查看,有许多 HTML 元素具有包含值的属性,但使用 JQuery 检索这些属性会导致空白或未定义。我已确认我拥有带有 title 或 id 属性的正确对象。有一个 HTML 元素,其中 title 属性具有值,但在该特定情况下 JQuery 仍然返回空白或未定义。

感谢您提供的任何帮助。

最佳答案

由于您使用的是 SharePoint 2013,我建议您考虑以下方法。在 SharePoint 2013 中引入了所谓的 Client Rendering Mode (CSR)它用于使用 HTML 和 JavaScript 渲染 ListView 和表单,并且是默认渲染模式

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

下面的示例演示了如何在新建编辑表单中初始化用户字段(任务列表中的AssignedTo字段):

Note: it is assumed the user field is a multi-valued field

模板代码:

SP.SOD.executeFunc("clienttemplates.js", "SPClientTemplates", function() {
    SPClientTemplates.TemplateManager.RegisterTemplateOverrides({

      Templates: {
           Fields: {
               "AssignedTo": {
                   EditForm: renderAssignedTo,
                   NewForm: renderAssignedTo
               }
           }
      }

    });

});


function renderAssignedTo(ctx)
{
    var defaultAssigneeTo = {'LoginName': 'i:0#.f|membership|jdoe@contoso.onmicrosoft.com','DisplayName':'John Dow' };


    if(ctx.CurrentFieldValue.length == 0) /* Is user field value empty? */
    { 
        var userEntry = createUserEntity(defaultAssigneeTo.LoginName,defaultAssigneeTo.DisplayName);
        ctx.CurrentFieldValue = [];   //Note: it is assumed the user field is a multi-valued field (!)
        ctx.CurrentFieldValue.push(userEntry);
    }
    return SPClientPeoplePickerCSRTemplate(ctx); 
}

function createUserEntity(loginName,displayName)
{
   return {
      Description: loginName,
      DisplayText: displayName,
      EntityGroupName: "",
      EntityType: "",
      HierarchyIdentifier: null,
      IsResolved: true,
      Key: loginName,
      MultipleMatches: [],
      ProviderDisplayName: "",
      ProviderName: ""
   };
}

如何应用更改

至少有两种应用更改的选项:

  1. 使用 JSLink property
  2. 通过 Script Editor 将 JavaScript 模板放置在页面上/Content Editor 网络部件

以下是如何使用第二个选项应用更改:

  1. 将页面 ( NewForm.aspx ) 切换到编辑模式
  2. 添加Script Editor Web 部件位于 ListView Web 部件正下方。
  3. 通过使用 script 包装指定的代码来放置它将代码标记到脚本编辑器中,例如:<script type="text/javascript">{Template JS code goes here}</script>
  4. 保存页面

结果

图1.新建表单页面

enter image description here

引用文献

关于javascript - SharePoint 2013 JavaScript 从用户(人员)字段获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30219073/

相关文章:

javascript - Nodejs Discord bot - 用表情符号分隔单词的消息

Jquery - 更改其中包含 "="的类

javascript - 根据页面使用 javascript 更改 CSS 样式

javascript - 如何在 jQuery 中查找元素值

javascript - Q promise 何时执行?

sqlite - 如果不存在,请将列添加到 sqlite db - flex/air sqlite?

validation - NetSuite/Suitescript - 为什么此验证字段脚本会进入无限循环?

Java:在字段或构造函数中初始化 ArrayList?

javascript - 推送响应菜单不会自行打开并且不起作用

javascript - AngularJS - 第一次加载页面时如何设置 ng-disabled 指令的真实值?