Поделиться через


Подписка на уведомления списка

Появилось в 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

См. также