Я пытаюсь создать несколько полудинамических страниц каталога сотрудников из списка 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
});
};
Есть ли более простой способ убедиться, что сценарий извлекает данные в порядке, указанном на странице? Я предполагаю, что есть какой-то метод с массивом, но я не так хорошо знаком с тем, как они работают.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Лучше сделать все необходимое в одном запросе для повышения производительности. Измените GetStaffDirectory () для работы со строковым массивом и выполните такой фильтр;
var filterStr = '$filter=((EMAIL eq userEmails[0]) or (EMAIL eq userEmails[1]))'
Кроме того, теперь вы можете добавить свою логику сортировки;
$orderby=EMAIL desc
Обратите внимание, что это может решить переменное количество писем в массиве. sharepoint.stackexchange.com/questions/162270/…
Спасибо! Я подумал, что это может быть лучшее направление, но у меня были проблемы с его работой. Если я использую этот метод, может ли количество запросов по-прежнему варьироваться от страницы к странице?