Question

est-il possible de joindre un récepteur d'événements distant à ma liste existante sur mon site et non à la liste de mon application?Je suppose que non comme je ne trouve rien à ce sujet, et je pense que cela serait potentiellement "blessé" SharePoint.

Si j'ai besoin d'obtenir cela pour travailler, j'ai besoin de regarder une solution de sable ou une solution agricole droite?

tia

Était-ce utile?

La solution

Je dirais que je n'aurais pas possible de joindre un récepteur d'événement distant à une liste dans l'hôte-Web, car ils sont en réalité des collections de site.

Dans le Web hôte, vous ne pourrez déployer que des récepteurs d'événements réguliers (cibler une classe dans un assemblage) et les récepteurs d'événements distants prennent l'URL de la WCF réelle comme cible, qui n'existerait pas dans l'hôte-web quand même:

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

ou

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

Autres conseils

Oui, c'est possible. Il suffit de gérer le récepteur d'événement lors de l'installation de l'application en modifiant l'attribut de propriété sur TRUE comme semé ci-dessous.

 Entrez la description de l'image ici

Ensuite, écrivez simplement le code suivant

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);
                    }
                }
            }
        }

J'espère que cela vous aidera.

Il est possible uniquement de manière programmatique mais elle ne fonctionne pas si vous déployez.

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

clientContext.Load(eventresevers);

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top