SharePoint 在 javascript 中获得多个有价值的人或组

SharePoint get multiple value person or group in javascript

我'希望能够从我的共享点列表中获取姓名,这些姓名通过人员选择器添加,并与字段名称 'People' 和 'Responsible' 一起存储,它们的类型为 'person or group' 在 SharePoint 中。在我的服务文件中我有这个:

    this.getPeople = function () {
    var deferred = $.Deferred();

    var restQueryUrl = appweburl + "/_api/lists/getByTitle('RisikoAnalyse')/items?$select=People/Title,Responsible/Title&$expand=People/Title,Responsible/Title";
    var executor = new SP.RequestExecutor(appweburl);
    executor.executeAsync({
        url: restQueryUrl,
        method: "GET",
        headers: { "Accept": "application/json; odata=verbose" },
        success: function (data, textStatus, xhr) {
            deferred.resolve(JSON.parse(data.body));
        },
        error: function (xhr, textStatus, errorThrown) {
            deferred.reject(JSON.stringify(xhr));
        }
    });
    return deferred;
};

我从中得到两个字段,在 'People' 上是多值字段,一个 'Responsible' 上只允许一个值。 换句话说,第一个字段里面会有几个名字,而另一个里面只有一个名字。

在我的控制器中我有:

        $.when(SPService.getPeople())
        .done(function (jsonObject) {
            angular.forEach(jsonObject.d.results, function (obj) {
                $scope.peopleList.push({
                    people: obj.People.Title,
                    responsible: obj.Responsible.Title

                });
                //$scope is not updating so force with this command
                if (!$scope.$$phase) {
                    $scope.$apply();
                }
            });
        });

这里我遍历 'jsonObject.d.results' 中的所有对象,并将它们推送到我的人员列表 'PeopleList'。

这适用于单值 'Responsible' 字段,但不适用于多值 'People' 字段,我想我必须遍历 'people' 字段内的对象,但我不知道在哪里或如何以有效的方式做到这一点。 简而言之:如何将多个值添加到我的 peopleList 中?

由于 SharePoint REST 服务 returns 多值 用户字段采用以下 JSON 格式:

{
   results: 
      [ { Title: "John Doe"}],
      [ { Title: "Jane Doe"}]
}

您可以提取人物头衔,如下所示:

var peopleTitles = item.People.results.map(function(p){ return p.Title});

控制器的修改示例

angular.forEach(jsonObject.d.results, function (obj) {
     var peopleTitles = typeof obj.People.results != 'undefined' ? obj.People.results.map(function(p){ return p.Title}) : [];
      $scope.peopleList.push({
           people: peopleTitles,
           responsible: obj.Responsible.Title
      });
});