コード例 #1
0
        private static void RegisterExpectedShipmentsEventHandler(HttpRequest request)
        {
            using (var clientContext = sPContext.CreateUserClientContextForSPHost())
            {
                var query = from list in clientContext.Web.Lists
                            where list.Title == "Expected Shipments"
                            select list;
                IEnumerable <List> matchingLists = clientContext.LoadQuery(query);
                clientContext.ExecuteQuery();

                List expectedShipmentsList = matchingLists.Single();

                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                receiver.ReceiverName = "ExpectedShipmentsItemUpdated";
                receiver.EventType    = EventReceiverType.ItemUpdated;

#if DEBUG
                receiver.ReceiverUrl = WebConfigurationManager.AppSettings["RERdebuggingServiceBusUrl"].ToString();
#else
                receiver.ReceiverUrl = "https://" + request.Headers["Host"] + "/Services/RemoteEventReceiver1.svc";
#endif

                expectedShipmentsList.EventReceivers.Add(receiver);

                clientContext.ExecuteQuery();
            }
        }
コード例 #2
0
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, false))
            {
                if (clientContext != null)
                {
                    clientContext.Load(clientContext.Web);
                    clientContext.ExecuteQuery();

                    var    requestProperty = (System.ServiceModel.Channels.HttpRequestMessageProperty)System.ServiceModel.OperationContext.Current.IncomingMessageProperties[System.ServiceModel.Channels.HttpRequestMessageProperty.Name];
                    string opContext       = System.ServiceModel.OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri.Substring(0, System.ServiceModel.OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri.LastIndexOf("/"));
                    string remoteUrl       = string.Format("{0}/CreateSite.svc", opContext);
                    //string remoteUrl = string.Format("{0}/CreateSite2.svc", System.ServiceModel.OperationContext.Current.Channel.LocalAddress.Uri.DnsSafeHost + "/services");
                    var appWebUrl = "https://" + requestProperty.Headers[System.Net.HttpRequestHeader.Host];

                    List createSiteRequests = clientContext.Web.Lists.GetByTitle("SiteCreationRequests");
                    if (properties.EventType == SPRemoteEventType.AppInstalled)
                    {
                        EventReceiverDefinitionCreationInformation newEventReceiver = new EventReceiverDefinitionCreationInformation()
                        {
                            EventType      = EventReceiverType.ItemUpdated,
                            ReceiverName   = "CreateSite",
                            ReceiverUrl    = remoteUrl,
                            SequenceNumber = 1000 //Should be higher number if lower priority, particularly for async events
                        };
                        createSiteRequests.EventReceivers.Add(newEventReceiver);
                        clientContext.ExecuteQuery();
                    }
                }
            }

            return(result);
        }
コード例 #3
0
 private void HandleAppInstalled(SPRemoteEventProperties properties)
 {
     using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, false))
     {
         if (clientContext != null)
         {
             List myList = clientContext.Web.Lists.GetByTitle(ListName);
             clientContext.Load(myList, p => p.EventReceivers);
             clientContext.ExecuteQuery();
             bool rerExists = false;
             foreach (var rer in myList.EventReceivers)
             {
                 if (rer.ReceiverName == ReceiverName)
                 {
                     rerExists = true;
                     System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at " + rer.ReceiverUrl);
                 }
             }
             if (!rerExists)
             {
                 EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                 receiver.EventType = EventReceiverType.ItemAdded;
                 //Get WCF URL where this message was handled
                 OperationContext op  = OperationContext.Current;
                 Message          msg = op.RequestContext.RequestMessage;
                 receiver.ReceiverUrl     = msg.Headers.To.ToString();
                 receiver.ReceiverName    = ReceiverName;
                 receiver.Synchronization = EventReceiverSynchronization.Synchronous;
                 myList.EventReceivers.Add(receiver);
                 clientContext.ExecuteQuery();
                 System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + msg.Headers.To.ToString());
             }
         }
     }
 }
コード例 #4
0
        private void AttachEventHandler(string handlerEndpoint, Web web, string name, EventReceiverType receiverType,
                                        ClientContext clientContext)
        {
            clientContext.Load(web, w => w.EventReceivers.Include(e => e.ReceiverName));
            clientContext.ExecuteQueryRetry();

            foreach (var eventReciever in web.EventReceivers)
            {
                if (eventReciever.ReceiverName == name)
                {
                    return;
                }
            }

            var eventReceiver = new EventReceiverDefinitionCreationInformation
            {
                EventType       = receiverType,
                ReceiverName    = name,
                ReceiverUrl     = handlerEndpoint,
                SequenceNumber  = 10000,
                Synchronization = EventReceiverSynchronization.Asynchronous
            };

            web.EventReceivers.Add(eventReceiver);
            OnNotify(ProvisioningNotificationLevels.Verbose, "Attaching remote event handler to web | " + name);
        }
コード例 #5
0
ファイル: WebExtensions.cs プロジェクト: Xylon5/API
        /// <summary>
        /// Registers a remote event receiver
        /// </summary>
        /// <param name="web">The web to process</param>
        /// <param name="name">The name of the event receiver (needs to be unique among the event receivers registered on this list)</param>
        /// <param name="url">The URL of the remote WCF service that handles the event</param>
        /// <param name="eventReceiverType"></param>
        /// <param name="synchronization"></param>
        /// <param name="sequenceNumber"></param>
        /// <param name="force">If True any event already registered with the same name will be removed first.</param>
        /// <returns>Returns an EventReceiverDefinition if succeeded. Returns null if failed.</returns>
        public static EventReceiverDefinition AddRemoteEventReceiver(this Web web, string name, string url, EventReceiverType eventReceiverType, EventReceiverSynchronization synchronization, int sequenceNumber, bool force)
        {
            var query = from receiver
                        in web.EventReceivers
                        where receiver.ReceiverName == name
                        select receiver;

            web.Context.LoadQuery(query);
            web.Context.ExecuteQueryRetry();

            var receiverExists = query.Any();

            if (receiverExists && force)
            {
                var receiver = query.FirstOrDefault();
                receiver.DeleteObject();
                web.Context.ExecuteQueryRetry();
                receiverExists = false;
            }
            EventReceiverDefinition def = null;

            if (!receiverExists)
            {
                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                receiver.EventType       = eventReceiverType;
                receiver.ReceiverUrl     = url;
                receiver.ReceiverName    = name;
                receiver.SequenceNumber  = sequenceNumber;
                receiver.Synchronization = synchronization;
                def = web.EventReceivers.Add(receiver);
                web.Context.Load(def);
                web.Context.ExecuteQueryRetry();
            }
            return(def);
        }
 /// <summary>
 /// deployes event receiver at site level
 /// </summary>
 /// <param name="clientContext"></param>
 public void AssociateWebProvisionedEventReceiver(ClientContext clientContext)
 {
     Web web = clientContext.Web;
     clientContext.Load(web);
     clientContext.Load(clientContext.Site);
     clientContext.Load(clientContext.Site.EventReceivers);
     clientContext.ExecuteQuery();
     EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
     receiver.EventType = EventReceiverType.WebProvisioned;
     OperationContext op = OperationContext.Current;
     Message msg = op.RequestContext.RequestMessage;
     receiver.ReceiverUrl = msg.Headers.To.ToString();
     receiver.ReceiverName = ReceiverName;
     receiver.Synchronization = EventReceiverSynchronization.Synchronous;
     receiver.SequenceNumber = 5000;
     //adding receiver the host web.
     // we are adding event receiver to site context so that event receriver fires for sub-sub-sites
     clientContext.Site.EventReceivers.Add(receiver);
     clientContext.ExecuteQuery();
     //upload theme related files
     themeHelper.DeployFiles(web);
     //delete oob composed looks
     themeHelper.DeleteOOBComposedLooks(clientContext);
     //apply theme and set default theme
     themeHelper.AddComposedLooksAndSetDefaultTheme(clientContext);
 }
コード例 #7
0
        private void SetupEventReceiversOfList(ClientContext context, List setupList, ShList listConfig)
        {
            if (listConfig.AddMetadataDefaultsReceiver)
            {
                var metadataDefaultsEventReceiver = new EventReceiverDefinitionCreationInformation
                {
                    ReceiverName     = "LocationBasedMetadataDefaultsReceiver ItemAdded",
                    EventType        = EventReceiverType.ItemAdded,
                    Synchronization  = EventReceiverSynchronization.Synchronous,
                    ReceiverAssembly = "Microsoft.Office.DocumentManagement, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c",
                    ReceiverClass    = "Microsoft.Office.DocumentManagement.LocationBasedMetadataDefaultsReceiver",
                    SequenceNumber   = 1000
                };

                if (setupList.GetEventReceiverByName(metadataDefaultsEventReceiver.ReceiverName) == null)
                {
                    Log.DebugFormat("Adding Metadata Event Receiver to list {0}", listConfig.Title);
                    setupList.EventReceivers.Add(metadataDefaultsEventReceiver);
                }
                else
                {
                    Log.DebugFormat("Metadata Event Receiver already added to list {0}", listConfig.Title);
                }
                setupList.Update();
                context.ExecuteQuery();
            }
        }
コード例 #8
0
        public SPOEventReceiverDefinition AddEventReceiver(EventReceiverDefinitionCreationInformation erdci)
        {
            SPOEventReceiverDefinition erd = new SPOEventReceiverDefinition(_web.EventReceivers.Add(erdci), _web.EventReceivers);

            _web.EventReceivers.Context.ExecuteQuery();
            return(erd);
        }
コード例 #9
0
ファイル: ListExtensions.cs プロジェクト: JohnKozell/PnP
        /// <summary>
        /// Registers a remote event receiver
        /// </summary>
        /// <param name="list">The list to process</param>
        /// <param name="name">The name of the event receiver (needs to be unique among the event receivers registered on this list)</param>
        /// <param name="url">The URL of the remote WCF service that handles the event</param>
        /// <param name="eventReceiverType"></param>
        /// <param name="synchronization"></param>
        /// <param name="force">If True any event already registered with the same name will be removed first.</param>
        /// <returns>Returns an EventReceiverDefinition if succeeded. Returns null if failed.</returns>
        public static EventReceiverDefinition AddRemoteEventReceiver(this List list, string name, string url, EventReceiverType eventReceiverType, EventReceiverSynchronization synchronization, bool force)
        {
            var query = from receiver
                     in list.EventReceivers
                        where receiver.ReceiverName == name
                        select receiver;
            list.Context.LoadQuery(query);
            list.Context.ExecuteQuery();

            var receiverExists = query.Any();
            if (receiverExists && force)
            {
                var receiver = query.FirstOrDefault();
                receiver.DeleteObject();
                list.Context.ExecuteQuery();
                receiverExists = false;
            }
            EventReceiverDefinition def = null;

            if (!receiverExists)
            {
                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                receiver.EventType = eventReceiverType;
                receiver.ReceiverUrl = url;
                receiver.ReceiverName = name;
                receiver.Synchronization = synchronization;
                def = list.EventReceivers.Add(receiver);
                list.Context.Load(def);
                list.Context.ExecuteQuery();
            }
            return def;
        }
コード例 #10
0
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            if (properties.EventType == SPRemoteEventType.AppInstalled)
            {
                using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, false))
                {
                    if (clientContext != null)
                    {
                        //Get reference to the host web list by itsname
                        var documentsList = clientContext.Web.Lists.GetByTitle("firstlist");
                        clientContext.Load(documentsList);
                        clientContext.ExecuteQuery();
                        string remoteUrl = "http://azurewebappname.azurewebsites.net/Services/RemoteEventReceiver1.svc";
                        //Create the remote event receiver definition
                        EventReceiverDefinitionCreationInformation newEventReceiver = new EventReceiverDefinitionCreationInformation()
                        {
                            EventType        = EventReceiverType.ItemAdded,
                            ReceiverAssembly = Assembly.GetExecutingAssembly().FullName,
                            ReceiverName     = "RemoteEventReceiver1",
                            ReceiverClass    = "RemoteEventReceiver1",
                            ReceiverUrl      = remoteUrl,
                            SequenceNumber   = 15000
                        };
                        //Add the remote event receiver to the host web list
                        documentsList.EventReceivers.Add(newEventReceiver);
                        clientContext.ExecuteQuery();
                    }
                }
            }
            else if (properties.EventType == SPRemoteEventType.AppUninstalling)
            {
                using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, false))
                {
                    var list = clientContext.Web.Lists.GetByTitle("firstlist");
                    clientContext.Load(list);
                    clientContext.ExecuteQuery();
                    EventReceiverDefinitionCollection erdc = list.EventReceivers;
                    clientContext.Load(erdc);
                    clientContext.ExecuteQuery();
                    List <EventReceiverDefinition> toDelete = new List <EventReceiverDefinition>();
                    foreach (EventReceiverDefinition erd in erdc)
                    {
                        if (erd.ReceiverName == "RemoteEventReceiver1")
                        {
                            toDelete.Add(erd);
                        }
                    }
                    //Delete the remote event receiver from the list, when the app gets uninstalled
                    foreach (EventReceiverDefinition item in toDelete)
                    {
                        item.DeleteObject();
                        clientContext.ExecuteQuery();
                    }
                }
            }
            return(result);
        }
コード例 #11
0
 /// <summary>
 /// Add a Remote Event Receiver to a List
 /// </summary>
 /// <param name="ctx">An Authenticated ClientContext</param>
 /// <param name="list">The list</param>
 /// <param name="eventReceiverInfo"><see cref="Microsoft.SharePoint.Client.EventReceiverDefinitionCreationInformation"/></param>
 public static void AddEventReceiver(ClientContext ctx, List list, EventReceiverDefinitionCreationInformation eventReceiverInfo)
 {
     if (!DoesEventReceiverExistByName(ctx, list, eventReceiverInfo.ReceiverName))
     {
         list.EventReceivers.Add(eventReceiverInfo);
         ctx.ExecuteQuery();
     }
 }
コード例 #12
0
ファイル: ReceiverHelper.cs プロジェクト: NicolajLarsen/PnP
 /// <summary>
 /// Add a Remote Event Receiver to a List
 /// </summary>
 /// <param name="ctx">An Authenticated ClientContext</param>
 /// <param name="list">The list</param>
 /// <param name="eventReceiverInfo"><see cref="Microsoft.SharePoint.Client.EventReceiverDefinitionCreationInformation"/></param>
 public static void AddEventReceiver(ClientContext ctx, List list, EventReceiverDefinitionCreationInformation eventReceiverInfo)
 {
     if (!DoesEventReceiverExistByName(ctx, list, eventReceiverInfo.ReceiverName))
     {
         list.EventReceivers.Add(eventReceiverInfo);
         ctx.ExecuteQuery();
     }
 }
コード例 #13
0
        public static EventReceiverDefinitionCreationInformation CreateEventReciever(string receiverName, EventReceiverType type)
        {
            EventReceiverDefinitionCreationInformation _rer = new EventReceiverDefinitionCreationInformation();

            _rer.EventType       = type;
            _rer.ReceiverName    = receiverName;
            _rer.ReceiverClass   = "ECM.AutoTaggingWeb.Services.AutoTaggingService";
            _rer.ReceiverUrl     = "https://localhost:44382/Services/AppEventReceiver.svc";
            _rer.Synchronization = EventReceiverSynchronization.Synchronous;
            return(_rer);
        }
コード例 #14
0
ファイル: ReceiverHelper.cs プロジェクト: NicolajLarsen/PnP
        /// <summary>
        /// Creates a Remote Event Receiver
        /// </summary>
        /// <param name="receiverName">The name of the remote event receiver</param>
        /// <param name="type"><see cref="Microsoft.SharePoint.Client.EventReceiverType"/></param>
        /// <returns><see cref="Microsoft.SharePoint.Client.EventReceiverDefinitionRemoCreationInformation"/></returns>
        public static EventReceiverDefinitionCreationInformation CreateEventReciever(string receiverName, EventReceiverType type)
        {

            EventReceiverDefinitionCreationInformation _rer = new EventReceiverDefinitionCreationInformation();
            _rer.EventType = type;
            _rer.ReceiverName = receiverName;
            _rer.ReceiverClass = "ECM.AutoTaggingWeb.Services.AutoTaggingService";
            _rer.ReceiverUrl = "https://amsecm.azurewebsites.net/Services/AutoTaggingService.svc";
            _rer.Synchronization = EventReceiverSynchronization.Synchronous;
            return _rer;
        }
コード例 #15
0
        /// <summary>
        /// Register the remote event receiver
        /// </summary>
        /// <param name="clientContext"></param>
        /// <param name="list"></param>
        /// <param name="name"></param>
        /// <param name="serviceUrl"></param>
        /// <param name="eventType"></param>
        /// <param name="sequence"></param>
        private void RegisterEventReceiver(ClientContext clientContext, List list, string name, string serviceUrl, EventReceiverType eventType, int sequence)
        {
            EventReceiverDefinitionCreationInformation newEventReceiver = new EventReceiverDefinitionCreationInformation()
            {
                EventType = eventType,
                ReceiverName = name,
                ReceiverUrl = serviceUrl,
                SequenceNumber = sequence
            };

            list.EventReceivers.Add(newEventReceiver);
            clientContext.ExecuteQuery();
        }
コード例 #16
0
        private void HandleAppInstalled(SPRemoteEventProperties properties)
        {
            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, false))
            {
                if (clientContext != null)
                {
                    List pdfList = clientContext.Web.Lists.GetByTitle(ListName);
                    clientContext.Load(pdfList, p => p.EventReceivers);
                    clientContext.ExecuteQuery();
                    foreach (var receiver in pdfList.EventReceivers.Where(receiver => receiver.ReceiverName == ReceiverNameAdded))
                    {
                        Trace.WriteLine("Found existing ItemAdded receiver at " + receiver.ReceiverUrl);
                        DeleteReceiver(clientContext, receiver);
                        break;
                    }
                    foreach (var receiver in pdfList.EventReceivers.Where(receiver => receiver.ReceiverName == ReceiverNameUpdated))
                    {
                        Trace.WriteLine("Found existing ItemAdded receiver at " + receiver.ReceiverUrl);
                        DeleteReceiver(clientContext, receiver);
                        break;
                    }

                    Message msg = OperationContext.Current.RequestContext.RequestMessage;
                    EventReceiverDefinitionCreationInformation receiverAdded =
                        new EventReceiverDefinitionCreationInformation
                    {
                        EventType       = EventReceiverType.ItemAdded,
                        ReceiverUrl     = msg.Headers.To.ToString(),
                        ReceiverName    = ReceiverNameAdded,
                        Synchronization = EventReceiverSynchronization.Synchronous
                    };
                    pdfList.EventReceivers.Add(receiverAdded);
                    clientContext.ExecuteQuery();
                    Trace.WriteLine("Added ItemAdded receiver at " + msg.Headers.To);

                    EventReceiverDefinitionCreationInformation receiverUpdating =
                        new EventReceiverDefinitionCreationInformation
                    {
                        EventType       = EventReceiverType.ItemUpdating,
                        ReceiverUrl     = msg.Headers.To.ToString(),
                        ReceiverName    = ReceiverNameUpdated,
                        Synchronization = EventReceiverSynchronization.Synchronous
                    };
                    pdfList.EventReceivers.Add(receiverUpdating);
                    clientContext.ExecuteQuery();
                    Trace.WriteLine("Added ItemUpdating receiver at " + msg.Headers.To);
                }
            }
        }
コード例 #17
0
 private static void AddEventReceiverToList(ClientContext clientContext, string listTitle, EventReceiverType eventType)
 {
     var list = clientContext.Web.Lists.GetByTitle(listTitle);
     var requestProperty = (HttpRequestMessageProperty)OperationContext.Current.IncomingMessageProperties[HttpRequestMessageProperty.Name];
     var appWebUrl = "https://" + requestProperty.Headers[HttpRequestHeader.Host];
     var receiverName = listTitle + "_" + eventType.ToString();
     var eventReceiver = new EventReceiverDefinitionCreationInformation();
     eventReceiver.EventType = eventType;
     eventReceiver.ReceiverName = receiverName;
     eventReceiver.ReceiverClass = receiverName;
     eventReceiver.ReceiverUrl = appWebUrl + "/Services/" + receiverName + ".svc";
     eventReceiver.SequenceNumber = 10000;
     list.EventReceivers.Add(eventReceiver);
     clientContext.ExecuteQuery();
     TraceHelper.RemoteLog("RER attached: " + receiverName);
 }
コード例 #18
0
        private void HandleAppInstalled(SPRemoteEventProperties properties)
        {
            using (ClientContext ctx = TokenHelper.CreateAppEventClientContext(properties, false))
            {
                if (ctx != null)
                {
                    //Add a list to the host web
                    List eventReceiverList = LabHelper.AddList(ctx, ctx.Web, Microsoft.SharePoint.Client.ListTemplateType.GenericList, ListName);

                    //Remove existing event handlers
                    ctx.Load(eventReceiverList, x => x.EventReceivers);
                    ctx.ExecuteQuery();
                    foreach (var rer in eventReceiverList.EventReceivers)
                    {
                        if (rer.ReceiverName == ReceiverName)
                        {
                            System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at " + rer.ReceiverUrl);
                            try
                            {
                                //This will fail when deploying via F5, but works when deployed to production
                                rer.DeleteObject();
                                ctx.ExecuteQuery();
                            }
                            catch (Exception ex)
                            {
                                System.Diagnostics.Trace.WriteLine(ex.Message);
                            }
                        }
                    }

                    //Get WCF URL where this message was handled
                    OperationContext op = OperationContext.Current;
                    Message msg = op.RequestContext.RequestMessage;
                    
                    //Create a new event receiver
                    EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                    receiver.EventType = EventReceiverType.ItemAdded;
                    receiver.ReceiverUrl = msg.Headers.To.ToString();
                    receiver.ReceiverName = ReceiverName;
                    receiver.Synchronization = EventReceiverSynchronization.Synchronous;

                    //Add the new event receiver to a list in the host web
                    eventReceiverList.EventReceivers.Add(receiver);
                    ctx.ExecuteQuery();
                }
            }
        }
コード例 #19
0
        private void HandleAppInstalled(SPRemoteEventProperties properties)
        {
            using (ClientContext ctx = TokenHelper.CreateAppEventClientContext(properties, false))
            {
                if (ctx != null)
                {
                    //Add a list to the host web
                    List eventReceiverList = LabHelper.AddList(ctx, ctx.Web, Microsoft.SharePoint.Client.ListTemplateType.GenericList, ListName);

                    //Remove existing event handlers
                    ctx.Load(eventReceiverList, x => x.EventReceivers);
                    ctx.ExecuteQuery();
                    foreach (var rer in eventReceiverList.EventReceivers)
                    {
                        if (rer.ReceiverName == ReceiverName)
                        {
                            System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at " + rer.ReceiverUrl);
                            try
                            {
                                //This will fail when deploying via F5, but works when deployed to production
                                rer.DeleteObject();
                                ctx.ExecuteQuery();
                            }
                            catch (Exception ex)
                            {
                                System.Diagnostics.Trace.WriteLine(ex.Message);
                            }
                        }
                    }

                    //Get WCF URL where this message was handled
                    OperationContext op  = OperationContext.Current;
                    Message          msg = op.RequestContext.RequestMessage;

                    //Create a new event receiver
                    EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                    receiver.EventType       = EventReceiverType.ItemAdded;
                    receiver.ReceiverUrl     = msg.Headers.To.ToString();
                    receiver.ReceiverName    = ReceiverName;
                    receiver.Synchronization = EventReceiverSynchronization.Synchronous;

                    //Add the new event receiver to a list in the host web
                    eventReceiverList.EventReceivers.Add(receiver);
                    ctx.ExecuteQuery();
                }
            }
        }
コード例 #20
0
ファイル: AppEventReceiver.svc.cs プロジェクト: arzumy/sdk
        private static void AddEventReceiverToList(ClientContext clientContext, string listTitle, EventReceiverType eventType)
        {
            var list            = clientContext.Web.Lists.GetByTitle(listTitle);
            var requestProperty = (HttpRequestMessageProperty)OperationContext.Current.IncomingMessageProperties[HttpRequestMessageProperty.Name];
            var appWebUrl       = "https://" + requestProperty.Headers[HttpRequestHeader.Host];
            var receiverName    = listTitle + "_" + eventType.ToString();
            var eventReceiver   = new EventReceiverDefinitionCreationInformation();

            eventReceiver.EventType      = eventType;
            eventReceiver.ReceiverName   = receiverName;
            eventReceiver.ReceiverClass  = receiverName;
            eventReceiver.ReceiverUrl    = appWebUrl + "/Services/" + receiverName + ".svc";
            eventReceiver.SequenceNumber = 10000;
            list.EventReceivers.Add(eventReceiver);
            clientContext.ExecuteQuery();
            TraceHelper.RemoteLog("RER attached: " + receiverName);
        }
コード例 #21
0
        private static bool ContainsECMRecordEventReceiver(EventReceiverDefinitionCreationInformation receiverToAdd, List <EventReceiverDefinition> currentEventReceivers)
        {
            foreach (var eventReceiver in currentEventReceivers)
            {
                if (eventReceiver.EventType.Equals(receiverToAdd.EventType) &&
                    eventReceiver.ReceiverAssembly.Equals(receiverToAdd.ReceiverAssembly) &&
                    eventReceiver.ReceiverClass.Equals(receiverToAdd.ReceiverClass) &&
                    eventReceiver.ReceiverName.Equals(receiverToAdd.ReceiverName) &&
                    eventReceiver.SequenceNumber.Equals(receiverToAdd.SequenceNumber) &&
                    eventReceiver.Synchronization.Equals(receiverToAdd.Synchronization))
                {
                    return(true);
                }
            }

            return(false);
        }
コード例 #22
0
ファイル: RERUtility.cs プロジェクト: stebra-consulting/Peter
  public static void AddListItemRemoteEventReceiver(ClientContext context, string listName, EventReceiverType eventType,
 EventReceiverSynchronization synchronization, string receiverName,
 string receiverUrl, int sequence, string receiverAssemblyName = "", string receiverClassName = "")
  {
      var list = context.Web.Lists.GetByTitle(listName);
      context.Load(list);
      var eventReceivers = list.EventReceivers;
      context.Load(eventReceivers);
      context.ExecuteQuery();
      var newRER = new EventReceiverDefinitionCreationInformation();
      newRER.EventType = eventType;
      newRER.ReceiverName = receiverName;
      newRER.ReceiverClass = receiverClassName;
      newRER.ReceiverAssembly = receiverAssemblyName;
      newRER.ReceiverUrl = receiverUrl;
      newRER.Synchronization = synchronization;
      newRER.SequenceNumber = sequence;
      list.EventReceivers.Add(newRER);
      list.Update();
      context.ExecuteQuery();
  }
コード例 #23
0
 public void Bind(ClientContext clientContext,
                  string listName,
                  string eventRecieverName,
                  string remoteUrl,
                  int sequencyId,
                  EventReceiverType eventType)
 {
     try
     {
         List olist = clientContext.Web.Lists.GetByTitle(listName);
         clientContext.Load(olist, o => o.EventReceivers);
         clientContext.ExecuteQuery();
         bool isReRExsist = false;
         foreach (var receiver in olist.EventReceivers)
         {
             if (receiver.ReceiverName == eventRecieverName)
             {
                 isReRExsist = true;
                 break;
             }
         }
         if (!isReRExsist)
         {
             EventReceiverDefinitionCreationInformation eventReDefCreation = new EventReceiverDefinitionCreationInformation()
             {
                 EventType        = eventType,
                 ReceiverAssembly = Assembly.GetExecutingAssembly().FullName,
                 ReceiverName     = eventRecieverName,
                 ReceiverClass    = eventRecieverName,
                 ReceiverUrl      = remoteUrl,
                 SequenceNumber   = sequencyId
             };
             olist.EventReceivers.Add(eventReDefCreation);
             clientContext.ExecuteQuery();
         }
     }
     catch (Exception ex)
     {
     }
 }
コード例 #24
0
ファイル: AppEventReceiver.svc.cs プロジェクト: CherifSy/PnP
        private void HandleAppInstalled(SPRemoteEventProperties properties)
        {
            using (ClientContext cc = TokenHelper.CreateAppEventClientContext(properties, false))
            {
                if (cc != null)
                {
                    bool rerExists = false;
                    cc.Load(cc.Web.EventReceivers);
                    cc.ExecuteQuery();

                    foreach (var rer in cc.Web.EventReceivers)
                    {
                        if (rer.ReceiverName == RECEIVER_NAME)
                        {
                            rerExists = true;
                            System.Diagnostics.Trace.WriteLine("Found existing ListAdded receiver at " + rer.ReceiverUrl);
                        }
                    }

                    if (!rerExists)
                    {
                        EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                        receiver.EventType = EventReceiverType.ListAdded;

                        //Get WCF URL where this message was handled
                        OperationContext op = OperationContext.Current;
                        Message msg = op.RequestContext.RequestMessage;
                        receiver.ReceiverUrl = msg.Headers.To.ToString();
                        receiver.ReceiverName = RECEIVER_NAME;
                        receiver.Synchronization = EventReceiverSynchronization.Synchronous;

                        cc.Web.EventReceivers.Add(receiver);
                        cc.ExecuteQuery();
                        System.Diagnostics.Trace.WriteLine("Added ListAdded receiver at " + msg.Headers.To.ToString());
                    }

                }
            }
        }
コード例 #25
0
        public SPOEventReceiverDefinition AddEventReceiver(
            EventReceiverType eventType,
            string receiverAssembly,
            string receiverClass,
            string receiverName,
            string receiverUrl,
            int sequenceNumber,
            EventReceiverSynchronization synchronization)
        {
            EventReceiverDefinitionCreationInformation erdci = new EventReceiverDefinitionCreationInformation
            {
                EventType        = eventType,
                ReceiverAssembly = receiverAssembly,
                ReceiverClass    = receiverClass,
                ReceiverName     = receiverName,
                ReceiverUrl      = receiverUrl,
                SequenceNumber   = sequenceNumber,
                Synchronization  = synchronization
            };

            return(AddEventReceiver(erdci));
        }
コード例 #26
0
        public static void AddEventReceivers(List list, string receiverName, string receiverUrl)
        {
            ClientContext context = (ClientContext)list.Context;

            string receiverAssembly = Assembly.GetExecutingAssembly().FullName;
            EventReceiverDefinitionCollection eventReceivers = list.EventReceivers;
            string receiverClass = RECEIVERCLASSPREFIX + receiverName;

            EventReceiverDefinitionCreationInformation updatedEventReceiver = new EventReceiverDefinitionCreationInformation()
            {
                ReceiverAssembly = receiverAssembly,
                ReceiverName     = receiverName,
                ReceiverClass    = receiverClass,
                ReceiverUrl      = receiverUrl,
                SequenceNumber   = 1000,
                EventType        = EventReceiverType.ItemUpdated
            };

            context.Load(eventReceivers);
            context.ExecuteQuery();
            list.EventReceivers.Add(updatedEventReceiver);
            context.ExecuteQuery();

            EventReceiverDefinitionCreationInformation addedEventReceiver = new EventReceiverDefinitionCreationInformation()
            {
                ReceiverAssembly = receiverAssembly,
                ReceiverName     = receiverName,
                ReceiverClass    = receiverClass,
                ReceiverUrl      = receiverUrl,
                SequenceNumber   = 1000,
                EventType        = EventReceiverType.ItemAdded
            };

            context.Load(eventReceivers);
            context.ExecuteQuery();
            list.EventReceivers.Add(addedEventReceiver);
            context.ExecuteQuery();
        }
コード例 #27
0
        public void AssociateRemoteEventsToHostWeb(ClientContext clientContext)
        {
            var rerList = clientContext.Web.Lists.GetByTitle(LIST_TITLE);

            clientContext.Load(rerList);
            clientContext.ExecuteQuery();

            bool rerExists = false;

            if (!rerExists)
            {
                //Get WCF URL where this message was handled
                OperationContext op  = OperationContext.Current;
                Message          msg = op.RequestContext.RequestMessage;

                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();

                receiver.EventType       = EventReceiverType.ItemAdded;
                receiver.ReceiverUrl     = msg.Headers.To.ToString();
                receiver.ReceiverName    = EventReceiverType.ItemAdded.ToString();
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;
                receiver.SequenceNumber  = 400;
                rerList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();
                System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + receiver.ReceiverUrl);

                receiver                 = new EventReceiverDefinitionCreationInformation();
                receiver.EventType       = EventReceiverType.ItemUpdated;
                receiver.ReceiverUrl     = msg.Headers.To.ToString();
                receiver.ReceiverName    = EventReceiverType.ItemUpdated.ToString();
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;
                receiver.SequenceNumber  = 400;
                rerList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();

                System.Diagnostics.Trace.WriteLine("Added ItemUpdated receiver at " + receiver.ReceiverUrl);
            }
        }
コード例 #28
0
 private void ProvisionNewServiceDeskRequestList()
 {
     using (var ctx = SPClientContext.Instance.GetContext())
     {
         Web  site       = ctx.Web;
         List targetList = site.Lists.GetByTitle("ServiceDesk Requests");
         try
         {
             ctx.Load(targetList);
             ctx.ExecuteQuery();
         }
         catch (Exception ex)
         {
             ListCreationInformation listCreationInfo = new ListCreationInformation();
             listCreationInfo.Title        = "ServiceDesk Requests";
             listCreationInfo.TemplateType = (int)ListTemplateType.GenericList;
             List oList = site.Lists.Add(listCreationInfo);
             ctx.ExecuteQuery();
             oList.Fields.AddFieldAsXml("<Field DisplayName='Subject' Type='Text' />", true, AddFieldOptions.AddFieldToDefaultView);
             oList.Fields.AddFieldAsXml("<Field DisplayName='Body' Type='Note' />", true, AddFieldOptions.AddFieldToDefaultView);
             oList.Fields.AddFieldAsXml("<Field DisplayName='From' Type='User' List='UserInfo' />", true, AddFieldOptions.AddFieldToDefaultView);
             ctx.ExecuteQuery();
             var eventRecievers = oList.EventReceivers;
             ctx.Load(eventRecievers);
             ctx.ExecuteQuery();
             EventReceiverDefinitionCreationInformation eventReceiverInfo = new EventReceiverDefinitionCreationInformation();
             eventReceiverInfo.EventType        = EventReceiverType.ItemAdded;
             eventReceiverInfo.ReceiverClass    = typeof(NewServiceDeskRequest).FullName;
             eventReceiverInfo.ReceiverName     = "NewServiceDeskRequest Created";
             eventReceiverInfo.ReceiverUrl      = $"{ConfigurationManager.AppSettings["RemoteWebUrl"]}/Services/NewServiceDeskRequest.svc";
             eventReceiverInfo.SequenceNumber   = 1001;
             eventReceiverInfo.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
             oList.EventReceivers.Add(eventReceiverInfo);
             oList.Update();
             ctx.ExecuteQuery();
         }
     }
 }
コード例 #29
0
        private void AttachEventHandler(string handlerEndpoint, List list, string name, EventReceiverType receiverType,
                                        ClientContext clientContext)
        {
            clientContext.Load(list, l => l.Title, l => l.EventReceivers.Include(e => e.ReceiverName));
            clientContext.ExecuteQueryRetry();

            var handlersToDelete = new List <EventReceiverDefinition>();

            foreach (var eventReciever in list.EventReceivers)
            {
                if (eventReciever.ReceiverName == name)
                {
                    handlersToDelete.Add(eventReciever);
                }
            }
            if (handlersToDelete.Count > 0)
            {
                foreach (var eventReceiverDefinition in handlersToDelete)
                {
                    eventReceiverDefinition.DeleteObject();
                }
                clientContext.ExecuteQueryRetry();
            }

            var eventReceiver = new EventReceiverDefinitionCreationInformation
            {
                EventType       = receiverType,
                ReceiverName    = name,
                ReceiverUrl     = handlerEndpoint,
                SequenceNumber  = 10000,
                Synchronization = EventReceiverSynchronization.DefaultSynchronization
            };

            list.EventReceivers.Add(eventReceiver);
            OnNotify(ProvisioningNotificationLevels.Verbose,
                     "Attaching remote event handler to list " + list.Title + " | " + name);
        }
コード例 #30
0
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, false))
            {
                if (clientContext != null)
                {
                    clientContext.Load(clientContext.Web);
                    clientContext.ExecuteQuery();

                    var requestProperty = (System.ServiceModel.Channels.HttpRequestMessageProperty)System.ServiceModel.OperationContext.Current.IncomingMessageProperties[System.ServiceModel.Channels.HttpRequestMessageProperty.Name];
                    string opContext = System.ServiceModel.OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri.Substring(0, System.ServiceModel.OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri.LastIndexOf("/"));
                    string remoteUrl = string.Format("{0}/CreateSite.svc", opContext);
                    //string remoteUrl = string.Format("{0}/CreateSite2.svc", System.ServiceModel.OperationContext.Current.Channel.LocalAddress.Uri.DnsSafeHost + "/services");
                    var appWebUrl = "https://" + requestProperty.Headers[System.Net.HttpRequestHeader.Host];

                    List createSiteRequests = clientContext.Web.Lists.GetByTitle("SiteCreationRequests");
                    if (properties.EventType == SPRemoteEventType.AppInstalled)
                    {
                        EventReceiverDefinitionCreationInformation newEventReceiver = new EventReceiverDefinitionCreationInformation()
                        {
                            EventType = EventReceiverType.ItemUpdated,
                            ReceiverName = "CreateSite",
                            ReceiverUrl = remoteUrl,
                            SequenceNumber = 1000 //Should be higher number if lower priority, particularly for async events
                        };
                        createSiteRequests.EventReceivers.Add(newEventReceiver);
                        clientContext.ExecuteQuery();
                    }

                }

            }

            return result;
        }
コード例 #31
0
        /// <summary>
        /// Used to create a library & Rer for ItemAdded
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnScenario2_Click(object sender, EventArgs e)
        {
            var _libraryToCreate = this.GetLibaryInformationItemAdded();

            var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);

            using (var ctx = spContext.CreateUserClientContextForSPHost())
            {
                try
                {
                    if (!ctx.Web.ListExists(_libraryToCreate.Title))
                    {
                        ScenarioHandler _scenario = new ScenarioHandler();
                        _scenario.CreateContosoDocumentLibrary(ctx, _libraryToCreate);
                    }
                    List _list = ctx.Web.Lists.GetByTitle(_libraryToCreate.Title);
                    EventReceiverDefinitionCreationInformation _rec = ReceiverHelper.CreateEventReciever(ScenarioHandler.AUTOTAGGING_ITEM_ADDED_RERNAME, EventReceiverType.ItemAdded);
                    ReceiverHelper.AddEventReceiver(ctx, _list, _rec);
                }
                catch (Exception)
                {
                }
            }
        }
コード例 #32
0
        public void AddEventRecieverToWorkflow(string listName)
        {
            var  context = SPClientContext.Instance.GetContext();
            Web  site    = context.Web;
            List serviceMarketingList = site.Lists.GetByTitle(listName);

            context.Load(serviceMarketingList.EventReceivers);
            context.ExecuteQuery();
            bool eventAlreadyExists = serviceMarketingList.EventReceivers.Any(eventReceiver => eventReceiver.ReceiverName.Equals("Workflow Updated"));

            if (!eventAlreadyExists)
            {
                EventReceiverDefinitionCreationInformation eventReceiverInfo = new EventReceiverDefinitionCreationInformation();
                eventReceiverInfo.EventType        = EventReceiverType.ItemUpdated;
                eventReceiverInfo.ReceiverClass    = typeof(WorkflowService).FullName;
                eventReceiverInfo.ReceiverName     = "Workflow Updated";
                eventReceiverInfo.ReceiverUrl      = $"{ConfigurationManager.AppSettings["RemoteWebUrl"]}/Services/WorkflowService.svc";
                eventReceiverInfo.SequenceNumber   = 1001;
                eventReceiverInfo.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
                serviceMarketingList.EventReceivers.Add(eventReceiverInfo);
                serviceMarketingList.Update();
                context.ExecuteQuery();
            }
        }
コード例 #33
0
        public void AssociateRemoteEventsToHostWeb(ClientContext clientContext)
        {
            var rerList = clientContext.Web.Lists.GetByTitle(LIST_TITLE);
            clientContext.Load(rerList);
            clientContext.ExecuteQuery();

            bool rerExists = false;
            if (!rerExists)
            {
                //Get WCF URL where this message was handled
                OperationContext op = OperationContext.Current;
                Message msg = op.RequestContext.RequestMessage;

                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();

                receiver.EventType = EventReceiverType.ItemAdding;
                receiver.ReceiverUrl = msg.Headers.To.ToString();
                receiver.ReceiverName = EventReceiverType.ItemAdding.ToString();
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;
                receiver.SequenceNumber = 350;
                rerList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();
                System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + receiver.ReceiverUrl);

                receiver = new EventReceiverDefinitionCreationInformation();
                receiver.EventType = EventReceiverType.ItemUpdated;
                receiver.ReceiverUrl = msg.Headers.To.ToString();
                receiver.ReceiverName = EventReceiverType.ItemUpdated.ToString();
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;
                receiver.SequenceNumber = 350;
                rerList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();

                System.Diagnostics.Trace.WriteLine("Added ItemUpdated receiver at " + receiver.ReceiverUrl);
            }
        }
コード例 #34
0
    static public void CreateAnnouncementsList(ClientContext clientContext)
    {
        string listTitle = "Announcements";

        // delete list if it exists
        ExceptionHandlingScope scope = new ExceptionHandlingScope(clientContext);

        using (scope.StartScope()) {
            using (scope.StartTry()) {
                clientContext.Web.Lists.GetByTitle(listTitle).DeleteObject();
            }
            using (scope.StartCatch()) { }
        }

        // create and initialize ListCreationInformation object
        ListCreationInformation listInformation = new ListCreationInformation();

        listInformation.Title             = listTitle;
        listInformation.Url               = "Lists/Announcements";
        listInformation.QuickLaunchOption = QuickLaunchOptions.On;
        listInformation.TemplateType      = (int)ListTemplateType.Announcements;

        // Add ListCreationInformation to lists collection and return list object
        List list = clientContext.Web.Lists.Add(listInformation);

        // modify additional list properties and update
        list.OnQuickLaunch     = true;
        list.EnableAttachments = false;
        list.Update();

        // send command to server to create list
        clientContext.ExecuteQuery();

        clientContext.Load(list);
        clientContext.ExecuteQuery();

        string urlEventReceiver = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +
                                  @"/Services/AnnouncementsEventReceiver.svc";

        EventReceiverDefinitionCreationInformation erci1 = new EventReceiverDefinitionCreationInformation();

        erci1.ReceiverName   = "ItemAdding";
        erci1.EventType      = EventReceiverType.ItemAdding;
        erci1.ReceiverUrl    = urlEventReceiver;
        erci1.SequenceNumber = 1000;
        EventReceiverDefinition er1 = list.EventReceivers.Add(erci1);

        er1.Update();

        EventReceiverDefinitionCreationInformation erci2 = new EventReceiverDefinitionCreationInformation();

        erci2.ReceiverName   = "ItemUpdating";
        erci2.EventType      = EventReceiverType.ItemUpdating;
        erci2.ReceiverUrl    = urlEventReceiver;
        erci2.SequenceNumber = 1000;
        EventReceiverDefinition er2 = list.EventReceivers.Add(erci2);

        er2.Update();

        clientContext.ExecuteQuery();

        ListItemCreationInformation lici = new ListItemCreationInformation();

        var item1 = list.AddItem(lici);

        item1["Title"]   = "SharePoint introduces new app model";
        item1["Body"]    = "<div>Developers wonder what happened to solutions.</div>";
        item1["Expires"] = DateTime.Today.AddYears(10);
        item1.Update();

        var item2 = list.AddItem(lici);

        item2["Title"]   = "All SharePoint developers must now learn JavaScript";
        item2["Body"]    = "<div>Some developers are more excited than others.</div>";
        item2["Expires"] = DateTime.Today.AddYears(1);
        item2.Update();

        var item3 = list.AddItem(lici);

        item3["Title"]   = "CSOM programming is super fun";
        item3["Body"]    = "<div>Just ask my mom.</div>";
        item3["Expires"] = DateTime.Today.AddDays(7);
        item3.Update();

        clientContext.ExecuteQuery();
    }
コード例 #35
0
        public void AssociateRemoteEventsToHostWeb(ClientContext clientContext)
        {
            //Add Push Notification Feature to HostWeb
            //Not required here, just a demonstration that you
            //can activate features.
            clientContext.Web.Features.Add(
                new Guid("41e1d4bf-b1a2-47f7-ab80-d5d6cbba3092"),
                true, FeatureDefinitionScope.None);


            //Get the Title and EventReceivers lists
            clientContext.Load(clientContext.Web.Lists,
                               lists => lists.Include(
                                   list => list.Title,
                                   list => list.EventReceivers).Where
                                   (list => list.Title == LIST_TITLE));

            clientContext.ExecuteQuery();

            List jobsList = clientContext.Web.Lists.FirstOrDefault();

#if (DEBUG)
            // In debug mode we will delete the existing list, so we prevent our system from orphaned event receicers.
            // RemoveEventReceiversFromHostWeb is sometimes not called in debug mode and/or the app id has changed.
            // On RER registration SharePoint adds the app id to the event registration information, and you are only able
            // to remove the event with the same app where it was registered. Also note that you would need to completely
            // uninstall an app before SharePoint will trigger the appuninstalled event. From the documentation:
            // The **AppUninstalling** event only fires when a user completely removes the add-in: the add-in needs to be deleted
            // from the site recycle bins in an end-user scenario. In a development scenario the add-in needs to be removed from
            // the “Apps in testing” library.

            if (null != jobsList)
            {
                jobsList.DeleteObject();
                clientContext.ExecuteQuery();
                jobsList = null;
            }
#endif

            bool rerExists = false;
            if (null == jobsList)
            {
                //List does not exist, create it
                jobsList = CreateJobsList(clientContext);
            }
            else
            {
                foreach (var rer in jobsList.EventReceivers)
                {
                    if (rer.ReceiverName == RECEIVER_NAME)
                    {
                        rerExists = true;
                        System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at "
                                                           + rer.ReceiverUrl);
                    }
                }
            }

            if (!rerExists)
            {
                EventReceiverDefinitionCreationInformation receiver =
                    new EventReceiverDefinitionCreationInformation();
                receiver.EventType = EventReceiverType.ItemAdded;

                //Get WCF URL where this message was handled
                OperationContext op  = OperationContext.Current;
                Message          msg = op.RequestContext.RequestMessage;
                receiver.ReceiverUrl = msg.Headers.To.ToString();

                receiver.ReceiverName    = RECEIVER_NAME;
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;

                //Add the new event receiver to a list in the host web
                jobsList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();

                System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + receiver.ReceiverUrl);
            }
        }
コード例 #36
0
        public static EventReceiverDefinition RegisterEventReceiver(List list, string name, string url, EventReceiverType eventReceiverType, EventReceiverSynchronization synchronization, bool force, ClientContext clientContext)
        {
            clientContext.Load(list.EventReceivers);

            clientContext.ExecuteQuery();

            bool receiverExists = false;
            foreach (var receiver in list.EventReceivers)
            {
                if (receiver.ReceiverName == name)
                {
                    receiverExists = true;
                    if (force)
                    {
                        receiver.DeleteObject();
                        clientContext.ExecuteQuery();
                        receiverExists = false;
                    }
                }
            }
            EventReceiverDefinition def = null;
            if (!receiverExists)
            {
                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                receiver.EventType = eventReceiverType;
                receiver.ReceiverUrl = url;
                receiver.ReceiverName = name;
                receiver.Synchronization = synchronization;
                def = list.EventReceivers.Add(receiver);
                clientContext.Load(def);
                clientContext.ExecuteQuery();
            }
            return def;
        }
コード例 #37
0
        private static bool ContainsECMRecordEventReceiver(EventReceiverDefinitionCreationInformation receiverToAdd, List<EventReceiverDefinition> currentEventReceivers)
        {
            foreach(EventReceiverDefinition eventReceiver in currentEventReceivers)
            {
                if (eventReceiver.EventType.Equals(receiverToAdd.EventType) &&
                    eventReceiver.ReceiverAssembly.Equals(receiverToAdd.ReceiverAssembly) &&
                    eventReceiver.ReceiverClass.Equals(receiverToAdd.ReceiverClass) &&
                    eventReceiver.ReceiverName.Equals(receiverToAdd.ReceiverName) &&
                    eventReceiver.SequenceNumber.Equals(receiverToAdd.SequenceNumber) &&
                    eventReceiver.Synchronization.Equals(receiverToAdd.Synchronization))
                {
                    return true;
                }
            }

            return false;
        }
        private static void RegisterExpectedShipmentsEventHandler(HttpRequest request)
        {
            using (var clientContext = sPContext.CreateUserClientContextForSPHost())
            {
                var query = from list in clientContext.Web.Lists
                            where list.Title == "Expected Shipments"
                            select list;
                IEnumerable<List> matchingLists = clientContext.LoadQuery(query);
                clientContext.ExecuteQuery();

                List expectedShipmentsList = matchingLists.Single();

                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                receiver.ReceiverName = "ExpectedShipmentsItemUpdated";
                receiver.EventType = EventReceiverType.ItemUpdated;

            #if DEBUG
                receiver.ReceiverUrl = WebConfigurationManager.AppSettings["RERdebuggingServiceBusUrl"].ToString();
            #else
                receiver.ReceiverUrl = "https://" + request.Headers["Host"] + "/Services/RemoteEventReceiver1.svc";
            #endif

                expectedShipmentsList.EventReceivers.Add(receiver);

                clientContext.ExecuteQuery();
            }
        }
        public void AssociateRemoteEventsToHostWeb(ClientContext clientContext)
        {
            try
            {
                //Getting Host Web
                var hostWeb = clientContext.Web;
                clientContext.Load(hostWeb);

                //Getting event receivers on the web
                clientContext.Load(hostWeb.EventReceivers);
                clientContext.ExecuteQuery();

                bool rerExists = false;
                if(null != hostWeb && hostWeb.EventReceivers.Count > 0)
                {
                    foreach(var rer in hostWeb.EventReceivers)
                    {
                        if(rer.ReceiverName == RECEIVER_NAME)
                        {
                            rerExists = true;
                            System.Diagnostics.Trace.WriteLine("Found existing event receiver at " + rer.ReceiverUrl);
                            break;
                        }
                    }
                }
                if(!rerExists)
                {
                    //registering ListAdding event on the web
                    EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();

                    receiver.EventType = EventReceiverType.ListAdded;
                    //Get WCF URL where this message was handled
                    OperationContext op = OperationContext.Current;
                    Message msg = op.RequestContext.RequestMessage;
                    receiver.ReceiverUrl = msg.Headers.To.ToString();
                    receiver.ReceiverName = RECEIVER_NAME;
                    receiver.Synchronization = EventReceiverSynchronization.Asynchronous;
                    hostWeb.EventReceivers.Add(receiver);
                    clientContext.ExecuteQuery();

                    System.Diagnostics.Trace.WriteLine("Added ListAdded event at " + receiver.ReceiverUrl);
                }
            }
            catch (Exception ex)
            {

            }
            //get the title and event receiver list
            /*clientContext.Load(clientContext.Web.Lists,
                lists => lists.Include(list => list.Title, list => list.EventReceivers)
                    .Where(list => list.Title == LIST_TITLE));

            clientContext.ExecuteQuery();

            List targetList = clientContext.Web.Lists.FirstOrDefault();

            bool rerExists = false;
            if( null != targetList)
            {
                foreach(var rer in targetList.EventReceivers)
                {
                    if(rer.ReceiverName == RECEIVER_NAME)
                    {
                        rerExists = true;
                        System.Diagnostics.Trace.WriteLine("Found existing event receiver at " + rer.ReceiverUrl);
                    }
                }
            }
            if(!rerExists)
            {
                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();

                receiver.EventType = EventReceiverType.ItemAdding;
                //Get WCF URL where this message was handled
                OperationContext op = OperationContext.Current;
                Message msg = op.RequestContext.RequestMessage;

                receiver.ReceiverUrl = msg.Headers.To.ToString();
                receiver.ReceiverName = RECEIVER_NAME;
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;
                targetList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();

                System.Diagnostics.Trace.WriteLine("Added ItemAdding event at " + receiver.ReceiverUrl);
            }*/
        }
コード例 #40
0
 public SPOEventReceiverDefinition AddEventReceiver(
     EventReceiverType eventType,
     string receiverAssembly,
     string receiverClass,
     string receiverName,
     string receiverUrl,
     int sequenceNumber,
     EventReceiverSynchronization synchronization)
 {
     EventReceiverDefinitionCreationInformation erdci = new EventReceiverDefinitionCreationInformation
     {
         EventType = eventType,
         ReceiverAssembly = receiverAssembly,
         ReceiverClass = receiverClass,
         ReceiverName = receiverName,
         ReceiverUrl = receiverUrl,
         SequenceNumber = sequenceNumber,
         Synchronization = synchronization
     };
     return AddEventReceiver(erdci);
 }
コード例 #41
0
 public SPOEventReceiverDefinition AddEventReceiver(EventReceiverDefinitionCreationInformation erdci)
 {
     SPOEventReceiverDefinition erd = new SPOEventReceiverDefinition(_web.EventReceivers.Add(erdci), _web.EventReceivers);
     _web.EventReceivers.Context.ExecuteQuery();
     return erd;
 }
コード例 #42
0
        private void HandleAppInstalled(SPRemoteEventProperties properties)
        {
            using (ClientContext clientContext =
                       TokenHelper.CreateAppEventClientContext(properties, false))
            {
                if (clientContext != null)
                {
                    //Check for fields that need adding
                    Web rootWeb = clientContext.Site.RootWeb;
                    clientContext.Load(rootWeb, w => w.Fields);
                    clientContext.ExecuteQuery();
                    ListCreationInformation listCreationInfo = new ListCreationInformation();
                    listCreationInfo.Title        = ListHtmlToPdf;
                    listCreationInfo.TemplateType = (int)ListTemplateType.GenericList;

                    List oList = rootWeb.Lists.Add(listCreationInfo);
                    clientContext.ExecuteQuery();
                    //Title included by default.
                    //Field for HTML
                    Field oField = oList.Fields.AddFieldAsXml("<Field DisplayName='HtmlToConvert' Name='HtmlToConvert' Type='Note' RichText='FALSE' />",
                                                              true, AddFieldOptions.AddFieldInternalNameHint);
                    //Field for FileName for resulting PDF
                    oField = oList.Fields.AddFieldAsXml("<Field DisplayName='DocFileName' Name='DocFileName' Type='Text'  />",
                                                        true, AddFieldOptions.AddFieldInternalNameHint);
                    //Field for doc library name for resulting PDF
                    oField = oList.Fields.AddFieldAsXml("<Field DisplayName='DocLibraryName' Name='DocLibraryName' Type='Text'  />",
                                                        true, AddFieldOptions.AddFieldInternalNameHint);
                    //Field for folder name for resulting PDF
                    oField = oList.Fields.AddFieldAsXml("<Field DisplayName='FolderName' Name='FolderName' Type='Text'  />",
                                                        true, AddFieldOptions.AddFieldInternalNameHint);
                    //Field for metadata
                    oField = oList.Fields.AddFieldAsXml("<Field DisplayName='DocMetaData' Name='DocMetaData' Description='Name value pairs' Type='Note' RichText='FALSE' />",
                                                        true, AddFieldOptions.AddFieldInternalNameHint);
                    //Field for PDF options
                    oField = oList.Fields.AddFieldAsXml("<Field DisplayName='ConversionOptions' Name='ConversionOptions' Description='Bitwise numeric value' Type='Number' />",
                                                        true, AddFieldOptions.AddFieldInternalNameHint);
                    //Field for error if conversion fails
                    oField = oList.Fields.AddFieldAsXml("<Field DisplayName='ErrorMessage' Name='ErrorMessage' Type='Note' RichText='FALSE' />",
                                                        true, AddFieldOptions.AddFieldInternalNameHint);
                    clientContext.ExecuteQuery();

                    //Add event receiver

                    EventReceiverDefinitionCreationInformation receiver = null;
                    receiver = new EventReceiverDefinitionCreationInformation
                    {
                        EventType       = EventReceiverType.ItemAdded,
                        Synchronization = EventReceiverSynchronization.Asynchronous
                    };
                    OperationContext op  = OperationContext.Current;
                    Message          msg = op.RequestContext.RequestMessage;

                    receiver.ReceiverUrl = msg.Headers.To.ToString();

                    receiver.ReceiverName = ListHtmlToPdf + "-ListItemAddedEvent";
                    oList.EventReceivers.Add(receiver);

                    clientContext.ExecuteQuery();

                    System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at "
                                                       + msg.Headers.To.ToString());
                }
            }
        }
コード例 #43
0
        private void CreateSiteRequestList(ClientContext ctx)
        {
            bool rerExists = false;
            var web = ctx.Web;

            ctx.Load(ctx.Web.Lists,
                    lists => lists.Include(
                    list => list.Title,
                     list => list.EventReceivers).Where
                (list => list.Title == Lists.SiteRepositoryTitle));
            ctx.ExecuteQuery();

            List requestList = ctx.Web.Lists.FirstOrDefault();
            if(requestList == null)
            {
                var newList = new ListCreationInformation()
                {
                    Title = Lists.SiteRepositoryTitle,
                    Description = Lists.SiteRepositoryDesc,
                    TemplateType = (int)ListTemplateType.GenericList,
                    Url = Lists.SiteRepositoryUrl
                };
                requestList = ctx.Web.Lists.Add(newList);
                ctx.Load(requestList);
                ctx.ExecuteQuery();

                // add fields (replace the second field with the display name
                AddFieldAsXml(requestList, SiteRequestFields.Description, SiteRequestFields.DescriptionDisplayName, SiteRequestFields.DescriptionId, "Note", options: AddFieldOptions.AddFieldCheckDisplayName);
                AddFieldAsXml(requestList, SiteRequestFields.Template, SiteRequestFields.TemplateDisplayName, SiteRequestFields.TemplateId);
                AddFieldAsXml(requestList, SiteRequestFields.Policy, SiteRequestFields.PolicyDisplayName, SiteRequestFields.PolicyId);
                AddFieldAsXml(requestList, SiteRequestFields.Url, SiteRequestFields.UrlDisplayName, SiteRequestFields.UrlId);
                AddFieldAsXml(requestList, SiteRequestFields.Owner, SiteRequestFields.OwnerDisplayName, SiteRequestFields.OwnerId, "User", "List='UserInfo' UserSelectionMode='0' ShowField='ImnName'");
                AddFieldAsXml(requestList, SiteRequestFields.AdditionalOwners, SiteRequestFields.AdditionalOwnersDisplayName, SiteRequestFields.AdditionalOwnersId, "UserMulti", "Mult='TRUE' List='UserInfo' UserSelectionMode='1' ShowField='ImnName'");
                AddFieldAsXml(requestList, SiteRequestFields.Lcid, SiteRequestFields.LcidDisplayName, SiteRequestFields.LcidId);
                AddFieldAsXml(requestList, SiteRequestFields.StatusMessage, SiteRequestFields.StatusMessageDisplayName, SiteRequestFields.StatusMessageId, "Note", options: AddFieldOptions.AddFieldCheckDisplayName);
                AddFieldAsXml(requestList, SiteRequestFields.TimeZone, SiteRequestFields.TimeZoneDisplayName, SiteRequestFields.TimeZoneId);
                AddFieldAsXml(requestList, SiteRequestFields.State, SiteRequestFields.StateDisplayName, SiteRequestFields.StatusId);

                requestList.Update();
                ctx.ExecuteQuery();
            }
            else
            {
                foreach (var rer in requestList.EventReceivers)
                {
                    if (rer.ReceiverName == RECEIVER_NAME)
                    {
                        rerExists = true;
                        System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at " + rer.ReceiverUrl);
                    }
                }
            }
            if (!rerExists)
            {
                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                receiver.EventType = EventReceiverType.ItemUpdated;

                //Get WCF URL where this message was handled
                OperationContext op = OperationContext.Current;
                Message msg = op.RequestContext.RequestMessage;

                receiver.ReceiverUrl = msg.Headers.To.ToString();
                receiver.ReceiverName = RECEIVER_NAME;
                //Add the new event receiver to a list in the host web
                requestList.EventReceivers.Add(receiver);

                ctx.ExecuteQuery();
            }
        }
コード例 #44
0
        public static void EnableDisableTagging(ClientContext ctx,List TargetList,bool AttachEvents,AppWebHelper hlp)
        {
            LogHelper.Log("Entering EnableDisableTagging");
            
            if (!AttachEvents)
            {
                try
                {
                    
                    var TargetItemAddedEvent = TargetList.EventReceivers.Where(
                        ev => ev.ReceiverName == Constants.ItemAddedEventReceiverName).SingleOrDefault();

                    if (TargetItemAddedEvent != null)
                    {
                        TargetItemAddedEvent.DeleteObject();                        
                    }
                    var TargetFieldAddedEvent = TargetList.EventReceivers.Where(
                        ev => ev.ReceiverName == Constants.FieldDeletedEventReceiverName).SingleOrDefault();

                    if (TargetFieldAddedEvent != null)
                    {
                        TargetFieldAddedEvent.DeleteObject();
                    }
                    
                    if(TargetItemAddedEvent != null || TargetFieldAddedEvent != null)
                    {
                        ctx.ExecuteQuery();
                    }

        
                }
                catch (Exception ex)
                {
                    LogHelper.Log(ex.Message + ex.StackTrace, LogSeverity.Error);
                }

            }
            else
            {
                try
                {
                    int Sequence = 10;                            
                    EventReceiverDefinitionCreationInformation ItemAddedDef = new EventReceiverDefinitionCreationInformation();
                    ItemAddedDef.EventType = EventReceiverType.ItemAdded;
                    ItemAddedDef.ReceiverName = Constants.ItemAddedEventReceiverName;
                    ItemAddedDef.ReceiverUrl = ConfigurationHelper.GetReceiverUrl();
                    ItemAddedDef.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
                    ItemAddedDef.ReceiverClass = ConfigurationHelper.GetReceiverClass();
                    if(!hlp.ListsInfo.ContainsKey(TargetList.Id.ToString()))
                    {
                        ItemAddedDef.Synchronization = EventReceiverSynchronization.Asynchronous;
                    }
                    else
                    {
                        if (hlp.ListsInfo[TargetList.Id.ToString()].Asynchronous)
                        {
                            ItemAddedDef.Synchronization = EventReceiverSynchronization.Asynchronous;
                        }
                        else
                        {
                            ItemAddedDef.Synchronization = EventReceiverSynchronization.Synchronous;
                        }   
                    }
                                     
                    ItemAddedDef.SequenceNumber = Sequence;

                    EventReceiverDefinitionCreationInformation FieldDeletedDef = new EventReceiverDefinitionCreationInformation();
                    FieldDeletedDef.EventType = EventReceiverType.FieldDeleted;
                    FieldDeletedDef.ReceiverName = Constants.FieldDeletedEventReceiverName;
                    FieldDeletedDef.ReceiverUrl = ConfigurationHelper.GetReceiverUrl();
                    FieldDeletedDef.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
                    FieldDeletedDef.ReceiverClass = ConfigurationHelper.GetReceiverClass();
                    FieldDeletedDef.Synchronization = EventReceiverSynchronization.Asynchronous;
                    TargetList.EventReceivers.Add(ItemAddedDef);
                    TargetList.EventReceivers.Add(FieldDeletedDef);

                    TargetList.Update();                    
                    ctx.ExecuteQuery();
                    LogHelper.Log("Attached AutoTagging for " + ItemAddedDef.EventType.ToString() + " on " + TargetList.Id);
                }
                catch (Exception ex)
                {
                    LogHelper.Log(ex.Message+ex.StackTrace,LogSeverity.Error);
                }
            
            }
        }
コード例 #45
0
        public void AssociateRemoteEventsToHostWeb(ClientContext clientContext)
        {
            //Add Push Notification Feature to HostWeb
            //Not required here, just a demonstration that you
            //can activate features.
            clientContext.Web.Features.Add(
                     new Guid("41e1d4bf-b1a2-47f7-ab80-d5d6cbba3092"),
                     true, FeatureDefinitionScope.None);


            //Get the Title and EventReceivers lists
            clientContext.Load(clientContext.Web.Lists,
                lists => lists.Include(
                    list => list.Title,
                    list => list.EventReceivers).Where
                        (list => list.Title == LIST_TITLE));

            clientContext.ExecuteQuery();

            List jobsList = clientContext.Web.Lists.FirstOrDefault();

            bool rerExists = false;
            if (null == jobsList)
            {
                //List does not exist, create it
                jobsList = CreateJobsList(clientContext);

            }
            else
            {
                foreach (var rer in jobsList.EventReceivers)
                {
                    if (rer.ReceiverName == RECEIVER_NAME)
                    {
                        rerExists = true;
                        System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at "
                            + rer.ReceiverUrl);
                    }
                }
            }

            if (!rerExists)
            {
                EventReceiverDefinitionCreationInformation receiver =
                    new EventReceiverDefinitionCreationInformation();
                receiver.EventType = EventReceiverType.ItemAdded;
                
                //Get WCF URL where this message was handled
                OperationContext op = OperationContext.Current;
                Message msg = op.RequestContext.RequestMessage;
                receiver.ReceiverUrl = msg.Headers.To.ToString();

                receiver.ReceiverName = RECEIVER_NAME;
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;

                //Add the new event receiver to a list in the host web
                jobsList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();

                System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + receiver.ReceiverUrl);
            }
        }
コード例 #46
0
        public void AssociateRemoteEventsToHostWeb(ClientContext clientContext)
        {
            //Get the Title and EventReceivers lists
            clientContext.Load(clientContext.Web.Lists,
                lists => lists.Include(
                    list => list.Title,
                    list => list.EventReceivers).Where
                        (list => list.Title == LIST_TITLE));

            clientContext.ExecuteQuery();

            List jobsList = clientContext.Web.Lists.FirstOrDefault();

            //#if (DEBUG)
            //            // In debug mode we will delete the existing list, so we prevent our system from orphaned event receicers.
            //            // RemoveEventReceiversFromHostWeb is sometimes not called in debug mode and/or the app id has changed.
            //            // On RER registration SharePoint adds the app id to the event registration information, and you are only able
            //            // to remove the event with the same app where it was registered. Also note that you would need to completely
            //            // uninstall an app before SharePoint will trigger the appuninstalled event. From the documentation:
            //            // The **AppUninstalling** event only fires when a user completely removes the add-in: the add-in needs to be deleted
            //            // from the site recycle bins in an end-user scenario. In a development scenario the add-in needs to be removed from
            //            // the “Apps in testing” library.

            //            if (null != jobsList)
            //            {
            //                jobsList.DeleteObject();
            //                clientContext.ExecuteQuery();
            //                jobsList = null;
            //            }
            //#endif

            bool rerExists = false;
            if (null == jobsList)
            {
                //List does not exist, create it
                jobsList = CreateJobsList(clientContext);

            }
            else
            {
                foreach (var rer in jobsList.EventReceivers)
                {
                    if (rer.ReceiverName == RECEIVER_NAME)
                    {
                        rerExists = true;
                        System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at "
                            + rer.ReceiverUrl);
                    }
                }
            }

            ////Add eventreceiver
            if (!rerExists)
            {
                EventReceiverDefinitionCreationInformation receiver =
                    new EventReceiverDefinitionCreationInformation();
                receiver.EventType = EventReceiverType.ItemAdded;

                //Get WCF URL where this message was handled
                OperationContext op = OperationContext.Current;
                Message msg = op.RequestContext.RequestMessage;
                receiver.ReceiverUrl = msg.Headers.To.ToString();

                receiver.ReceiverName = RECEIVER_NAME;
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;

                //Add the new event receiver to a list in the host web
                jobsList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();

                System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + receiver.ReceiverUrl);
            }
        }
コード例 #47
0
        public void AssociateRemoteEventsToHostWeb(ClientContext clientContext)
        {
            //Add Push Notification Feature to HostWeb
            //Not required here, just a demonstration that you
            //can activate features.
            clientContext.Web.Features.Add(
                new Guid("41e1d4bf-b1a2-47f7-ab80-d5d6cbba3092"),
                true, FeatureDefinitionScope.None);


            //Get the Title and EventReceivers lists
            clientContext.Load(clientContext.Web.Lists,
                               lists => lists.Include(
                                   list => list.Title,
                                   list => list.EventReceivers).Where
                                   (list => list.Title == LIST_TITLE));

            clientContext.ExecuteQuery();

            List jobsList = clientContext.Web.Lists.FirstOrDefault();

            bool rerExists = false;

            if (null == jobsList)
            {
                //List does not exist, create it
                jobsList = CreateJobsList(clientContext);
            }
            else
            {
                foreach (var rer in jobsList.EventReceivers)
                {
                    if (rer.ReceiverName == RECEIVER_NAME)
                    {
                        rerExists = true;
                        System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at "
                                                           + rer.ReceiverUrl);
                    }
                }
            }

            if (!rerExists)
            {
                EventReceiverDefinitionCreationInformation receiver =
                    new EventReceiverDefinitionCreationInformation();
                receiver.EventType = EventReceiverType.ItemAdded;

                //Get WCF URL where this message was handled
                OperationContext op  = OperationContext.Current;
                Message          msg = op.RequestContext.RequestMessage;
                receiver.ReceiverUrl = msg.Headers.To.ToString();

                receiver.ReceiverName    = RECEIVER_NAME;
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;

                //Add the new event receiver to a list in the host web
                jobsList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();

                System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + receiver.ReceiverUrl);
            }
        }
コード例 #48
0
        public void AssociateRemoteEventsToHostWeb(ClientContext clientContext)
        {
            Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", "On Started");
            try
            {
                List jobsList = clientContext.Web.Lists.GetByTitle(LIST_TITLE);
                clientContext.Load(jobsList, l => l.Title, l => l.EventReceivers);
                clientContext.ExecuteQuery();

                Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", "Read List");

                bool rerExists = false;

                foreach (var rer in jobsList.EventReceivers)
                {
                    if (rer.ReceiverName.Contains("RemoteEventReceiver1Item"))
                    {
                        Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", "Removing Event Receiver : " + rer.ReceiverName);
                        RemoveEventReceiversFromHostWeb(clientContext, rer.ReceiverName);
                        Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", "Removed Event Receiver : " + rer.ReceiverName);
                        //rerExists = true;
                        System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at "
                                                           + rer.ReceiverUrl);
                    }
                }


                if (!rerExists)
                {
                    Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", "Adding Event Receiver 1");
                    //should be in config
                    string url = "https://remoteeventreceiverfortaskbs.azurewebsites.net/Services/AppEventReceiver.svc";
                    Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", url);
                    EventReceiverDefinitionCreationInformation receiver =
                        new EventReceiverDefinitionCreationInformation();
                    receiver.EventType   = EventReceiverType.ItemUpdating;
                    receiver.ReceiverUrl = url;
                    Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", Assembly.GetExecutingAssembly().FullName);
                    receiver.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
                    receiver.ReceiverClass    = "AppEventReceiver";
                    receiver.ReceiverName     = "RemoteEventReceiver1ItemUpdating";
                    receiver.SequenceNumber   = 1009;
                    receiver.Synchronization  = EventReceiverSynchronization.Synchronous;

                    //Add the new event receiver to a list in the host web
                    jobsList.EventReceivers.Add(receiver);
                    //clientContext.ExecuteQuery();
                    Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", "Adding Event Receiver 2");
                    EventReceiverDefinitionCreationInformation receiver2 =
                        new EventReceiverDefinitionCreationInformation();
                    receiver2.EventType   = EventReceiverType.ItemUpdated;
                    receiver2.ReceiverUrl = url;
                    Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", Assembly.GetExecutingAssembly().FullName);
                    receiver2.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
                    receiver2.ReceiverClass    = "AppEventReceiver";
                    receiver2.ReceiverName     = "RemoteEventReceiver1ItemUpdated";
                    receiver2.SequenceNumber   = 1008;
                    receiver2.Synchronization  = EventReceiverSynchronization.Synchronous;

                    //Add the new event receiver to a list in the host web
                    jobsList.EventReceivers.Add(receiver2);
                    clientContext.ExecuteQuery();

                    EventReceiverDefinitionCreationInformation receiver3 =
                        new EventReceiverDefinitionCreationInformation();
                    receiver3.EventType   = EventReceiverType.ItemAdded;
                    receiver3.ReceiverUrl = url;
                    Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", Assembly.GetExecutingAssembly().FullName);
                    receiver3.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
                    receiver3.ReceiverClass    = "AppEventReceiver";
                    receiver3.ReceiverName     = "RemoteEventReceiver1ItemAdded";
                    receiver3.SequenceNumber   = 1007;
                    receiver3.Synchronization  = EventReceiverSynchronization.Asynchronous;

                    jobsList.EventReceivers.Add(receiver3);
                    clientContext.ExecuteQuery();

                    Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", "Added Event Receiver 1 , 2 and 3");
                    System.Diagnostics.Trace.WriteLine("Added ItemAdded receiver at " + receiver.ReceiverUrl);
                }
            }
            catch (Exception ex)
            {
                Helper.AddLog("RemoteEventReceiverManager-AssociateRemoteEventsToHostWeb", "Adding Event Receiver Error " + ex.ToString());
            }
        }
コード例 #49
0
        /// <summary>
        /// Defines if auto record declaration is active for this list: all added items will be automatically declared as a record if active
        /// </summary>
        /// <param name="list">List to operate on</param>
        /// <param name="autoDeclareRecords">True to automatically declare all added items as record, false otherwise</param>
        public static void SetListAutoRecordDeclaration(this List list, bool autoDeclareRecords)
        {
            //Determine the SharePoint version based on the loaded CSOM library
            var asm = Assembly.GetAssembly(typeof(Site));
            var sharePointVersion = asm.GetName().Version.Major;

            if (autoDeclareRecords)
            {
                //Set the property that dictates custom list record settings to true
                list.SetPropertyBagValue(ECM_IPR_LIST_USE_LIST_SPECIFIC, true.ToString());
                //Prevent manual declaration
                list.SetPropertyBagValue(ECM_ALLOW_MANUAL_DECLARATION, false.ToString());

                //Hookup the needed event handlers
                list.Context.Load(list.EventReceivers);
                list.Context.ExecuteQueryRetry();

                List <EventReceiverDefinition> currentEventReceivers = new List <EventReceiverDefinition>(list.EventReceivers.Count);
                currentEventReceivers.AddRange(list.EventReceivers);

                // Track changes to see if an list.Update is needed
                bool eventReceiverAdded = false;

                //ItemUpdating receiver
                EventReceiverDefinitionCreationInformation newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemUpdating, 1000, sharePointVersion);
                if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
                {
                    list.EventReceivers.Add(newEventReceiver);
                    eventReceiverAdded = true;
                }
                //ItemDeleting receiver
                newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemDeleting, 1000, sharePointVersion);
                if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
                {
                    list.EventReceivers.Add(newEventReceiver);
                    eventReceiverAdded = true;
                }
                //ItemFileMoving receiver
                newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemFileMoving, 1000, sharePointVersion);
                if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
                {
                    list.EventReceivers.Add(newEventReceiver);
                    eventReceiverAdded = true;
                }
                //ItemAdded receiver
                newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemAdded, 1005, sharePointVersion);
                if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
                {
                    list.EventReceivers.Add(newEventReceiver);
                    eventReceiverAdded = true;
                }
                //ItemUpdated receiver
                newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemUpdated, 1007, sharePointVersion);
                if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
                {
                    list.EventReceivers.Add(newEventReceiver);
                    eventReceiverAdded = true;
                }
                //ItemCheckedIn receiver
                newEventReceiver = CreateECMRecordEventReceiverDefinition(EventReceiverType.ItemCheckedIn, 1006, sharePointVersion);
                if (!ContainsECMRecordEventReceiver(newEventReceiver, currentEventReceivers))
                {
                    list.EventReceivers.Add(newEventReceiver);
                    eventReceiverAdded = true;
                }

                if (eventReceiverAdded)
                {
                    list.Update();
                    list.Context.ExecuteQueryRetry();
                }

                //Set the property that dictates the auto declaration
                list.SetPropertyBagValue(ECM_AUTO_DECLARE_RECORDS, autoDeclareRecords.ToString());
            }
            else
            {
                //Set the property that dictates the auto declaration
                list.SetPropertyBagValue(ECM_AUTO_DECLARE_RECORDS, autoDeclareRecords.ToString());
                //Note: existing list event handlers will just stay as they are, no need to remove them
            }
        }
コード例 #50
0
        public static void EnableDisableTagging(ClientContext ctx, List TargetList, bool AttachEvents, AppWebHelper hlp)
        {
            LogHelper.Log("Entering EnableDisableTagging");

            if (!AttachEvents)
            {
                try
                {
                    var TargetItemAddedEvent = TargetList.EventReceivers.Where(
                        ev => ev.ReceiverName == Constants.ItemAddedEventReceiverName).SingleOrDefault();

                    if (TargetItemAddedEvent != null)
                    {
                        TargetItemAddedEvent.DeleteObject();
                    }
                    var TargetFieldAddedEvent = TargetList.EventReceivers.Where(
                        ev => ev.ReceiverName == Constants.FieldDeletedEventReceiverName).SingleOrDefault();

                    if (TargetFieldAddedEvent != null)
                    {
                        TargetFieldAddedEvent.DeleteObject();
                    }

                    if (TargetItemAddedEvent != null || TargetFieldAddedEvent != null)
                    {
                        ctx.ExecuteQuery();
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Log(ex.Message + ex.StackTrace, LogSeverity.Error);
                }
            }
            else
            {
                try
                {
                    int Sequence = 10;
                    EventReceiverDefinitionCreationInformation ItemAddedDef = new EventReceiverDefinitionCreationInformation();
                    ItemAddedDef.EventType        = EventReceiverType.ItemAdded;
                    ItemAddedDef.ReceiverName     = Constants.ItemAddedEventReceiverName;
                    ItemAddedDef.ReceiverUrl      = ConfigurationHelper.GetReceiverUrl();
                    ItemAddedDef.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
                    ItemAddedDef.ReceiverClass    = ConfigurationHelper.GetReceiverClass();
                    if (!hlp.ListsInfo.ContainsKey(TargetList.Id.ToString()))
                    {
                        ItemAddedDef.Synchronization = EventReceiverSynchronization.Asynchronous;
                    }
                    else
                    {
                        if (hlp.ListsInfo[TargetList.Id.ToString()].Asynchronous)
                        {
                            ItemAddedDef.Synchronization = EventReceiverSynchronization.Asynchronous;
                        }
                        else
                        {
                            ItemAddedDef.Synchronization = EventReceiverSynchronization.Synchronous;
                        }
                    }

                    ItemAddedDef.SequenceNumber = Sequence;

                    EventReceiverDefinitionCreationInformation FieldDeletedDef = new EventReceiverDefinitionCreationInformation();
                    FieldDeletedDef.EventType        = EventReceiverType.FieldDeleted;
                    FieldDeletedDef.ReceiverName     = Constants.FieldDeletedEventReceiverName;
                    FieldDeletedDef.ReceiverUrl      = ConfigurationHelper.GetReceiverUrl();
                    FieldDeletedDef.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
                    FieldDeletedDef.ReceiverClass    = ConfigurationHelper.GetReceiverClass();
                    FieldDeletedDef.Synchronization  = EventReceiverSynchronization.Asynchronous;
                    TargetList.EventReceivers.Add(ItemAddedDef);
                    TargetList.EventReceivers.Add(FieldDeletedDef);

                    TargetList.Update();
                    ctx.ExecuteQuery();
                    LogHelper.Log("Attached AutoTagging for " + ItemAddedDef.EventType.ToString() + " on " + TargetList.Id);
                }
                catch (Exception ex)
                {
                    LogHelper.Log(ex.Message + ex.StackTrace, LogSeverity.Error);
                }
            }
        }
コード例 #51
0
        public void AssociateRemoteEventsToHostWeb(ClientContext clientContext)
        {
            if (Global.globalY != 1)
            {

                Global.globalError += "28-";
            //Add Push Notification Feature to HostWeb
            //Not required here, just a demonstration that you
            //can activate features.
            clientContext.Web.Features.Add(
                     new Guid("41e1d4bf-b1a2-47f7-ab80-d5d6cbba3092"),
                     true, FeatureDefinitionScope.None);

                Global.globalError += "36-";
                //Get the Title and EventReceivers lists
                clientContext.Load(clientContext.Web.Lists,
                lists => lists.Include(
                    list => list.Title,
                    list => list.EventReceivers).Where
                        (list => list.Title == LIST_TITLE));

            clientContext.ExecuteQuery();
                Global.globalError += "45-";
                List jobsList = clientContext.Web.Lists.FirstOrDefault();

            #if (DEBUG)
            // In debug mode we will delete the existing list, so we prevent our system from orphaned event receicers.
            // RemoveEventReceiversFromHostWeb is sometimes not called in debug mode and/or the app id has changed.
            // On RER registration SharePoint adds the app id to the event registration information, and you are only able
            // to remove the event with the same app where it was registered. Also note that you would need to completely
            // uninstall an app before SharePoint will trigger the appuninstalled event. From the documentation:
            // The **AppUninstalling** event only fires when a user completely removes the add-in: the add-in needs to be deleted
            // from the site recycle bins in an end-user scenario. In a development scenario the add-in needs to be removed from
            // the “Apps in testing” library.

            if (null != jobsList)
            {
                jobsList.DeleteObject();
                clientContext.ExecuteQuery();
                jobsList = null;
            }
            #endif
                Global.globalError += "65-";
                bool rerExists = false;
            if (null == jobsList)
            {

                //List does not exist, create it
                jobsList = CreateJobsList(clientContext);
                    Global.globalError += "72-";
                }

            else
            {
                foreach (var rer in jobsList.EventReceivers)
                {
                    if (rer.ReceiverName == RECEIVER_NAME)
                    {
                        rerExists = true;
                        System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at "
                            + rer.ReceiverUrl);
                    }
                }
            }
                Global.globalError += "87-";
                if (!rerExists)
            {

                EventReceiverDefinitionCreationInformation receiver =
                    new EventReceiverDefinitionCreationInformation();
                receiver.EventType = EventReceiverType.ItemAdded;

                    //Get WCF URL where this message was handled
                    //System.ServiceModel.OperationContext op = System.ServiceModel.OperationContext.Current;
                    //Message msg = op.RequestContext.RequestMessage;
                    //receiver.ReceiverUrl = msg.Headers.To.ToString();

                    //Simons Instance
                    //receiver.ReceiverUrl = "https://serviceberra.servicebus.windows.net/314700446/821505743/obj/d91500b0-1033-4876-bf0c-fa8a607e8eca/Services/AppEventReceiver.svc";

                    receiver.ReceiverUrl = "https://serviceberra.servicebus.windows.net/73036694/1885843836/obj/d91500b0-1033-4876-bf0c-fa8a607e8eca/Services/AppEventReceiver.svc";

                    Global.globalError += "101";
                    receiver.ReceiverName = RECEIVER_NAME;
                receiver.Synchronization = EventReceiverSynchronization.Synchronous;

                //Add the new event receiver to a list in the host web
                jobsList.EventReceivers.Add(receiver);
                clientContext.ExecuteQuery();

                    Global.globalError += "109-";
                    Global.globalError += (" Added ItemAdded receiver at " + receiver.ReceiverUrl + " - ");

            }
                Global.globalY++;

                FirstTimeInstall(clientContext);
            }
        }
コード例 #52
0
  static public void CreateAnnouncementsList(ClientContext clientContext) {

    string listTitle = "Announcements";

    // delete list if it exists
    ExceptionHandlingScope scope = new ExceptionHandlingScope(clientContext);
    using (scope.StartScope()) {
      using (scope.StartTry()) {
        clientContext.Web.Lists.GetByTitle(listTitle).DeleteObject();
      }
      using (scope.StartCatch()) { }
    }

    // create and initialize ListCreationInformation object
    ListCreationInformation listInformation = new ListCreationInformation();
    listInformation.Title = listTitle;
    listInformation.Url = "Lists/Announcements";
    listInformation.QuickLaunchOption = QuickLaunchOptions.On;
    listInformation.TemplateType = (int)ListTemplateType.Announcements;

    // Add ListCreationInformation to lists collection and return list object
    List list = clientContext.Web.Lists.Add(listInformation);

    // modify additional list properties and update
    list.OnQuickLaunch = true;
    list.EnableAttachments = false;
    list.Update();

    // send command to server to create list
    clientContext.ExecuteQuery();

    clientContext.Load(list);
    clientContext.ExecuteQuery();

    string urlEventReceiver = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) +
                              @"/Services/AnnouncementsEventReceiver.svc";

    EventReceiverDefinitionCreationInformation erci1 = new EventReceiverDefinitionCreationInformation();
    erci1.ReceiverName = "ItemAdding";
    erci1.EventType = EventReceiverType.ItemAdding;
    erci1.ReceiverUrl = urlEventReceiver;
    erci1.SequenceNumber = 1000;
    EventReceiverDefinition er1 = list.EventReceivers.Add(erci1);
    er1.Update();

    EventReceiverDefinitionCreationInformation erci2 = new EventReceiverDefinitionCreationInformation();
    erci2.ReceiverName = "ItemUpdating";
    erci2.EventType = EventReceiverType.ItemUpdating;
    erci2.ReceiverUrl = urlEventReceiver;
    erci2.SequenceNumber = 1000;
    EventReceiverDefinition er2 = list.EventReceivers.Add(erci2);
    er2.Update();

    clientContext.ExecuteQuery();

    ListItemCreationInformation lici = new ListItemCreationInformation();

    var item1 = list.AddItem(lici);
    item1["Title"] = "SharePoint introduces new app model";
    item1["Body"] = "<div>Developers wonder what happened to solutions.</div>";
    item1["Expires"] = DateTime.Today.AddYears(10);
    item1.Update();

    var item2 = list.AddItem(lici);
    item2["Title"] = "All SharePoint developers must now learn JavaScript";
    item2["Body"] = "<div>Some developers are more excited than others.</div>";
    item2["Expires"] = DateTime.Today.AddYears(1);
    item2.Update();

    var item3 = list.AddItem(lici);
    item3["Title"] = "CSOM programming is super fun";
    item3["Body"] = "<div>Just ask my mom.</div>";
    item3["Expires"] = DateTime.Today.AddDays(7);
    item3.Update();

    clientContext.ExecuteQuery();



  }
コード例 #53
0
        private void CreateSiteRequestList(ClientContext ctx)
        {
            bool rerExists = false;
            var  web       = ctx.Web;

            ctx.Load(ctx.Web.Lists,
                     lists => lists.Include(
                         list => list.Title,
                         list => list.EventReceivers).Where
                         (list => list.Title == Lists.SiteRepositoryTitle));
            ctx.ExecuteQuery();

            List requestList = ctx.Web.Lists.FirstOrDefault();

            if (requestList == null)
            {
                var newList = new ListCreationInformation()
                {
                    Title        = Lists.SiteRepositoryTitle,
                    Description  = Lists.SiteRepositoryDesc,
                    TemplateType = (int)ListTemplateType.GenericList,
                    Url          = Lists.SiteRepositoryUrl
                };
                requestList = ctx.Web.Lists.Add(newList);
                ctx.Load(requestList);
                ctx.ExecuteQuery();

                // add fields (replace the second field with the display name
                AddFieldAsXml(requestList, SiteRequestFields.Description, SiteRequestFields.DescriptionDisplayName, SiteRequestFields.DescriptionId, "Note", options: AddFieldOptions.AddFieldCheckDisplayName);
                AddFieldAsXml(requestList, SiteRequestFields.Template, SiteRequestFields.TemplateDisplayName, SiteRequestFields.TemplateId);
                AddFieldAsXml(requestList, SiteRequestFields.Policy, SiteRequestFields.PolicyDisplayName, SiteRequestFields.PolicyId);
                AddFieldAsXml(requestList, SiteRequestFields.Url, SiteRequestFields.UrlDisplayName, SiteRequestFields.UrlId);
                AddFieldAsXml(requestList, SiteRequestFields.Owner, SiteRequestFields.OwnerDisplayName, SiteRequestFields.OwnerId, "User", "List='UserInfo' UserSelectionMode='0' ShowField='ImnName'");
                AddFieldAsXml(requestList, SiteRequestFields.AdditionalOwners, SiteRequestFields.AdditionalOwnersDisplayName, SiteRequestFields.AdditionalOwnersId, "UserMulti", "Mult='TRUE' List='UserInfo' UserSelectionMode='1' ShowField='ImnName'");
                AddFieldAsXml(requestList, SiteRequestFields.Lcid, SiteRequestFields.LcidDisplayName, SiteRequestFields.LcidId);
                AddFieldAsXml(requestList, SiteRequestFields.StatusMessage, SiteRequestFields.StatusMessageDisplayName, SiteRequestFields.StatusMessageId, "Note", options: AddFieldOptions.AddFieldCheckDisplayName);
                AddFieldAsXml(requestList, SiteRequestFields.TimeZone, SiteRequestFields.TimeZoneDisplayName, SiteRequestFields.TimeZoneId);
                AddFieldAsXml(requestList, SiteRequestFields.State, SiteRequestFields.StateDisplayName, SiteRequestFields.StatusId);

                requestList.Update();
                ctx.ExecuteQuery();
            }
            else
            {
                foreach (var rer in requestList.EventReceivers)
                {
                    if (rer.ReceiverName == RECEIVER_NAME)
                    {
                        rerExists = true;
                        System.Diagnostics.Trace.WriteLine("Found existing ItemAdded receiver at " + rer.ReceiverUrl);
                    }
                }
            }
            if (!rerExists)
            {
                EventReceiverDefinitionCreationInformation receiver = new EventReceiverDefinitionCreationInformation();
                receiver.EventType = EventReceiverType.ItemUpdated;

                //Get WCF URL where this message was handled
                OperationContext op  = OperationContext.Current;
                Message          msg = op.RequestContext.RequestMessage;

                receiver.ReceiverUrl  = msg.Headers.To.ToString();
                receiver.ReceiverName = RECEIVER_NAME;
                //Add the new event receiver to a list in the host web
                requestList.EventReceivers.Add(receiver);

                ctx.ExecuteQuery();
            }
        }