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

时间:2015-07-20 07:52:23

标签: javascript angularjs sharepoint

标识'为了能够从我的sharepoint列表中获取名称,这些名称会添加一个peoplepicker,并与字段名称' People'一起存储。和“责任人”,他们属于“人或团体”类型。在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;
};

我从这里得到了两个字段,人们在'这是多值字段,而且是一个“负责任”字段。其中只允许一个值。 换句话说,第一个字段中将包含多个名称,另一个字段中只有一个名称。

在我的控制器中我有:

        $.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'。

这适用于单一价值'责任'字段,但不是多重值'人物'我想,我必须遍历“人”中的对象。领域,但我不知道在哪里或如何以有效的方式做到这一点。 简而言之:如何将多个值放入我的peopleList中?

1 个答案:

答案 0 :(得分:1)

由于SharePoint REST服务以以下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
      });
});