Сортировка результатов из SharePoint RestAPI - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь создать несколько полудинамических страниц справочника персонала из списка Sharepoint, используя их REST API.

Я знаю достаточно Javascript, чтобы доставить мне неприятности, поэтому у меня есть ощущение, что мое решениене так элегантно, как могло бы быть и, возможно, не идеально.

Цель состоит в том, чтобы позволить нашим веб-редакторам создавать уникальные страницы для различных отделов, просто добавив короткий сценарий и адрес электронной почты сотрудника.Еще один вариант, о котором я подумал, - это просто добавить поле в список для каждой программы, но оно недостаточно согласованно для всех программ, поэтому, возможно, лучше задать список и отсортировать на каждой странице.

Решение работает просто отлично, но иногда порядок сортировки выходит из строя, я думаю, из-за порядка, в котором скрипт читает список.

Вот код переднего конца:

<script type="text/javascript" 
src="getstaffdirectory2.js"></script>

<script>
$(document).ready(function() {
GetStaffDirectory('email1@dcccd.edu');
GetStaffDirectory('email2@dcccd.edu');
GetStaffDirectory('email3@dcccd.edu');
GetStaffDirectory('email4@dcccd.edu');
GetStaffDirectory('email5@dcccd.edu'); 
});
</script>

<div class="white-space-2"></div>
<div class="row">
<div id="GetStaffDirectory"></div>
</div>
* 1011Скорее не элегантно?: -)

Вот сценарий:

function GetStaffDirectory(UserEmail) {
var res;
var selectStr = '$select=';
var expandStr = '$expand=';
var filterStr = '$filter=(EMAIL eq \''+UserEmail+'\')';

var requestURL = '/_api/web/lists/GetByTitle(\'Staff 
Directory\')/items?'+filterStr; // + '?' + selectStr + '&' + expandStr + '&' 
+ filterStr;
console.log(requestURL);
$.ajax({
    url: requestURL,
    headers: {
        Accept: 'application/json;odata=verbose'
    },
    method: 'GET',
    //Success Function
    success: function (data) {
        res = data.d.results;
        console.log(res);
        // College Name Function
        switch(res[0].LOC){
            case "BHC" : {
                            loc1="Brookhaven College";
                            break;
                         }
            case "CVC" : {
                            loc1="Cedar Valley College";
                            break;
                         }
            case "EFC" : {
                            loc1="Eastfield College";
                            break;
                         }
            case "ECC" : {
                             loc1="El Centro College";
                            break;
                         }
            case "MVC" : {
                            loc1="Mountain View College";
                            break;
                         }
            case "NLC" : {
                            loc1="North Lake College";
                            break;
                         }
            case "RLC" : {
                            loc1="Richland College";
                            break;
                         }
            case "DCO" : {
                            loc1="Lecroy Center/ Dallas Colleges Online";
                            break;
                         }
            case "DSC" : {
                            loc1="District Service Center";
                            break;
                         }
            case "DO" :  {
                            loc1="District Office";
                            break;
                         }
            default : {
                loc1="";
                break;
            }
        }
        if((res[0].Office_x0020_Number == null)||(res[0].Office_x0020_Number 
== undefined)){
             officeNum = "";
         }
        else {
         officeNum = '<li class="contact-office">' + 
res[0].Office_x0020_Number + '</li>\n'
         }
         if((res[0].biolink == null)||(res[0].biolink == undefined)){
              biolinkURL = "";
          }
         else {
          biolinkURL = '<li class="contact-bio"><a href="' + res[0].biolink + '">Online Bio<span class="sr-only"> for ' + res[0].Title + '</span></a></li>\n'
          }
          if((res[0].staff_x002d_photo == null)||(res[0].staff_x002d_photo 
== undefined)){
               staffphoto = '/logo-' + 
res[0].LOC + '-square.svg'
           }
           else {
            staffphoto = res[0].staff_x002d_photo;
          }

        var contactString =
        '<div class="col-sm-4">\n' +
        '<div class="contact-box height-sm-400 ' + res[0].LOC + '">\n' +
        '<img class="contact-photo" src="' + staffphoto + '">\n' +
        '<div class="contact-name">' + res[0].FIRST + ' ' + res[0].Title + 
'</div>\n' +
        '<div class="contact-title">' + res[0].Title1 + '</div>\n' +
        '<div class="contact-dept">' + res[0].department + '</div>\n' +
        '<ul class="contact-info">\n' +
        '<li class="contact-location">' + loc1 + '</li>\n' +
        officeNum +
        '<li class="contact-email"><a href="mailto:' + res[0].EMAIL + '">' + 
res[0].EMAIL + '</a></li>\n' +
        '<li class="contact-phone">' + res[0].PHONE + '</li>\n' +
        biolinkURL +
        '</ul>\n</div>\n</div>\n</div>\n';
        $("#GetStaffDirectory").append(contactString);
    },
    //Error Function
    error: function (jQxhr, errorCode, errorThrown) {
        res = jQxhr;
        console.log(res);
        $("#AjaxLoader0").hide();
        $(".AjaxMessage").html(errorThrown);
    },
    dataType: 'json' //Make me a JSON
});
};

Есть ли более простой способ убедиться, что сценарий извлекает данные в порядке, указанном на странице?Я предполагаю, что есть какой-то метод с массивом, но я не так хорошо знаком с тем, как они работают.

1 Ответ

0 голосов
/ 23 декабря 2018

Лучше сделать все необходимое за один запрос для повышения производительности.Измените GetStaffDirectory () для работы со строковым массивом и выполните фильтрацию следующим образом:

var filterStr = '$filter=((EMAIL eq userEmails[0]) or (EMAIL eq userEmails[1]))'

А также, теперь вы можете добавить логику сортировки;

$orderby=EMAIL desc
...