Можно ли прикрепить дистанционный приемник событий к моим спискам

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/69464

Вопрос

Можно ли прикрепить дистанционный приемник событий в мой существующий список на моем сайте, а не в список в моем приложении?Я предполагаю, что нет, так как я ничего не могу найти на этом, и я думаю, что это потенциально «повредит» SharePoint.

Если мне нужно сделать это на работу, мне нужно посмотреть на песочницу или фермерское решение правильно?

TIA

Это было полезно?

Решение

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

в хост-севере, вы сможете развернуть только регулярные приемники событий (нацеливание на класс в сборке), и приемники удаленного события принимают URL фактического WCF в качестве цели, которая не будет существовать в хостеВеб в любом случае:

<Url>~remoteAppUrl/RemoteEventReceiver1.svc</Url>
.

или

<Url>http://apps.mydomain.com:36511/MyReR.svc</Url>
.

Другие советы

Да, это возможно. Просто обратитесь к приемнику событий при установке приложения, изменив атрибут свойств в True AS SOWN ниже.

 Введите описание изображения здесь

, а затем просто напишите следующий код

public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            switch (properties.EventType)
            {
                case SPRemoteEventType.AppInstalled:
                    HandleAppInstalled(properties);
                    break;
                case SPRemoteEventType.ItemAdded:
                    HandleItemAdded(properties);
                    break;
            }
            return result;
        }

        private void HandleAppInstalled(SPRemoteEventProperties properties)
        {
            using (ClientContext clientContext =
                      TokenHelper.CreateAppEventClientContext(properties, false))
            {
                if (clientContext != null)
                {
                    List myList = clientContext.Web.Lists.GetByTitle("Your List Name");
                    clientContext.Load(myList, p => p.EventReceivers);
                    clientContext.ExecuteQuery();
                    bool rerExists = false;

                    foreach (var rer in myList.EventReceivers)
                    {
                        if (rer.ReceiverName == "ItemAddedEvent")
                        {
                            rerExists = true;
                            System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at "
                               + rer.ReceiverUrl);
                        }
                    }
                    if (!rerExists)
                    {
                        EventReceiverDefinitionCreationInformation receiver =new EventReceiverDefinitionCreationInformation();
                        receiver.EventType = EventReceiverType.ItemAdded;


                        receiver.ReceiverUrl = "Your service url";
                        receiver.ReceiverName = "ItemAddedEvent";
                        receiver.Synchronization = EventReceiverSynchronization.Synchronous;
                        myList.EventReceivers.Add(receiver);
                        clientContext.ExecuteQuery();
                        System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + msg.Headers.To.ToString());
                    }
                }
            }
        }
 private void HandleItemAdded(SPRemoteEventProperties properties)
        {
            using (ClientContext clientContext =
              TokenHelper.CreateRemoteEventReceiverClientContext(properties))
            {
                if (clientContext != null)
                {
                    try
                    {
                        List photos = clientContext.Web.Lists.GetByTitle("Your List Name");
                        ListItem item = photos.GetItemById(
                           properties.ItemEventProperties.ListItemId);
                        clientContext.Load(item);
                        clientContext.ExecuteQuery();

                        item["Title"] += "\nUpdated by RER " +
                             System.DateTime.Now.ToLongTimeString();
                        item.Update();
                        clientContext.ExecuteQuery();
                    }
                    catch (Exception oops)
                    {
                        System.Diagnostics.Trace.WriteLine(oops.Message);
                    }
                }
            }
        }
.

Я надеюсь, что это поможет вам.

Это возможно только программно, но он не работает, если вы развертываете.

var eventReceiver = new EventReceiverDefinitionCreationInformation
                     {
                         EventType = EventReceiverType.ItemAdding,
                         ReceiverAssembly = Assembly.GetExecutingAssembly().FullName,
                         ReceiverClass = "RemoteReciverWeb.Services.ContactAddEventReceiver",
                         ReceiverName = "ContactAddEventReceiver",
                         ReceiverUrl = remoteEventEndPointUrl,
                         SequenceNumber = 1000
                     };

clientContext.Load(eventresevers);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top