Сортировка результатов из SharePoint RestAPI

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

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

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

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

Вот код внешнего интерфейса:

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

<script>
$(document).ready(function() {
GetStaffDirectory('[email protected]');
GetStaffDirectory('[email protected]');
GetStaffDirectory('[email protected]');
GetStaffDirectory('[email protected]');
GetStaffDirectory('[email protected]'); 
});
</script>

<div class = "white-space-2"></div>
<div class = "row">
<div id = "GetStaffDirectory"></div>
</div>

Скорее не элегантно? :-)

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

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.info(requestURL);
$.ajax({
    url: requestURL,
    headers: {
        Accept: 'application/json;odata=verbose'
    },
    method: 'GET',
    //Success Function
    success: function (data) {
        res = data.d.results;
        console.info(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.info(res);
        $("#AjaxLoader0").hide();
        $(".AjaxMessage").html(errorThrown);
    },
    dataType: 'json' //Make me a JSON
});
};

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 746
1

Ответы 1

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

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

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

$orderby=EMAIL desc

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

jdblundell 27.12.2018 13:47

Обратите внимание, что это может решить переменное количество писем в массиве. sharepoint.stackexchange.com/questions/162270/…

jdblundell 27.12.2018 13:59

Другие вопросы по теме