Установите адрес электронной почты для запроса доступа через CSOM
-
10-12-2019 - |
Вопрос
В объектной модели на стороне сервера можно установить адрес электронной почты для запроса доступа через свойство SPWeb.RequestAccessEmail
(MSDN).
Поскольку мы переносим нашего клиента SharePoint в Office365, я ищу способ установить это значение.Я знаю, что это можно сделать вручную в пользовательском интерфейсе (Настройки сайта > Разрешения сайта > Настройки запроса на доступ), но поскольку у нас есть возможность самостоятельного создания сайтов, невозможно изменять его вручную каждый раз при создании сети.
К сожалению, недвижимости нет. Web.RequestAccessEmail
в объектной модели на стороне клиента.
Есть ли способ установить этот адрес электронной почты через пакет свойств (он же Web.AllProperties["__SecretKey"]
), веб-сервис (_vti_bin
, и т. д.) или какой-либо другой обходной путь?
Любая помощь высоко ценится!
Решение
В новейшей версии «SharePoint Online Management Shell» (v16.0.4630.1200) включено Microsoft.SharePoint.Client.dll
добавляет свойство RequestAccessEmail
к Web
сорт.
Скачать: https://www.microsoft.com/en-us/download/details.aspx?id=35588
Вы можете использовать эту DLL до тех пор, пока не будет выпущен NuGet-Package.
РЕДАКТИРОВАТЬ:Начиная с версии 16.1.4727.1200
принадлежащий Microsoft.SharePointOnline.CSOM
NuGet-пакет RequestAccessEmail
имущество поддерживается.
Другие советы
К сожалению, этот объект размещения недоступен через CSOM
.
Как получить все доступные свойства объекта веб-клиента:
var allProperties = clientContext.Web.AllProperties;
clientContext.Load(allProperties);
clientContext.ExecuteQuery();
Это возможно, но, на мой взгляд, это хак.Я написал статью, чтобы обсудить, является ли это действительным способом сделать это - Управление пользовательским интерфейсом SharePoint через IFrame для добавления недостающих функций на стороне клиента
Вот код:
//quite dirty hack but at this point the only possibility to set the AccessRequest mail via clientside
function setAccessRequest(mail) {
var iframe = document.createElement('iframe');
//set the setrqacc.aspx link
var setrqaccUrl = _spPageContextInfo.webAbsoluteUrl + '/_layouts/15/setrqacc.aspx?type=web';
//create setrqacc.aspx hidden iframe
iframe.setAttribute('src', setrqaccUrl);
iframe.setAttribute('style', 'display:none');
iframe.onload = function () {
//this will fire 2 times - the first time when its initially loaded. the second after the changes were applied (page is reloaded (postback) after the submitbutton is triggered)
var $iframeInput = $('input[id*="_txtEmail"]', $(iframe).contents());
if ($iframeInput.length) {
//initial load - apply settings
$iframeInput.val(mail);
//gets iframeInput's parent so the current input can be placed inside
var $iframeBtn = $('input[id*="_btnSubmit"]', $(iframe).contents());
//trigger the post
$iframeBtn.trigger('click');
} else {
//second load - do callback
callback('AccessRequest');
}
};
document.body.appendChild(iframe);
}
Он должен быть обернут диалогом ожидания и некоторыми предупреждениями, когда пользователь пытается выйти со страницы.Загрузка страницы в IFrame может занять некоторое время, и этот код делает это дважды.