Создание приемников внешних событий

Познакомьтесь с действиями для создания приемников внешних событий для локальных установок Службы Business Connectivity Services (BCS) внешних списков.

Важно!

Надстройки SharePoint устарели. Это содержимое относится только к локальной среде SharePoint Server.

Приемники событий внешнего являются классы, обеспечивающие Надстройки SharePoint для обработки событий, происходящих с объектами SharePoint, такие как списки или элементы списка. Например можно реагировать на события списка, такие как добавление или удаление поля; события элемента списка, такие как добавление или удаление элемента списка или вложения в элемент списка; или веб-события, такие как добавление или удаление сайта или семейства веб-сайтов. Вы можете добавить удаленный приемник событий в существующее решение Visual Studio, содержащее надстройку SharePoint.

Эта статья содержит исходный пример кода MSDN для создания удаленного приемника событий для внешних данных. В этом примере показано создание все компоненты, необходимые для настройки и использования уведомлений о событиях внешней системы.

Примечание.

Исходный пример кода MSDN, на который ссылается эта статья, больше недоступен. Сюда включены все необходимые шаги и фрагменты кода.

В этом примере вы выполните следующие действия.

  1. Создание внешней системы на основании образце базы данных Northwind
  2. Предоставление доступа к образца данных через OData, создав Windows Communication Foundation (WCF) службы.
  3. Создайте службу опроса, которая будет отслеживать изменения в данных и уведомлять SharePoint об этих изменениях.
  4. Создание приемника внешних событий, который выполняет, когда элементы добавляются к внешним данным и в результате создается новый элемент списка в список уведомлений.

Предварительные требования и настройка системы

Для выполнения этого примера вам потребуются следующие предварительные требования:

  • Visual Studio 2022
  • Средства разработчика Office для Visual Studio 2022
  • SQL Server
  • SharePoint
  • Службы IIS
  • Образец базы данных "Борей"

Построение компонентов для внешних систем

Максимальный часть конфигурации фактически происходит во внешней системе. Приемники событий внешнего правильной работы следующие компоненты должны иметь имеются во внешней системе.

  • Хранилища подписок: Таблица, содержащая сведения о подписчиков, чтобы получать уведомления об изменениях к внешним данным.
  • Хранения изменений: Таблица, которая используется для хранения изменений элементов данных. Работает как временное хранение только так, как службы опроса удаляет элемент в таблице, если уведомления отправляются подписчикам в SharePoint.
  • Опроса службы: Требуется в этом сценарии, как средство проверки при была изменена и предоставленные изменить таблицу данных. Служба опроса запрос таблицы изменений и собирает пакет уведомлений, которое отправляется на адрес доставки SharePoint (конечная точка REST), хранящийся в хранилище подписки.
  • Службы данных OData WCF: Представление данных из базы данных внешней системы, необходимо создать службы WCF. Эта служба на Internet Information Services (IIS), предоставляет интерфейс RESTful и канал OData, необходимые для этого сценария.

Настройка внешней системы

Первая задача — настроить во внешней системе.

Присоединение образце базы данных Northwind

Первая часть Подготовка серверной системе заключается в добавлении образце базы данных Northwind запущенный экземпляр SQL Server. Если уже установлены образце базы данных Northwind, можно запустить скрипты в следующем разделе, чтобы создать дополнительные объекты, необходимые для внешних событий уведомлений для работы.

Однако если у вас нет установленной базы данных Northwind, см. раздел Установка примера базы данных Northwind.

Создание хранилища подписок

При установке базы данных Northwind, откройте новое окно запроса и выполните следующий скрипт.

USE [Northwind]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[EntitySubscribe](
    [SubscriptionId] [int] IDENTITY(1,1) NOT NULL,
    [EntityName] [nvarchar](250) NULL,
    [DeliveryURL] [nvarchar](250) NULL,
    [EventType] [int] NULL,
    [UserId] [nvarchar](50) NULL,
    [SubscribeTime] [timestamp] NULL,
    [SelectColumns] [nvarchar](10) NULL,
 CONSTRAINT [PK_Subscribe] PRIMARY KEY CLUSTERED ([SubscriptionId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

Это создает таблицу в базе данных Northwind, с именем EntitySubscribe. Это служит в качестве хранилища подписок делается ссылка для более ранних версий.

Создание хранилища изменений

Выполните следующий скрипт, чтобы создать таблицу изменений, который будет записывать изменения данных в таблице Customers.

USE [Northwind]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Customers_Updates](
    [CustomerID] [nchar](5) NOT NULL,
    [CompanyName] [nvarchar](40) NOT NULL,
    [ContactName] [nvarchar](30) NULL,
    [ContactTitle] [nvarchar](30) NULL,
    [Address] [nvarchar](60) NULL,
    [City] [nvarchar](15) NULL,
    [Region] [nvarchar](15) NULL,
    [PostalCode] [nvarchar](10) NULL,
    [Country] [nvarchar](15) NULL,
    [Phone] [nvarchar](24) NULL,
    [Fax] [nvarchar](24) NULL,
    [TimeAdded] [datetime] NULL,
    [EventType] [int] NULL,
 CONSTRAINT [PK_Customers_Updates] PRIMARY KEY CLUSTERED ([CustomerID] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY]
GO

Это добавляет таблицу с именем Customers_Updates, в которой хранятся сведения о записи, который был добавлен к таблице Customers.

Создание изменение триггеров

Изменение триггера при изменения к таблице Customers. Запись при добавлении клиентов, SQL Server выполняется триггер, который вставляет новую запись в таблицу Customers_Updates со сведениями о записи.

Чтобы создать триггер, выполните следующий запрос.

USE [Northwind]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE trigger [dbo].[Customer_insupd] on [dbo].[Customers] for
INSERT
AS
DECLARE
    @CustomerID nchar(5),
    @CompanyName nvarchar(40),
    @ContactName nvarchar(30) ,
    @ContactTitle nvarchar(30) ,
    @Address nvarchar(60) ,
    @City nvarchar(15) ,
    @Region nvarchar(15) ,
    @PostalCode nvarchar(10) ,
    @Country nvarchar(15) ,
    @Phone nvarchar(24) ,
    @Fax nvarchar(24),
    @TimeAdded datetime,
    @EventType int

    Select @CustomerID = CustomerId, @CompanyName=CompanyName,
    @ContactName=ContactName, @ContactTitle=ContactTitle,
    @Address=Address, @City=City, @Region=Region,
    @PostalCode =PostalCode, @Country=Country,
    @Phone=Phone,@Fax=Fax,@EventType=1
    from inserted

    insert into Customers_Updates
    (CustomerId,CompanyName,
    ContactName, ContactTitle,
    Address, City, Region,
    PostalCode,Country,
    Phone,Fax,TimeAdded,EventType) values
    (@CustomerId,@CompanyName,
    @ContactName, @ContactTitle,
    @Address, @City, @Region,
    @PostalCode,@Country,
    @Phone,@Fax,SYSDATETIME(),@EventType)

GO

Примечание.

Если вы используете собственные пользовательские хранимые процедуры, определенные в модели BDC, вам также может потребоваться создать триггеры удаления и обновления. Дополнительные триггеры не рассматриваются в рамках этого сценария.

Создайте хранимые процедуры

Если вы используете прямой доступ к таблицам со службами Business Connectivity Services, эти процедуры не будут необходимы. Однако при определении собственных процедур и пользовательского кода во внешней системе может потребоваться добавить их, чтобы разрешить доступ к таблице из SQL Server.

// DeleteEventRecords stored procedure
USE [Northwind]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[proc_DeleteEventRecords]
    @CustomerID nchar(5), @EventType int
    AS
    Delete from Customers_Updates
    WHERE  CustomerID like @CustomerID AND EventType=@EventType

GO

SubscribeEntity хранимые процедуры будет создать запись в хранилище данных подписки.

// SubscribeEntity
USE [Northwind]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[SubscribeEntity]
    @EntityName Varchar(255),
    @EventType Integer,
    @DeliveryAddress Varchar(255),
    @SelectColumns Varchar(10)

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here

    Insert into EntitySubscribe(EntityName,DeliveryURL,EventType,SelectColumns)
    values (@EntityName,@DeliveryAddress,@EventType,@SelectColumns)

END

GO

Создание службы OData

Веб-канал OData размещается внутри Службы данных WCF. Эта служба WCF, затем, размещенным IIS в веб-приложении.

Следующие шаги создания новой службы данных ASP.NET WCF.

Создание приложения-службы данных WCF

  1. В Visual Studio 2022 в меню Файл выберите Создать, Проект.
  2. В диалоговом окне Новый проект разверните узел Visual C# и выберите веб- шаблон и выберите Веб-приложение ASP.NET.
  3. Введите NorthwindService в качестве имени проекта и нажмите кнопку ОК.

Затем с помощью мастера Visual Studio, вы обнаружения схемы источника данных и используйте его для создания модели данных сущности ADO.NET.

Чтобы определить модели данных

  1. В Обозревателе решений откройте контекстное меню для проекта ASP.NET и выберите Добавить новый элемент.

  2. В диалоговом окне Добавление нового элемента выберите шаблон данных и выберите Модель данных ADO.NET сущности.

  3. Имя модели данных введите Northwind.edmx.

  4. В мастере модели данных сущности выберите Создать из базы данных и нажмите кнопку Далее.

  5. Подключения к базе данных модели данных, выполнив одно из следующих действий:

  6. Если подключение к базе данных еще не настроено, выберите Создать подключение и создайте новое подключение. Дополнительные сведения можно как: Создание подключения к базам данных SQL Server. В этом экземпляре SQL Server должны иметь присоединенное образце базы данных Northwind. Нажмите кнопку Далее.

    -или-

  7. При наличии подключения к базе данных, уже настроена для подключения к базе данных Northwind, выберите это подключение в списке подключения и нажмите кнопку Далее.

  8. На последней странице мастера установите флажки для всех таблиц в базе данных и снимите флажки для представлений и хранимых процедур.

  9. Нажмите кнопку Готово, чтобы закрыть мастер.

На следующем этапе создания фактической службы, размещенном в IIS, который будет предоставлять означает, что для доступа к внешним данным через представлений состояния (REST).

Создание службы данных WCF

  1. В Обозревателе решений откройте контекстное меню для проекта ASP.NET и выберите команду Добавить новый элемент.
  2. В диалоговом окне Добавление нового элемента выберите Службы данных WCF.
  3. Имя службы введите Northwind.
  4. В коде для службы данных в определении класса, определяющего службу данных, замените комментарий /* TODO: put your data source class name here */ типом, который является контейнером сущностей модели данных, который в данном случае имеет значение NorthwindEntities. Определения класса должен выглядеть следующим образом.
public class Northwind : DataService<NorthwindEntities>

Настройка безопасности в службе

  • Теперь необходимо изменить параметры безопасности, чтобы разрешить доступ к данным из веб-канал с внешним потребителей OData. При создании службы WCF, все отказано в доступе по умолчанию. Внесите следующие изменения в созданный класс.

config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);

Создайте операцию службы подписки на (необязательно)

Службы WCF также можно запрограммировать позволяют обрабатывать запросы подписки на и отказаться от SharePoint. Если вы решили создать пользовательские хранимые процедуры для приложения, каждая из них будет обрабатываться операцией службы.

Подписки на: Подпишитесь операция принимает запрос, отправляемый SharePoint и получает адрес доставки, тип события и сущность. Он также должен создать subscriptionId и затем записать все эти в таблице базы данных.


/// The Subscribe service operation maps directly to the Subscribe stereotype
/// found in the BDC model

[WebGet]
public string Subscribe(string deliveryUrl, string eventType)
{
   // Generate a new Guid that will function as the subscriptionId.
  string subscriptionId = new Guid().ToString();

  // This sproc will be used to create the subscription in the database.
  string subscribeSproc = "SubscribeEntity";

  // Create connection to database.
  using (SqlConnection conn = new SqlConnection(sqlConn))
  {
    SqlCommand cmd = new SqlCommand(subscribeSproc, conn);
    cmd.Parameters.Add(new SqlParameter("SubscriptionId", subscriptionId));
    cmd.Parameters.Add(new SqlParameter("EntityName", entityName));
    cmd.Parameters.Add(new SqlParameter("EventType", eventType));
    cmd.Parameters.Add(new SqlParameter("DeliveryAddress", deliveryUrl));
    cmd.Parameters.Add(new SqlParameter("SelectColumns", selectColumns));

    try
    {
      conn.Open();
      cmd.ExecuteNonQuery();
  }
    catch (Exception e)
    {
      throw e;
    }
    finally
    {
      conn.Close();
    }

    return subscriptionId;
  }
}

Примечание.

[!Примечание] Если настроить SQL Server для проверки подлинности Windows, он будет пытаться проверки подлинности запроса с удостоверение пула приложений. Убедитесь в том, что учетную запись, настроенную в пуле приложений имеет права на чтение и запись в базу данных.

Создание опроса службы

Служба опроса — это служба Windows, которая отвечает за запрос таблицы изменений, а также создание и отправку уведомлений в SharePoint или SharePoint Online по указанному адресу доставки.

Далее создайте новый проект службы Windows, который будет зарегистрирован на главном компьютере WCF. После регистрации проекта запущенной службы можно просматривать в консоли управления (MMC).

Создание нового проекта

  1. Откройте Visual Studio 2022.
  2. Создайте новый проект на основе шаблона службы Windows, назовите проект PollingServiceи нажмите кнопку « ОК ».
  3. При создании проекта, откройте файл PollingService.cs в представлении кода.
  4. Добавьте следующий код в только что созданный класс.
public partial class PollingService : ServiceBase
{
  string subscriptionStorePath = string.Empty;

  public PollingService()
  {
    InitializeComponent();
  }

  protected override void OnStart(string[] args)
  {
    // This is the timer which fires every minute.
    System.Timers.Timer aTimer = new System.Timers.Timer();
    aTimer.Elapsed += new System.Timers.ElapsedEventHandler(SendEventNotification);
    aTimer.Interval = 60000;
    aTimer.Enabled = true;
  }

  protected override void OnStop()
  { }

  private void SendEventNotification(object sender, EventArgs e)
  {
    try
    {
      List<ItemChange> events = itemChangeLookUp();
      triggerEventPerSubscription(events);
    }
    catch (Exception ex)
    {
      EventLog.Log = "Application";
      EventLog.Source = ServiceName;
      EventLog.WriteEntry("PollingService" + ex.Message, EventLogEntryType.Error);
    }
  }

  private void triggerEventPerSubscription(List<ItemChange> events)
  {
    foreach (ItemChange itemChangeEvent in events)
    {
      SendNotification(itemChangeEvent, itemChangeEvent.DeliveryAddress);
      string message = string.Format("PollingService.TriggerEventPerSubscription: Notification sent for item {0} of eventType {1}", itemChangeEvent.CustomerId, itemChangeEvent.EventType);
      EventLog.Log = "Application";
      EventLog.Source = ServiceName;
      EventLog.WriteEntry(message);
    }
  }

  private List<ItemChange> itemChangeLookUp()
  {
    EventLog.Log = "Application";
    EventLog.Source = ServiceName;
    EventLog.WriteEntry("Polling for Item Change");
    List<ItemChange> itemChangeList = new List<ItemChange>();
    string connectionString = "Data Source=.;Initial Catalog=Northwind;Integrated Security=true";

    // Provide the query string with a parameter placeholder.
    string queryString = "Proc_RetrieveEventRecords";

    // Specify the parameter value.
    int paramValue = -50;

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
      SqlCommand command = new SqlCommand(queryString, connection);
      command.CommandType = CommandType.StoredProcedure;
      command.Parameters.AddWithValue("@TimeSince", paramValue);
      try
      {
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
          ItemChange item = new ItemChange(reader["CustomerID"].ToString(), Int32.Parse(reader["EventType"].ToString()),
            reader[14].ToString(), reader["DeliveryUrl"].ToString(), reader["CompanyName"].ToString(),
            reader["ContactName"].ToString(), reader["ContactTitle"].ToString(), reader["Address"].ToString(),
            reader["City"].ToString(), reader["Region"].ToString(), reader["Country"].ToString(), reader["PostalCode"].ToString(),
            reader["Phone"].ToString(), reader["Fax"].ToString());
          itemChangeList.Add(item);
        }
        reader.Close();
      }
      catch (Exception ex)
      {
        EventLog.Log = "Application";
        EventLog.Source = ServiceName;
        EventLog.WriteEntry("PollingService : ItemChangeLookup " + ex.Message, EventLogEntryType.Error);
      }
    }
    string message = string.Format("{0} items changes", itemChangeList.Count);
    EventLog.Log = "Application";
    EventLog.Source = ServiceName;
    EventLog.WriteEntry(message);

    return itemChangeList;
  }

Следующим шагом является создание исполняемого файла, который можно добавить в запущенных служб на компьютере OData.

Чтобы скомпилировать и развернуть службу опроса

  1. Нажмите клавишу F5, чтобы построить проект.
  2. Откройте командную строку для VS2022.
  3. В командной строке перейдите к папке выходных данных проекта.
  4. В каталоге Bin найдите файл PollingService.exe.
  5. Введите installutil PollingService.exи нажмите клавишу ВВОД.
  6. Убедитесь, что служба запуска путем выполнения служб консоли Управления.

Необходимые компоненты SharePoint

Чтобы завершить работу всей системы, на сервере под управлением SharePoint требуются следующие компоненты.

  • Внешнего типа контента: Внешний тип контента по сути является определение XML из внешнего источника данных. В этом сценарии вы будете использовать новые средства автоматического создания в Visual Studio 2022, чтобы обнаружить источник данных и автоматически создать внешний тип контента.

  • Внешний приемник событий: Удаленный или внешний приемник событий — это то, что делает возможными действия с изменениями внешних данных в SharePoint. Вы можете создать приемников событий для внешних списков и entities.

    Приемник событий, созданный для внешнего списка похож на другие приемники событий в списки SharePoint. Создание кода и подключить его в список. Когда действие, которое выполняется на данных, представленного списка, выполняет приемника событий.

    Приемника событий для сущностей выполняется так же, как приемник событий на основе списка, за исключением того, не подключенного к списку. Так же, как она получает уведомления, но она не требуется интерфейс, который связан с пример на основе списка. Это преимущество — можно программным путем перехвата уведомления и создавать код для выполнения некоторых действий. В этом сценарии это действие используется для создания новой записи в список уведомлений

  • Список уведомлений: Список уведомлений, простого списка SharePoint, который используется для записи уведомлений, полученных от внешней системы. Для каждой новой записи, добавлена к внешней системе запись будет создан в список уведомлений.

Настройка компонентов SharePoint

Теперь, когда у вас есть внешней системы, Настройка, настало время перейти к созданию вторая уравнения. Теперь вы создадите компоненты для размещения в SharePoint.

Создание проекта Visual Studio 2022

  1. В Visual Studio 2022 выберите Создать проект.
  2. Выберите шаблон проекта приложения SharePoint.

Средства разработчика Office для Visual Studio 2022 добавили мастер автогенерации, который будет обнаруживать схему источника данных, а затем создавать на основе этого внешнего типа контента.

Чтобы добавить новый внешний тип контента

Теперь вы измените XML-код, созданный на предыдущем шаге, чтобы добавить метод для подписки. Это позволит BCS для связи с внешней системы, когда кто-то подписывается уведомлений об изменении внешних данных.

Добавление метода подписки на внешний тип контента XML

  1. В Обозревателе решений найдите новый узел с именем Внешних типов контента.
  2. Найдите файл Customers.ect и откройте его с помощью редактора XML.
  3. Прокрутите вниз до нижней части страницы и вставьте следующий метод в <Methods> раздел.

<Method Name="SubscribeCustomer" DefaultDisplayName="Customer Subscribe" IsStatic="true">
              <Properties>
                <Property Name="ODataEntityUrl" Type="System.String">/EntitySubscribes</Property>
                <Property Name="ODataHttpMethod" Type="System.String">POST</Property>
                <Property Name="ODataPayloadKind" Type="System.String">Entry</Property>
                <Property Name="ODataFormat" Type="System.String">application/atom+xml</Property>
                <Property Name="ODataServiceOperation" Type="System.Boolean">false</Property>
              </Properties>
              <AccessControlList>
                <AccessControlEntry Principal="NT Authority\\Authenticated Users">
                  <Right BdcRight="Edit" />
                  <Right BdcRight="Execute" />
                  <Right BdcRight="SetPermissions" />
                  <Right BdcRight="SelectableInClients" />
                </AccessControlEntry>
              </AccessControlList>
              <Parameters>
                <Parameter Direction="In" Name="@DeliveryURL">
                  <TypeDescriptor TypeName="System.String" Name="DeliveryURL" >
                    <Properties>
                      <Property Name="IsDeliveryAddress" Type="System.Boolean">true</Property>
                    </Properties>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="In" Name="@EventType">
                  <TypeDescriptor TypeName="System.Int32" Name="EventType" >
                    <Properties>
                      <Property Name="IsEventType" Type="System.Boolean">true</Property>
                    </Properties>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="In" Name="@EntityName">
                  <TypeDescriptor TypeName="System.String" Name="EntityName" >
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="SubscribeCustomer" Type="System.String">Customers</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="In" Name="@SelectColumns">
                  <TypeDescriptor TypeName="System.String" Name="SelectColumns" >
                    <DefaultValues>
                      <DefaultValue MethodInstanceName="SubscribeCustomer" Type="System.String">*</DefaultValue>
                    </DefaultValues>
                  </TypeDescriptor>
                </Parameter>
                <Parameter Direction="Return" Name="SubscribeReturn">
                  <TypeDescriptor Name="SubscribeReturnRootTd" TypeName="Microsoft.BusinessData.Runtime.DynamicType">
                    <TypeDescriptors>
                      <TypeDescriptor Name="SubscriptionId" TypeName="System.String" >
                        <Properties>
                          <Property Name="SubscriptionIdName" Type="System.String">Default</Property>
                        </Properties>
                        <Interpretation>
                          <ConvertType LOBType="System.Int32" BDCType="System.String"/>
                        </Interpretation>
                      </TypeDescriptor>
                      <TypeDescriptor Name="DeliveryURL" TypeName="System.String" />
                      <TypeDescriptor Name="SelectColumns" TypeName="System.String" >
                      </TypeDescriptor>
                      <TypeDescriptor Name="EntityName" TypeName="System.String" />
                      <TypeDescriptor Name="EventType" TypeName="System.Int32" />
                      <TypeDescriptor Name="UserId" TypeName="System.String" />
                      <!--TypeDescriptor Name="SubscribeTime" TypeName="System." /-->
                    </TypeDescriptors>
                  </TypeDescriptor>
                </Parameter>
              </Parameters>
              <MethodInstances>
                <MethodInstance Type="EventSubscriber" ReturnParameterName="SubscribeReturn" ReturnTypeDescriptorPath="SubscribeReturnRootTd" Default="true" Name="SubscribeCustomer" DefaultDisplayName="Customer Subscribe">
                  <AccessControlList>
                    <AccessControlEntry Principal="NT Authority\\Authenticated Users">
                      <Right BdcRight="Edit" />
                      <Right BdcRight="Execute" />
                      <Right BdcRight="SetPermissions" />
                      <Right BdcRight="SelectableInClients" />
                    </AccessControlEntry>
                  </AccessControlList>
                </MethodInstance>
              </MethodInstances>
            </Method>

Теперь вы добавите клиентский код, чтобы разрешить списку подписываться на уведомления о событиях.

Добавление кода в файл App.js для инициации подписки

  • В папке Scripts Надстройка SharePoint проекта откройте файл App.js. Вставьте следующий метод в файл.

function SubscribeEntity()
{
    var notificationCallback = new SP.BusinessData.Runtime.NotificationCallback(context, "http://[MACHINE NAME]:8585");
    var url = myweb.get_url();
    notificationCallback.set_notificationContext(url);
    context.load(notificationCallback);
    var subscription = entity.subscribe(1, notificationCallback, "", "SubscribeCustomer", lobSystemInstance);
    context.load(subscription);
    context.executeQueryAsync(OnSubscribeSuccess, failmethod);
}

Чтобы зарегистрировать приемника событий с помощью этого сценария, необходимо создать кнопку на страницу Default.aspx в вашем проекте и вызовите SubscribeEntity() из метода onclick().

  • Откройте страницу Default.aspx и добавьте следующий HTML-код.

<input type="button" value="Subscribe" onclick="SubscribeEntity();"/>

Для регистрации событий для работы необходимо также включить списка SharePoint для принятия внешние события. Для этого, включите функцию внешние события.

Ниже приведен сценарий, который будет включен компонент с помощью клиентского кода.

function EnableEventing_Clicked()
{
    var clientContext = SP.ClientContext.get_current();
    var web = clientContext.get_web();
    var features = web.get_features();

    clientContext.load(features);

    // The GUID provided here is the feature that allows external events and alerts.
    var eventingFeatureId = new SP.Guid('5B10D113-2D0D-43BD-A2FD-F8BC879F5ABD');

    var eventingFeature = features.add(eventingFeatureId, true, SP.FeatureDefinitionScope.farm);

    clientContext.load(eventingFeature);
    var onEventingFeatureActivated = function () {
        alert("eventing feature activated");
    };
    clientContext.executeQueryAsync(Function.createDelegate(this,
    onEventingFeatureActivated));
}

Как и в случае с подпиской, вы добавите кнопку на страницу, которая включает эту функцию.

Добавьте следующий HTML-код на страницу Default.aspx непосредственно под кнопкой подписаться.


<input type="button" value="EnableEventing" onclick="EnableEventing_Clicked();" />

Рассмотрим процедуру для этого сценария необходимо добавить список уведомлений, которое будет показывать уведомления, отправляемые внешней системой.

Чтобы добавить список уведомлений

  1. В Обозревателе решений откройте контекстное меню для имени проекта и нажмите кнопку Добавить.
  2. Выберите шаблон списка и имя спискаNotificationList.

Имитация приемника событий, который зарегистрирован с помощью SharePoint в глобальном кэше сборок, в примере задаются консольное приложение, которое будет запущен процесс прослушивание изменений. При получении уведомления, NotificationListдобавляет элемент списка.

Чтобы запустить приемника событий командной строки

  1. Откройте RemoteEventReceiverConsoleApp.

  2. Откройте файл Program.cs и измените имя на локальный компьютер (или компьютере с запущенным приемника событий).

  3. Нажмите кнопку Пуск в Visual Studio, чтобы запустить консольное приложение.

    Откроется командное окно, указывающее, что приложение скомпилировано правильно и прослушивает уведомления об изменениях из внешней системы. Не закрывайте это окно во время этой проверки.

Чтобы развернуть приложение для SharePoint

  • Нажмите клавишу F5, с помощью Visual Studio откройте построение и развертывание приложения.

Тестирование приложения

Теперь можно видеть приложения в действии.

  1. Обзор вокруг приложение, чтобы просмотреть различные списки, которые представляют данные во внешней системе.

  2. Выберите список Клиенты .

  3. Добавление нового клиента.

  4. Просмотрите новый элемент списка, который вы создали.

  5. Перейдите к списку уведомления, чтобы увидеть, что во внешней системе уведомил SharePoint внесение изменений в таблице Customers.

    Имейте в виду, таймера задано значение отправлять уведомления каждую минуту. Во время тестирования, может потребоваться ожидания короткого периода, прежде чем Просмотр персональных уведомления.

См. также