В SharePoint 2013(2016) для отображения элементов списка используется Client Side Rendering (CSR). Работа на стороне клиента в первую очередь гарантирована методами clienttemplates.js. Для нормальной работы сайтов на SharePoint этого вполне может быть достаточно, но очень часто возникают нестандартные ситуации, решение которых потребует подключить к проекту библиотеки сторонних разработчиков.
Сегодня я хотел бы показать небольшой пример работы с библиотекой
jqGrid. Это JavaScript-элемент с поддержкой Ajax, который предоставляет решения для показа и обработки табличных данных в Интернете.
Предположим, у нас имеется очень простой список (
SPList) PMBirthdayBoys (ПМ-Именинники). В него, кроме обязательных столбцов, добавлен один столбец - BirthdayBoy, тип
SPUser. Данные этого списка нужно показать в отдельном окне
JQuery Dialog.
Следующий ниже JavaScript-метод легко решает эту задачу:
function GetDataPM(ListTitle) {
var url = _spPageContextInfo.siteAbsoluteUrl +
"/_api/web/lists/getByTitle('" + ListTitle + "')/items?" +
"$select=Id,BirthdayBoy/Title,BirthdayBoy/Department,"+
BirthdayBoy/EMail,BirthdayBoy/JobTitle,"+
BirthdayBoy/Name&" +
"$expand=BirthdayBoy/Id,BirthdayBoy/Picture&" +
"$orderby=Id desc";
var wWidth = $(window).width(), wHeight = $(window).height(),
ContainetID = "InformersID", TableID = "Table_" + ContainetID;
$('body').append($('<div />').attr('id', ContainetID).css('background-color', 'white')
.addClass('my-dialog')
.append($('<div />').addClass('main-forms-dialog')));
//-----------------------------
SetDocData_pm(url, function (data) {
var data_res = data.results;
if (data_res.length > 0) {
var grid = $("#" + TableID), dialog = $('#' + ContainetID);
dialog.dialog({
buttons: [{
text: "Закрыть", click: function () {
$(this).dialog('close');
}
}
],
height: wHeight,
width: wWidth,
closeText: "",
modal: true,
title: "Форма уведомлений",
show: "slide",
hide: "slide",
resizable: true,
create: function (event, ui) { },
open: function () {
$('#' + ContainetID).remove('#' + TableID).children('div')
.append($('<div />').attr('id', 'jqGridPager')
.addClass('main-forms-col-dialog padding-10')).append($('<table />')
.attr('id', TableID));
var grid = $("#" + TableID);
//----------------------
grid.jqGrid({
regional: "ru",
data: data_res,
datatype: "local",
rowList: [],
pgbuttons: false,
pgtext: null,
viewrecords: true,
pager: "#jqGridPager",
colMenu: true,
height: wHeight * 0.7,
width: wWidth * 0.9,
rownumbers: true,
sortname: "invdate",
sortorder: "desc",
colModel: [
{ name: "Id", width: 30, formatter: "integer", hidden: true,
colmenu: false, key: true, index: "Id" },
{ name: "BirthdayBoy.EMail", label: "EMail", colmenu: false },
{ name: "BirthdayBoy.Title", label: "Именинник", colmenu: false },
{ name: "BirthdayBoy.JobTitle",
label: "Должность", colmenu: false },
{ name: "BirthdayBoy.Department",
label: "Место работы", colmenu: false },
{ name: "BirthdayBoy.Name", label: "Логин", colmenu: false }
]
})
.jqGrid("navGrid", "#jqGridPager", { edit: false, add: false,
del: false, search: true, refresh: false, view: false,
position: "left", cloneToTop: true })
.jqGrid("gridResize")
.jqGrid("navButtonAdd", "#jqGridPager", {
buttonicon: "ui-icon-mail-open",
title: "Поздравить именинника",
caption: "Поздравить",
position: "next",
onClickButton: function () {
var rowid = grid.jqGrid("getGridParam", "selrow");
if (rowid) {
var getCell_Id = grid.jqGrid('getCell', rowid, 'Id');
//--что то делаем здесь
}
else {
alert("Строка не выделена. Необходимо установить курсор мыши на строку таблицы.");
}
}
});
},
close: function () { $('body').find('#' + ContainetID).remove(); }
});
}
else {
alert("Список «Именинник» пустой...");
}
}, true);
Метод
GetDataPM принимает имя списка. Далее выполняет запрос об указанном в списке пользователе, выясняет его электронный адрес, имя, логин и место работы (все эти данные хранятся в базе профилей пользователей SP). Инициализирует jqGrid таблицу, загружает туда полученные с сервера данные и сохраняет все это в форме JQuery Dialog
Вот и все....😄
В моем случае все прекрасно работает. Публикую эту информацию в надежде, что она может быть кому нибудь пригодится. А может быть, кто нибудь укажет мне на явные ошибки, что очень приветствуется😂.