【问题标题】:SharePoint 2013 JSOM User Key From Person Field来自人员字段的 SharePoint 2013 JSOM 用户密钥
【发布时间】:2013-07-17 07:06:36
【问题描述】:

谁能帮助我使用 javascript 从人员列中获取用户信息?到目前为止,我已经能够读取列表项并返回一个 SP.FieldUserValue,我可以从中获取一个数字 ID(不确定这个 ID 是什么)和显示名称。例如

var ManVal  = oListItem.get_item("RecruitingManager").get_lookupValue();
var ManId   = oListItem.get_item("RecruitingManager").get_lookupId();

如何进一步创建 sp 用户对象?

我最终想要实现的是从列表中检索详细信息,然后填充人员编辑器。

【问题讨论】:

    标签: javascript sharepoint sharepoint-2013 csom


    【解决方案1】:

    好的,我知道了。

    这是我的代码,希望对某人有所帮助。我没有包含检索列表项的方法,只是从该函数中获取人员值的行。

    var _lineManager;
    
    var lineManager = oListItem.get_item("RecruitingManager").get_lookupId();
    
    _lineManager = oWebsite.getUserById(lineManager);
    
    getLineManager();
    
    function getLineManager() {
        context.load(_lineManager);
        context.executeQueryAsync(onGetUserNameSuccessLM, onGetUserNameFailLM);
    }
    function onGetUserNameSuccessLM() {
        alert(lineManager.get_title());
    
        var schema = {};
        schema['PrincipalAccountType'] = 'User,DL,SecGroup,SPGroup';
        schema['SearchPrincipalSource'] = 15;
        schema['ResolvePrincipalSource'] = 15;
        schema['AllowMultipleValues'] = false;
        schema['MaximumEntitySuggestions'] = 50;
        schema['Width'] = '280px';
    
        var users = new Array(1);
        var defaultUser = new Object();
        defaultUser.AutoFillDisplayText = lineManager.get_title();
        defaultUser.AutoFillKey = lineManager.get_loginName();
        defaultUser.Description = lineManager.get_email();
        defaultUser.DisplayText = lineManager.get_title();
        defaultUser.EntityType = "User";
        defaultUser.IsResolved = true;
        defaultUser.Key = lineManager.get_loginName();
        defaultUser.Resolved = true;
        users[0] = defaultUser;
    
        SPClientPeoplePicker_InitStandaloneControlWrapper('peoplePickerDivLinMan', users, schema);
    
    }
    
    function onGetUserNameFailLM(sender, args) {
        alert('Failed to get user name. Error:' + args.get_message());
    }
    

    【讨论】:

      【解决方案2】:

      人员字段(实际上称为“人员选择器”)具有特定的 JavaScript 函数,您可能会发现它很有用:GetAllUserInfo()

      MSDN 上有一篇不错的文章: How to: Use the client-side People Picker control in apps for SharePoint

      相关代码为:

      // Get the people picker object from the page.
      var peoplePicker = this.SPClientPeoplePicker.SPClientPeoplePickerDict.peoplePickerDiv_TopSpan;
      
      // Get information about all users.
      var users = peoplePicker.GetAllUserInfo();
      var userInfo = '';
      for (var i = 0; i < users.length; i++) {
          var user = users[i];
          for (var userProperty in user) { 
              userInfo += userProperty + ':  ' + user[userProperty] + '<br>';
          }
      }
      $('#resolvedUsers').html(userInfo);
      
      // Get user keys.
      var keys = peoplePicker.GetAllUserKeys();
      $('#userKeys').html(keys);
      

      所以基本上你必须将你的字段转换为SPClientPeoplePicker,然后可以使用GetAllUserInfo 遍历该字段中的所有用户。

      【讨论】:

      • 谢谢,但我认为您误解了。我正在从列表项中检索人员值,而不是人员选择器。我已经阅读了您列出的文章。
      • 我确实误会了,但是您的代码,尤其是 get_lookupValue() 应该可以工作:stackoverflow.com/questions/8892999/…
      • 我感到困惑的是,查找值返回 SP.FieldUserValue - $1A_1: 11 $2Z_1: "Phillip Hill" proto: Object 我如何得到一个用户对象,所以我可以例如获取该用户的电子邮件地址?然后我可以使用它来设置人员选择器。我要做的就是从列表广告中的人员列中获取用户,并用此人填充人员选择器。我显然遗漏了一些明显的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      相关资源
      最近更新 更多