Подписка на уведомления списка
Появилось в SharePoint Framework версии 1.7.0, вы можете подписаться на изменения в файлах, хранящихся в библиотеке документов SharePoint. Это позволяет реагировать на происходящие изменения без необходимости регулярного опроса содержимого библиотеки.
Предварительные требования
Чтобы использовать возможность подписки на список SharePoint Framework, сначала необходимо установить пакет npm @microsoft/sp-list-subscription. Это можно сделать с помощью указанного ниже фрагмента кода.
npm install @microsoft/sp-list-subscription --save --save-exact
Получение уведомлений об изменения документов, хранящихся в библиотеке документов SharePoint
Чтобы подписаться на изменения файлов, хранящихся в библиотеке документов SharePoint, создайте экземпляр класса ListSubscriptionFactory
. Затем вызовите метод createSubscription()
, передающий идентификатор библиотеки документов, на которую вы хотите подписаться. Если библиотека документов находится на текущем сайте, достаточно указать только идентификатор библиотеки. Если он находится на другом сайте или в другом семействе веб-сайтов, необходимо также указать их идентификаторы.
Ниже представлен пример подписки на список для библиотеки документов, расположенной на текущем сайте.
import { ListSubscriptionFactory, IListSubscription } from '@microsoft/sp-list-subscription';
import { Guid } from '@microsoft/sp-core-library';
export default class LatestDocumentsWebPart extends BaseClientSideWebPart<ILatestDocumentsWebPartProps> {
private _listSubscriptionFactory: ListSubscriptionFactory;
private _listSubscription: IListSubscription;
private async createListSubscription(): Promise<void> {
this._listSubscriptionFactory = new ListSubscriptionFactory(this);
this._listSubscription = await this._listSubscriptionFactory.createSubscription({
listId: Guid.parse(this.properties.listId),
callbacks: {
notification: this._loadDocuments.bind(this)
}
});
}
private _loadDocuments(): void {
// load documents here
}
// omitted for brevity
}
Если подписка на список создается с помощью свойства callbacks.notification
, необходимо указать метод, вызываемый при обнаружении изменения. Метод не имеет аргументов, и по соображениям безопасности вы не уведомляетесь о том, что именно изменилось. Чтобы получить последнее содержимое библиотеки с соблюдением настроенных разрешений, можно использовать интерфейсы API REST SharePoint или Microsoft Graph.
Дополнительная настройка
В зависимости от решения может потребоваться дополнительная настройка при подписке на уведомления списка.
Подключение к семейству веб-сайтов в клиенте c поддержкой нескольких регионов
Если вы используете SharePoint в клиенте c поддержкой нескольких регионов, вам нужно предоставить домен, где размещается конкретное семейство веб-сайтов. Это можно сделать с помощью свойства domain
, например:
this._listSubscriptionFactory.createSubscription({
domain: this.properties.siteDomain,
siteId: Guid.parse(this.properties.siteId),
webId: Guid.parse(this.properties.webId),
listId: Guid.parse(this.properties.listId),
callbacks: {
notification: this._loadDocuments.bind(this)
}
});
Получать уведомления о том, что подписка была создана или отменена
В некоторых случаях может потребоваться получение уведомлений, если создаваемый компонент успешно подписывается на уведомления списка или при нарушении подключения. Это позволит передавать подключение пользователю с помощью пользовательского интерфейса.
API подписки списка предоставляет два дополнительных обратных вызова, которые можно реализовать для реагирования на состояние подписки. В приведенном ниже коде показан случай, в котором компонент уведомляется при создании и отключении подписки.
private createListSubscription(): void {
this._listSubscriptionFactory.createSubscription({
domain: this.properties.siteDomain,
siteId: Guid.parse(this.properties.siteId),
webId: Guid.parse(this.properties.webId),
listId: Guid.parse(this.properties.listId),
callbacks: {
notification: this._loadDocuments.bind(this),
connect: this._subscriptionConnected.bind(this),
disconnect: this._subscriptionDisconnected.bind(this)
}
});
}
private _subscriptionConnected(): void {
// code to execute when the subscription to the list has been established
}
private _subscriptionDisconnected(reason: string): void {
// code to execute when the connection to the list has been disconnected
}
Метод для обратного вызова callbacks.disconnect
передает в качестве аргумента причину отключения подписки. Возможными значениями являются io server disconnect
(при прекращении подключения клиентом) или io client disconnect
(если сервер закрыл подключение).
Рекомендации
- все компоненты SharePoint Framework могут использовать возможности подписки со списком
- вы можете подписаться на события из библиотек и списков
- между изменением и уведомлением, полученным компонентом, происходит задержка в несколько секунд.
- компоненты могут подписаться на изменения в нескольких библиотеках документов
- уведомление об изменении не передает никаких сведений о добавленном или измененном документе. Чтобы просмотреть изменение, используйте API REST SharePoint или Microsoft Graph