Example #1
0
        /// <summary>
        /// Handles events that occur before an action occurs, such as when a user adds or deletes a list item.
        /// </summary>
        /// <param name="properties">Holds information about the remote event.</param>
        /// <returns>Holds information returned from the remote event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            switch (properties.EventType)
            {
                case SPRemoteEventType.ItemUpdating:
                    result.ErrorMessage = "You cannot add this list item";
                    result.Status = SPRemoteEventServiceStatus.CancelNoError;
                    break;
                case SPRemoteEventType.ItemAdding:
                    result.ErrorMessage = "You cannot add this list item";
                    result.Status = SPRemoteEventServiceStatus.CancelNoError;
                    break;
            }

            using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
            {
                if (clientContext != null)
                {
                    clientContext.Load(clientContext.Web);
                    clientContext.ExecuteQuery();
                }
            }

            return result;
        }
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();
            try
            {
                switch (properties.EventType)
                {
                    case SPRemoteEventType.ItemAdded:                        
                        HandleAutoTaggingItemAdded(properties);
                        break;
                       
                    case SPRemoteEventType.AppInstalled:
                        AppInstalled(properties);
                        break;

                    case SPRemoteEventType.AppUninstalling:
                        AppUninstalling(properties);
                        break;

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

            return result;
        }
Example #3
0
 public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
 {
     return(new SPRemoteEventResult
     {
         Status = SPRemoteEventServiceStatus.Continue
     });
 }
Example #4
0
        // standard entry point for two-way events
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            // create SPRemoteEventResult object to use as return value
            SPRemoteEventResult result = new SPRemoteEventResult();

            // inspect the event type of the current event
            if ((properties.EventType == SPRemoteEventType.ItemAdding) ||
                (properties.EventType == SPRemoteEventType.ItemUpdating))
            {
                // get user input to perform validation
                string title = properties.ItemEventProperties.AfterProperties["Title"].ToString();
                string body  = properties.ItemEventProperties.AfterProperties["Body"].ToString();

                // perform simple validation on user input
                if (title.Contains("Google") || title.Contains("Apple") || title.Contains("NetScape"))
                {
                    // cancel action due to validation error
                    result.Status       = SPRemoteEventServiceStatus.CancelWithError;
                    result.ErrorMessage = "Title cannot contain inflammatory terms such as 'google', 'apple' or 'NetScape'";
                }

                // Process user input before it's added to the content database
                if (title != title.ToUpper())
                {
                    result.ChangedItemProperties.Add("Title", title.ToUpper());
                }
            }

            return(result); // always return SPRemoteEventResult back to SharePoint host
        }
Example #5
0
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            TraceHelper.RemoteLog("app event triggered: " + properties.EventType.ToString());

            SPRemoteEventResult result = new SPRemoteEventResult();

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

                    RegisterEventReceivers(clientContext);

                    PlaybasisHelper.Instance.Auth();
                    foreach (var user in clientContext.Web.SiteUsers)
                    {
                        if (string.IsNullOrWhiteSpace(user.Email))
                        {
                            continue;
                        }
                        PlaybasisHelper.Instance.Register(user, true);
                    }
                }
            }

            return(result);
        }
        /// <summary>
        ///     Handles events that occur before an action occurs, such as when a user adds or deletes a list item.
        /// </summary>
        /// <param name="properties">Holds information about the remote event.</param>
        /// <returns>Holds information returned from the remote event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            Trace.WriteLine("Processing remote event. " + properties.EventType);

            var result = new SPRemoteEventResult();
            try
            {
                using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, false))
                {
                    if (clientContext != null)
                    {
                        if (properties.EventType == SPRemoteEventType.AppInstalled)
                        {
                            Trace.WriteLine("Creating sharepoints objects.");
                            EnsureObjectsCreated(clientContext);
                            Trace.WriteLine("Sharepoints objects created.");
                        }

                        if (properties.EventType == SPRemoteEventType.AppUninstalling)
                        {
                            Trace.WriteLine("Removing sharepoint objects.");
                            RemoveObjects(clientContext);
                            Trace.WriteLine("Sharepoint objects removed.");
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Trace.WriteLine("An error occured during processing remote event: " + e);
                result.ErrorMessage = e.ToString();
            }

            return result;
        }
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

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

                    switch (properties.EventType)
                    {
                    case SPRemoteEventType.AppInstalled:
                        RemoveQuickLaunchNode(clientContext);
                        AddSiteInformationJsLink(clientContext);
                        result.Status = SPRemoteEventServiceStatus.Continue;
                        break;

                    case SPRemoteEventType.AppUninstalling:
                        RemoveQuickLaunchNode(clientContext);
                        Web web = clientContext.Web;
                        clientContext.Load(web, w => w.UserCustomActions, w => w.Url, w => w.AppInstanceId);
                        clientContext.ExecuteQuery();
                        DeleteExistingActions(clientContext, web);
                        break;
                    }
                }
            }

            return(result);
        }
        private Guid CreateList(String listTitle, SPRemoteEventProperties properties)
        {
            Guid listID = Guid.Empty;

            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, useAppWeb: false))
            {
                if (clientContext != null)
                {
                    // SharePoint might be retrying the event after a time-out. It
                    // may have created the list on the last try of this handler, so
                    // check to see if there's already a list with that name.
                    List targetList = GetListByTitle(listTitle, clientContext);

                    // If there isn't one, create it.
                    if (targetList == null)
                    {
                        ListCreationInformation listInfo = new ListCreationInformation();
                        listInfo.Title        = listTitle;
                        listInfo.TemplateType = (int)ListTemplateType.GenericList;
                        listInfo.Url          = listTitle;
                        targetList            = clientContext.Web.Lists.Add(listInfo);
                        clientContext.Load(targetList, l => l.Id);
                        clientContext.ExecuteQuery();
                        listID = targetList.Id;
                    }
                }
            }
            return(listID);
        }
  public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties) {

    // create SPRemoteEventResult object to use as return value
    SPRemoteEventResult result = new SPRemoteEventResult();

    // inspect the event type of the current event
    if ((properties.EventType == SPRemoteEventType.ItemAdding) ||
        (properties.EventType == SPRemoteEventType.ItemUpdating)) {

      // get user input to perform validation
      string title = properties.ItemEventProperties.AfterProperties["Title"].ToString();
      string body = properties.ItemEventProperties.AfterProperties["Body"].ToString();

      // perform simple validation on user input
      if (title.ToLower().Contains("lobster") || title.ToLower().Contains("clam") ) {
        // cancel action due to validation error
        result.Status = SPRemoteEventServiceStatus.CancelWithError;
        result.ErrorMessage = "Title cannot contain inflammatory terms such as 'lobster' or 'clam'";
      }

      // Process user input before it's added to the content database
      if (!title.ToUpper().Equals(title)) {
        result.ChangedItemProperties.Add("Title", title.ToUpper());
      }
    }    
    return result; // always return SPRemoteEventResult back to SharePoint host
  }
        /// <summary>
        /// Handles events that occur after an action occurs, such as after a user adds an item to a list or deletes an item from a list.
        /// </summary>
        /// <param name="properties">Holds information about the remote event.</param>
        public void ProcessOneWayEvent(SPRemoteEventProperties properties)
        {
            Logger.WriteLog(Logger.Category.Information, "ProcessOneWayEvent", "Started.");
            using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
            {
                if (clientContext != null)
                {
                    clientContext.Load(clientContext.Web);
                    clientContext.ExecuteQuery();

                    if (properties.EventType == SPRemoteEventType.ItemAdded)
                    {
                        Logger.WriteLog(Logger.Category.Information, "ProcessOneWayEvent", "EventType == ItemAdded");
                        OnAddFiles(properties, clientContext);
                    }
                    else if (properties.EventType == SPRemoteEventType.ItemDeleted)
                    {
                        Logger.WriteLog(Logger.Category.Information, "ProcessOneWayEvent", "EventType == ItemDeleted");
                        OnRemoveFiles(properties, clientContext);
                    }

                    //test code
                    //mocked up to call a test webapi in place of Sharpr's
                    //(to be replaced when Sharpr finishes publishing their new API)

                    Logger.WriteLog(Logger.Category.Information, "ProcessOneWayEvent", "Completed.");
                }
            }
        }
        private bool TryUpdateInventory(SPRemoteEventProperties properties)
        {
            bool successFlag = false;

            try
            {
                var arrived = Convert.ToBoolean(properties.ItemEventProperties.AfterProperties["Arrived"]);
                var addedToInventory = Convert.ToBoolean(properties.ItemEventProperties.AfterProperties["Added_x0020_to_x0020_Inventory"]);

                if (arrived && !addedToInventory)
                {

                    using (SqlConnection conn = SQLAzureUtilities.GetActiveSqlConnection())
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        conn.Open();
                        cmd.CommandText = "UpdateInventory";
                        cmd.CommandType = CommandType.StoredProcedure;
                        SqlParameter tenant = cmd.Parameters.Add("@Tenant", SqlDbType.NVarChar);
                        tenant.Value = properties.ItemEventProperties.WebUrl + "/";
                        SqlParameter product = cmd.Parameters.Add("@ItemName", SqlDbType.NVarChar, 50);
                        product.Value = properties.ItemEventProperties.AfterProperties["Title"]; // not "Product"
                        SqlParameter quantity = cmd.Parameters.Add("@Quantity", SqlDbType.SmallInt);
                        quantity.Value = Convert.ToUInt16(properties.ItemEventProperties.AfterProperties["Quantity"]);
                        cmd.ExecuteNonQuery();
                    }
                    successFlag = true;
                }
            }
            catch (KeyNotFoundException)
            {
                successFlag = false;
            }
            return successFlag;
        }
Example #12
0
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

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

                    switch (properties.EventType)
                    {
                        case SPRemoteEventType.AppInstalled:
                            RemoveQuickLaunchNode(clientContext);
                            AddSiteInformationJsLink(clientContext);
                            result.Status = SPRemoteEventServiceStatus.Continue;
                            break;
                        case SPRemoteEventType.AppUninstalling:
                            RemoveQuickLaunchNode(clientContext);
                            Web web = clientContext.Web;
                            clientContext.Load(web, w => w.UserCustomActions, w => w.Url, w => w.AppInstanceId);
                            clientContext.ExecuteQuery();
                            DeleteExistingActions(clientContext, web);
                            break;
                    }
                }
            }

            return result;
        }
Example #13
0
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            string webUrl = properties.AppEventProperties.HostWebFullUrl.ToString();

            switch (properties.EventType)
            {
            case SPRemoteEventType.AppInstalled:
                Helpers.MessageQueueHelper.AddInstallMessageToDavidQueue(webUrl);
                break;

            case SPRemoteEventType.AppUninstalling:
                Helpers.MessageQueueHelper.AddUnInstallMessageToDavidQueue(webUrl);
                break;

            default:
                break;
            }



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

            return(result);
        }
Example #14
0
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            //using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
            //{
            //    if (clientContext != null)
            //    {
            //        clientContext.Load(clientContext.Web);
            //        clientContext.ExecuteQuery();
            //    }
            //}

            try
            {
                WNSUtil.SendToastNotification(string.Format(@"
<toast launch=""{2}/Lists/Tasks/DispForm.aspx?ID={1}"">
                            <visual>
                                <binding template=""ToastText01"">
                                    <text id=""1"">{0}</text>
                                </binding>  
                            </visual>
                        </toast>
", properties.ItemEventProperties.AfterProperties["Title"],
                                                            properties.ItemEventProperties.ListItemId,
                                                            properties.ItemEventProperties.WebUrl),
                                              Database.Instance.GetChannelUrl(ConfigurationManager.AppSettings["TenantId"]));
            }
            catch { }
            return(result);
        }
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            using (ClientContext clientContext = new ClientContext(properties.ItemEventProperties.WebUrl))
            {
                if (clientContext != null)
                {
                    switch (properties.EventType)
                    {
                    case SPRemoteEventType.ItemAdding:
                        result.ChangedItemProperties.Add("Body", properties.ItemEventProperties.AfterProperties["Body"] += "\n ** For internal use only ** \n");
                        clientContext.Load(clientContext.Web);
                        clientContext.ExecuteQuery();
                        break;

                    case SPRemoteEventType.ItemDeleting:
                        result.ErrorMessage = "Items cannot be deleted from this list";
                        result.Status       = SPRemoteEventServiceStatus.CancelWithError;
                        break;
                    }
                }
            }

            return(result);
        }
 /// <summary>
 /// Handles synchronous events like ItemUpdated
 /// </summary>
 /// <param name="properties"></param>
 /// <returns></returns>
 public void ProcessOneWayEvent(SPRemoteEventProperties properties)
 {
     if (!WasUpdatedByEventReceiver(properties))
     {
         //do stuff
     }
 }
        /// <summary>
        /// Handles events that occur before an action occurs, such as when a user adds or deletes a list item.
        /// </summary>
        /// <param name="properties">Holds information about the remote event.</param>
        /// <returns>Holds information returned from the remote event.</returns>
        public void ProcessOneWayEvent(SPRemoteEventProperties properties)
        {
            // On Item Added event, the list item creation executes
            if (properties.EventType == SPRemoteEventType.ItemAdded)
            {
                using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
                {
                    if (clientContext != null)
                    {
                        try
                        {
                            string title = properties.ItemEventProperties.AfterProperties["Title"].ToString();



                            List     lstDemoeventReceiver = clientContext.Web.Lists.GetByTitle(properties.ItemEventProperties.ListTitle);
                            ListItem itemDemoventReceiver = lstDemoeventReceiver.GetItemById(properties.ItemEventProperties.ListItemId);

                            itemDemoventReceiver["Description"] = "Description from RER:: " + title;
                            itemDemoventReceiver.Update();
                            clientContext.ExecuteQuery();
                        }
                        catch (Exception ex) { }
                    }
                }
            }
        }
Example #18
0
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            
            SPRemoteEventResult result = new SPRemoteEventResult();

            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, useAppWeb: false))
            {
                if (clientContext != null)
                {
                    clientContext.Load(clientContext.Site);
                    clientContext.ExecuteQuery();
                    if (properties.EventType == SPRemoteEventType.AppInstalled)
                    {
                        AddJsLink(clientContext, clientContext.Site, BuildScript(), "PTCTopMenu", true );
                    }
                    else if (properties.EventType == SPRemoteEventType.AppUninstalling)
                    {
                        DeleteJsLink(clientContext, clientContext.Site, "PTCTopMenu");
                    }
                    
                }
            }
            result.Status = SPRemoteEventServiceStatus.Continue;

            return result;
        }
Example #19
0
        private Guid CreateList(String listTitle, SPRemoteEventProperties properties)
        {
            Guid listID = Guid.Empty;

            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, useAppWeb: false))
            {
                if (clientContext != null)
                {
                    // SharePoint might be retrying the event after a time-out. It
                    // may have created the list on the last try of this handler, so
                    // check to see if there's already a list with that name.                                
                    List targetList = GetListByTitle(listTitle, clientContext);

                    // If there isn't one, create it.
                    if (targetList == null)
                    {
                        ListCreationInformation listInfo = new ListCreationInformation();
                        listInfo.Title = listTitle;
                        listInfo.TemplateType = (int)ListTemplateType.GenericList;
                        listInfo.Url = listTitle;
                        targetList = clientContext.Web.Lists.Add(listInfo);
                        clientContext.Load(targetList, l => l.Id);
                        clientContext.ExecuteQuery();
                        listID = targetList.Id;
                    }
                }
            }
            return listID;
        }
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            TraceHelper.RemoteLog("app event triggered: " + properties.EventType.ToString());

            SPRemoteEventResult result = new SPRemoteEventResult();

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

                    RegisterEventReceivers(clientContext);

                    PlaybasisHelper.Instance.Auth();
                    foreach (var user in clientContext.Web.SiteUsers)
                    {
                        if (string.IsNullOrWhiteSpace(user.Email))
                            continue;
                        PlaybasisHelper.Instance.Register(user, true);
                    }
                }
            }

            return result;
        }
Example #21
0
        private void HandleItemUpdated(SPRemoteEventProperties properties)
        {
            using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
            {
                if(clientContext != null)
                {
                    List requestList = clientContext.Web.Lists.GetById(properties.ItemEventProperties.ListId);
                    ListItem item = requestList.GetItemById(properties.ItemEventProperties.ListItemId);
                    clientContext.Load(item);
                    clientContext.ExecuteQuery();

                    if (String.Compare(item[SiteRequestFields.State].ToString(), "Approved", true) == 0)
                    {
                        try
                        {
                            string site_title = item[SiteRequestFields.Title].ToString();
                            string site_description = item[SiteRequestFields.Description].ToString();
                            string site_template = item[SiteRequestFields.Template].ToString();
                            string site_url = item[SiteRequestFields.Url].ToString();
                            SharePointUser site_owner = LabHelper.BaseSetUser(clientContext, item, SiteRequestFields.Owner);
                            LabHelper.CreateSiteCollection(clientContext, site_url, site_template, site_title, site_description, site_owner.Email);
                            item[SiteRequestFields.State] = "COMPLETED";
                        }
                        catch(Exception ex)
                        {
                            item[SiteRequestFields.State] = "ERROR";
                            item[SiteRequestFields.StatusMessage] = ex.Message;
                        }
                        item.Update();
                        clientContext.ExecuteQuery();
                    }
                }
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="AppPartPropertyUIOverrider" /> class.
 /// </summary>
 /// <param name="hostWebManager">The host web manager.</param>
 /// <param name="properties">The properties of the app event receiver event.</param>
 /// <param name="jQueryFileName">Filename of jquery-x.x.x.min.js sitting in the ASP.NET (Remote Web) Scripts directory.  Example: "jquery-2.1.0.min.js"</param>
 /// <param name="remoteWebFullUrlOverride">Optional override to the remote web full url detection logic.  Example: "https://acutalurl.contoso.com"</param>
 public AppPartPropertyUIOverrider(HostWebManager hostWebManager, SPRemoteEventProperties properties, string jQueryFileName, string remoteWebFullUrlOverride)
 {
     this.hostWebManagerField = hostWebManager;
     this.propertiesField = properties;
     this.jQueryFileNameField = jQueryFileName;
     this.remoteWebFullUrlOverrideField = remoteWebFullUrlOverride;
 }
Example #23
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();
                    //List contactList = clientContext.Web.Lists.GetByTitle("GeoContacts");

                    //EventReceiverDefinitionCreationInformation eventReceiver = new EventReceiverDefinitionCreationInformation();
                    //eventReceiver.EventType = EventReceiverType.ItemAdding;
                    //eventReceiver.ReceiverAssembly = Assembly.GetExecutingAssembly().FullName;
                    //eventReceiver.ReceiverClass = "GetGeolocationEventReciever";
                    //eventReceiver.ReceiverName = "GetGeolocationEventReciever";
                    //eventReceiver.ReceiverUrl = "https://eichlereducation-fd47fd3b494c93.sharepoint.com/sites/geo/GetGeolocationEvent/";
                    //eventReceiver.SequenceNumber = 1000;

                    //contactList.EventReceivers.Add(eventReceiver);
                }
            }

            return(result);
        }
 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());
             }
         }
     }
 }
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult _result = new SPRemoteEventResult();

            try
            {
                switch (properties.EventType)
                {
                    case SPRemoteEventType.AppInstalled:
                        HandleAppInstalled(properties);
                        break;
                    case SPRemoteEventType.AppUninstalling:
                        HandleAppUninstalling(properties);
                        break;
                    case SPRemoteEventType.ItemAdding:
                        new RemoteEventReceiverManager().ItemAddingToListEventHandler(properties, _result);
                        break;
                    case SPRemoteEventType.ItemUpdated:
                        HandleItemUpdated(properties);
                        break;
                }
                _result.Status = SPRemoteEventServiceStatus.Continue;
            }
            catch (Exception ex)
            {
                //You should log here.
            }
            return _result;
        }
 private void HandleAppUninstalling(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();
             var rer = myList.EventReceivers.Where(e => e.ReceiverName == ReceiverName).FirstOrDefault();
             try
             {
                 System.Diagnostics.Trace.WriteLine("Removing ItemAdded receiver at " + rer.ReceiverUrl);
                 //This will fail when deploying via F5, but works
                 //when deployed to production
                 rer.DeleteObject();
                 clientContext.ExecuteQuery();
             }
             catch (Exception oops)
             {
                 System.Diagnostics.Trace.WriteLine(oops.Message);
             }
         }
     }
 }
        private bool TryUpdateInventory(SPRemoteEventProperties properties)
        {
            bool successFlag = false;

            try
            {
                var arrived          = Convert.ToBoolean(properties.ItemEventProperties.AfterProperties["Arrived"]);
                var addedToInventory = Convert.ToBoolean(properties.ItemEventProperties.AfterProperties["Added_x0020_to_x0020_Inventory"]);

                if (arrived && !addedToInventory)
                {
                    using (SqlConnection conn = SQLAzureUtilities.GetActiveSqlConnection())
                        using (SqlCommand cmd = conn.CreateCommand())
                        {
                            conn.Open();
                            cmd.CommandText = "UpdateInventory";
                            cmd.CommandType = CommandType.StoredProcedure;
                            SqlParameter tenant = cmd.Parameters.Add("@Tenant", SqlDbType.NVarChar);
                            tenant.Value = properties.ItemEventProperties.WebUrl + "/";
                            SqlParameter product = cmd.Parameters.Add("@ItemName", SqlDbType.NVarChar, 50);
                            product.Value = properties.ItemEventProperties.AfterProperties["Title"]; // not "Product"
                            SqlParameter quantity = cmd.Parameters.Add("@Quantity", SqlDbType.SmallInt);
                            quantity.Value = Convert.ToUInt16(properties.ItemEventProperties.AfterProperties["Quantity"]);
                            cmd.ExecuteNonQuery();
                        }
                    successFlag = true;
                }
            }
            catch (KeyNotFoundException)
            {
                successFlag = false;
            }
            return(successFlag);
        }
Example #28
0
        public void HandleAutoTaggingFieldDeleted(SPRemoteEventProperties properties)
        {
            string TargetFieldId = GetFieldId(properties.ListEventProperties.FieldXml);

            LogHelper.Log("Field " + TargetFieldId + " was deleted, cleaning config list");
            Uri    webUri      = new Uri(properties.ListEventProperties.WebUrl);
            string realm       = TokenHelper.GetRealmFromTargetUrl(webUri);
            string accessToken = TokenHelper.GetAppOnlyAccessToken(
                TokenHelper.SharePointPrincipal, webUri.Authority, realm).AccessToken;

            using (var ctx = TokenHelper.GetClientContextWithAccessToken(properties.ListEventProperties.WebUrl, accessToken))
            {
                if (ctx != null)
                {
                    ctx.Load(ctx.Web.AllProperties);
                    ctx.ExecuteQuery();
                    AppWebHelper hlp = new AppWebHelper(properties.ListEventProperties.WebUrl, false);
                    if (hlp.DisableTaggingOnListField(TargetFieldId, properties.ListEventProperties.ListId.ToString()) == 0) //Only delete the RER if no more fields are enabled.
                    {
                        List TargetList = ctx.Web.Lists.GetById(properties.ListEventProperties.ListId);
                        ctx.Load(TargetList.EventReceivers);
                        ctx.Load(TargetList);
                        ctx.ExecuteQuery();
                        LogHelper.Log("Before EnableDisableTagging");
                        ConfigurationHelper.EnableDisableTagging(ctx, TargetList, false, hlp);
                        LogHelper.Log("After EnableDisableTagging");
                    }
                }
            }
        }
        /// <summary>
        /// Handles events that occur before an action occurs, such as when a user adds or deletes a list item.
        /// </summary>
        /// <param name="properties">Holds information about the remote event.</param>
        /// <returns>Holds information returned from the remote event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            Logger.WriteLog(Logger.Category.Information, "ProcessEvent", "Started.");
            SPRemoteEventResult result = new SPRemoteEventResult();

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

                    if (properties.EventType == SPRemoteEventType.ItemAdded)
                    {
                        Logger.WriteLog(Logger.Category.Information, "ProcessEvent", "EventType == ItemAdded");
                        OnAddFiles(properties, clientContext);
                    }
                    else if (properties.EventType == SPRemoteEventType.ItemDeleted)
                    {
                        Logger.WriteLog(Logger.Category.Information, "ProcessEvent", "EventType == ItemDeleted");
                        OnRemoveFiles(properties, clientContext);
                    }

                    Logger.WriteLog(Logger.Category.Information, "ProcessEvent", "Completed.");
                }
            }

            return(result);
        }
Example #30
0
        public void HandleAutoTaggingItemAdded(SPRemoteEventProperties properties)
        {
            string webUrl = properties.ItemEventProperties.WebUrl;
            Uri    webUri = new Uri(webUrl);

            using (var ctx = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
            {
                if (ctx != null)
                {
                    ListItem DocumentItem = null;

                    string FileContent = FileHelper.GetFileContent(
                        ctx, properties.ItemEventProperties.ListId, properties.ItemEventProperties.ListItemId, out DocumentItem);
                    if (FileContent != null)
                    {
                        LogHelper.Log("filee content is not null and document item is " + (DocumentItem == null));
                        AutoTaggingHelper.SetTaxonomyFields(
                            ctx, DocumentItem,
                            FileContent.Replace("\u00a0", "\u0020"),
                            properties.ItemEventProperties.ListId.ToString(), webUrl);
                    }
                    else
                    {
                        LogHelper.Log("The parsing did not return any character");
                    }
                }
            }
        }
        /// <summary>

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

            switch (properties.EventType)
            {
            case SPRemoteEventType.AppInstalled:
                HandleAppInstalled(properties);
                break;

            case SPRemoteEventType.AppUninstalling:
                HandleAppUninstalling(properties);
                break;

            case SPRemoteEventType.ItemAdded:
                HandleItemAdded(properties);
                break;

            case SPRemoteEventType.ItemUpdated:
                HandleItemUpdated(properties);
                break;
            }

            return(result);
        }
Example #32
0
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            try
            {
                switch (properties.EventType)
                {
                case SPRemoteEventType.ItemAdded:
                    HandleAutoTaggingItemAdded(properties);
                    break;

                case SPRemoteEventType.AppInstalled:
                    AppInstalled(properties);
                    break;

                case SPRemoteEventType.AppUninstalling:
                    AppUninstalling(properties);
                    break;
                }
            }
            catch (Exception ex)
            {
                LogHelper.Log(ex.Message + ex.StackTrace, LogSeverity.Error);
            }

            return(result);
        }
Example #33
0
        /// <summary>
        /// Creates a client context based on the properties of a remote event receiver
        /// </summary>
        /// <param name="properties">Properties of a remote event receiver</param>
        /// <returns>A ClientContext ready to call the web where the event originated</returns>
        public ClientContext CreateRemoteEventReceiverClientContext(SPRemoteEventProperties properties)
        {
            Uri sharepointUrl;

            if (properties.ListEventProperties != null)
            {
                sharepointUrl = new Uri(properties.ListEventProperties.WebUrl);
            }
            else if (properties.ItemEventProperties != null)
            {
                sharepointUrl = new Uri(properties.ItemEventProperties.WebUrl);
            }
            else if (properties.WebEventProperties != null)
            {
                sharepointUrl = new Uri(properties.WebEventProperties.FullUrl);
            }
            else
            {
                return(null);
            }

            if (IsHighTrustApp())
            {
                return(GetS2SClientContextWithWindowsIdentity(sharepointUrl, null));
            }

            return(CreateAcsClientContextForUrl(properties, sharepointUrl));
        }
Example #34
0
 void AppUninstalling(SPRemoteEventProperties properties)
 {
     LogHelper.Log("The application was uninstalled from " + properties.AppEventProperties.HostWebFullUrl);
     try
     {
         using (ClientContext ctx = TokenHelper.CreateAppEventClientContext(properties, false))
         {
             List <EventReceiverDefinition> events = new List <EventReceiverDefinition>();
             var lists = ctx.LoadQuery(ctx.Web.Lists.Where(l => l.BaseType == BaseType.DocumentLibrary).Include(
                                           ll => ll.Title, ll => ll.EventReceivers));
             ctx.ExecuteQuery();
             foreach (var list in lists)
             {
                 foreach (var ev in list.EventReceivers)
                 {
                     if (ev.ReceiverName.Equals(Constants.ItemAddedEventReceiverName) ||
                         ev.ReceiverName.Equals(Constants.FieldDeletedEventReceiverName))
                     {
                         events.Add(ev);
                     }
                 }
             }
             foreach (var eve in events)
             {
                 eve.DeleteObject();
             }
             ctx.ExecuteQuery();
         }
     }
     catch (Exception ex)
     {
         LogHelper.Log(ex.Message + ex.StackTrace, LogSeverity.Error);
         throw;
     }
 }
Example #35
0
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            helper.Logger.LogInfo("ProcessEvent - {0}", () => {
                using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, useAppWeb: false))
                {
                    if (clientContext != null)
                    {
                        if (properties.EventType == SPRemoteEventType.AppInstalled)
                        {
                            // Create the default demo document library and view.
                            helper.SPAppHelper.Instance.CreateDocumentLibrary(clientContext, Controllers.HomeController.DEFAULT_LIBNAME);
                            helper.SPAppHelper.Instance.CreateListView(clientContext, Controllers.HomeController.DEFAULT_LIBNAME, Controllers.HomeController.DEFAULT_VIEWNAME);
                            helper.SPAppHelper.Instance.CreateSitePage(clientContext, Controllers.HomeController.DEFAULT_PAGENAME, Controllers.HomeController.DEFAULT_LIBNAME);
                        }
                        else if (properties.EventType == SPRemoteEventType.AppUninstalling)
                        {
                            helper.SPAppHelper.Instance.RemoveDocumentLibrary(clientContext, Controllers.HomeController.DEFAULT_LIBNAME);
                            helper.SPAppHelper.Instance.RemoveSitePage(clientContext, Controllers.HomeController.DEFAULT_PAGENAME);
                        }
                    }
                }
            }, properties.EventType.ToString());
            return(result);
        }
Example #36
0
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            switch (properties.EventType)
            {
            case SPRemoteEventType.ItemAdded:
                ItemAdded(properties);
                break;

            case SPRemoteEventType.AppInstalled:
                Install(properties);
                break;

            case SPRemoteEventType.AppUninstalling:
                UnInstall(properties);
                break;

            default:
                break;
            }


            return(result);
        }
Example #37
0
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            if (properties.EventType == SPRemoteEventType.ItemAdded || properties.EventType == SPRemoteEventType.ItemUpdated)
            {
                using (ClientContext ctx = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
                {
                    Helpers.CreateFullNameHelper.CombineName(properties.ItemEventProperties.ListItemId, ctx);
                }
            }

            using (ClientContext ctx = TokenHelper.CreateAppEventClientContext(properties, useAppWeb: false))
            {
                if (ctx != null)
                {
                    if (properties.EventType == SPRemoteEventType.AppInstalled)
                    {
                        Helpers.AppEventHelper.Install(ctx);
                    }
                    if (properties.EventType == SPRemoteEventType.AppUninstalling)
                    {
                        Helpers.AppEventHelper.UnInstall(ctx);
                    }
                }
            }

            return(result);
        }
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, false))
            {
                if (clientContext != null)
                {
                    string listTitle = "External Events";
                    string remoteEventReceiverSvcTitle = "ConnectORGRER";
                    string remoteEventReceiverName = "ConnectORGRemoteEvent";
                    clientContext.Load(clientContext.Web);
                    List myList = clientContext.Web.Lists.GetByTitle(listTitle);
                    clientContext.Load(myList);
                    clientContext.ExecuteQuery();

                    if (properties.EventType == SPRemoteEventType.AppInstalled)
                    {
                        string opContext = OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri.Substring(0, OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri.LastIndexOf("/"));
                        string remoteEventReceiverSvcUrl = string.Format("{0}/{1}.svc", opContext, remoteEventReceiverSvcTitle);
                        RegisterEventReceiver(clientContext, myList, remoteEventReceiverName, remoteEventReceiverSvcUrl, EventReceiverType.ItemUpdated, 15010);
                    }
                    else if (properties.EventType == SPRemoteEventType.AppUninstalling)
                    {
                        UnregisterAllEventReceivers(clientContext, myList, remoteEventReceiverName);
                    }
                }
            }

            return result;

        }
 /// <summary>
 /// Initializes a new instance of the <see cref="AppPartPropertyUIOverrider" /> class.
 /// </summary>
 /// <param name="hostWebManager">The host web manager.</param>
 /// <param name="properties">The properties of the app event receiver event.</param>
 /// <param name="jQueryFileName">Filename of jquery-x.x.x.min.js sitting in the ASP.NET (Remote Web) Scripts directory.  Example: "jquery-2.1.0.min.js"</param>
 /// <param name="remoteWebFullUrlOverride">Optional override to the remote web full url detection logic.  Example: "https://acutalurl.contoso.com"</param>
 public AppPartPropertyUIOverrider(HostWebManager hostWebManager, SPRemoteEventProperties properties, string jQueryFileName, string remoteWebFullUrlOverride)
 {
     this.hostWebManagerField           = hostWebManager;
     this.propertiesField               = properties;
     this.jQueryFileNameField           = jQueryFileName;
     this.remoteWebFullUrlOverrideField = remoteWebFullUrlOverride;
 }
 public void ProcessOneWayEvent(SPRemoteEventProperties properties)
 {
     Logger.Logger.LogInfo("ProcessOneWayEvent called on ListEventReceiver", () =>
     {
         if (null == properties)
         {
             throw new ArgumentNullException("properties");
         }
         try
         {
             switch (properties.EventType)
             {
             case SPRemoteEventType.ItemUpdated:
                 CreateSite(properties);
                 EnsureGroupsAndPermissions(properties);
                 break;
             }
         }
         catch (Exception ex)
         {
             Logger.Logger.LogError(ex.ToString());
             Debug.WriteLine(ex.ToString());
         }
     });
 }
 private static void EnsureGroupsAndPermissions(SPRemoteEventProperties properties)
 {
     Logger.Logger.LogInfo("EnsureGroupPermissions in ListEventReceiver", () =>
     {
         if (null == properties)
         {
             throw new ArgumentNullException("properties");
         }
         using (var clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
         {
             if (clientContext == null)
             {
                 return;
             }
             // Get the unique site name.
             var siteName = AppHelper.GetSiteUniqueName(clientContext,
                                                        properties.ItemEventProperties.AfterProperties);
             if (String.IsNullOrEmpty(siteName))
             {
                 return;
             }
             SPPermissionsHelper.EnsureGroupsAndPermissions(clientContext, siteName);
         }
     });
 }
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();
            switch (properties.EventType)
            {

                case SPRemoteEventType.WebProvisioned:
                    WebProvisionedMethod(properties);
                    break;
                case SPRemoteEventType.AppInstalled:
                    AppInstalledMethod(properties);
                    break;
                case SPRemoteEventType.AppUpgraded:
                    // not implemented
                    break;
                case SPRemoteEventType.AppUninstalling:
                    AppUnistallingMethod(properties);
                    break;
                case SPRemoteEventType.WebAdding:
                    // you can implement webaddding event
                    break;
                case SPRemoteEventType.WebDeleting:
                    //you can implemet web deleting event if needed.
                default:
                    break;
            }

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

            Logger.Logger.LogInfo("ProcessEvent called on ListEventReceiver", () =>
            {
                if (null == properties)
                {
                    throw new ArgumentNullException("properties");
                }
                try
                {
                    switch (properties.EventType)
                    {
                    case SPRemoteEventType.ItemAdding:
                        CreateSite(properties);
                        EnsureGroupsAndPermissions(properties);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    Logger.Logger.LogError(ex.ToString());
                    Debug.WriteLine(ex.ToString());
                }
            });
            return(result);
        }
Example #44
0
 protected Boolean RERIsEnabled(SPRemoteEventProperties properties, ClientContext clientContext)
 {
     //check and execute if RER is enabled on list
     string DbxlRerEnabledProperty = properties.ItemEventProperties.ListId + Constants.KEY_DBXL_PROPERTY_RER_ENABLED;
     Boolean RerEnabled = Convert.ToBoolean(WebUtils.GetAppProperty(DbxlRerEnabledProperty, clientContext));
     return RerEnabled;
 }
        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);
        }
 public void ProcessOneWayEvent(SPRemoteEventProperties properties)
 {
     using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties)) {
     if (clientContext != null) {
       clientContext.Load(clientContext.Web);
       clientContext.ExecuteQuery();
     }
       }
 }
Example #47
0
 /// <summary>
 /// This method is a required placeholder, but is not used by app events.
 /// </summary>
 /// <param name="properties">Unused.</param>
 public void ProcessOneWayEvent(SPRemoteEventProperties properties)
 {
     switch(properties.EventType)
     {
         case SPRemoteEventType.ItemUpdated:
             HandleItemUpdated(properties);
             break;
     }
 }
 private void HandleItemAdding(SPRemoteEventProperties properties)
 {
     using(ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
     {
         if(null != clientContext)
         {
             new RemoteEventReceiverManager().ItemAddingListEventHandler(clientContext, properties.ItemEventProperties.ListId, properties.ItemEventProperties.ListItemId);
         }
     }
 }
 /// <summary>
 /// takes care of app uninstalling to remove web provisioned event receiver
 /// </summary>
 /// <param name="_properties"></param>
 private void AppUnistallingMethod(SPRemoteEventProperties _properties)
 {
     using (ClientContext _clientContext = TokenHelper.CreateAppEventClientContext(_properties, false))
     {
         if (_clientContext != null)
         {
             new RemoteEventReceiverManager().RemoveWebProvisionedEventReceiver(_clientContext);
         }
     }
 }
 /// <summary>
 /// This method is a required placeholder, but is not used by app events.
 /// </summary>
 /// <param name="properties">Unused.</param>
 public void ProcessOneWayEvent(SPRemoteEventProperties properties)
 {
     //Handles asynchronus events
     switch(properties.EventType)
     {
         case SPRemoteEventType.ListAdded:
             HandleListAdded(properties);
             break;
     }
 }
Example #51
0
        public void ProcessOneWayEvent(SPRemoteEventProperties properties)
        {

            string SHAREPOINT_PID = "00000003-0000-0ff1-ce00-000000000000";  //This is hard-coded for SharePoint Online (ie - all tenants) 
            //The app must have tenant-level permissions and can be installed on any site in the tenancy. You must use the tenant
            //admin site url to get client context.
            Uri sharePointUrl = new Uri("https://<your-domain>-admin.sharepoint.com");
            string myRealm = TokenHelper.GetRealmFromTargetUrl(sharePointUrl);
            try
            {
                string accessToken = TokenHelper.GetAppOnlyAccessToken(SHAREPOINT_PID, sharePointUrl.Authority, myRealm).AccessToken;


                using (ClientContext clientContext = TokenHelper.GetClientContextWithAccessToken(sharePointUrl.ToString(), accessToken))
                {
                    if (clientContext != null)
                    {

                        var requestTitle = properties.ItemEventProperties.AfterProperties["Title"];

                        var tenant = new Tenant(clientContext);
                        var newSite = new SiteCreationProperties()
                        {
                            Url = "https://<your domain>.sharepoint.com/sites/" + requestTitle,
                            Owner = "administrator@<your domain>.onmicrosoft.com",
                            Template = "STS#0",
                            Title = "Workflow provisioning test site two",
                            StorageMaximumLevel = 1000,
                            StorageWarningLevel = 500,
                            TimeZoneId = 7,
                            UserCodeMaximumLevel = 7,
                            UserCodeWarningLevel = 1,
                        };

                        var spoOperation = tenant.CreateSite(newSite);
                        clientContext.Load(spoOperation);
                        clientContext.ExecuteQuery();

                        while (!spoOperation.IsComplete)
                        {
                            System.Threading.Thread.Sleep(2000);
                            clientContext.Load(spoOperation);
                            clientContext.ExecuteQuery();

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                var exception = ex;


            }
        }
 private void RecordInventoryUpdateLocally(SPRemoteEventProperties properties)
 {
     using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
     {
         List expectedShipmentslist = clientContext.Web.Lists.GetByTitle(properties.ItemEventProperties.ListTitle);
         ListItem arrivedItem = expectedShipmentslist.GetItemById(properties.ItemEventProperties.ListItemId);
         arrivedItem["Added_x0020_to_x0020_Inventory"] = true;
         arrivedItem.Update();
         clientContext.ExecuteQuery();
     }
 }
 private void HandleListAdded(SPRemoteEventProperties properties)
 {
     //Below code is called when list created.
     using (ClientContext clientContext = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
     {
         if (null != clientContext)
         {
             new RemoteEventReceiverManager().ListAddedEventHandler(clientContext, properties.ListEventProperties.ListId);
         }
     }
 }
Example #54
0
 /// <summary>
 /// Handles when an app is installed.  Activates a feature in the
 /// host web.  The feature is not required.  
 /// Next, if the Jobs list is
 /// not present, creates it.  Finally it attaches a remote event
 /// receiver to the list.  
 /// </summary>
 /// <param name="properties"></param>
 private void HandleAppInstalled(SPRemoteEventProperties properties)
 {
     using (ClientContext clientContext =
         TokenHelper.CreateAppEventClientContext(properties, false))
     {
         if (clientContext != null)
         {
             new RemoteEventReceiverManager().AssociateRemoteEventsToHostWeb(clientContext);
         }
     }
 }
Example #55
0
 /// <summary>
 /// Removes the remote event receiver from the list and 
 /// adds a new item to the list.
 /// </summary>
 /// <param name="properties"></param>
 private void HandleAppUninstalling(SPRemoteEventProperties properties)
 {
     using (ClientContext clientContext =
         TokenHelper.CreateAppEventClientContext(properties, false))
     {
         if (clientContext != null)
         {
             new RemoteEventReceiverManager().RemoveEventReceiversFromHostWeb(clientContext);
         }
     }
 }
        public void ProcessOneWayEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            switch (properties.EventType)
            {
                case SPRemoteEventType.ItemAdded:
                    HandleItemAddedAsync(properties);
                    break;
            }
        }
        protected override void ExecuteRER(SPRemoteEventProperties properties, ClientContext clientContext)
        {
            clientContext.Load(clientContext.Web, web => web.Lists);
            clientContext.ExecuteQuery();

            switch (properties.EventType)
            {
                case SPRemoteEventType.ItemAdding:
                    {
                        try
                        {
                            UploadPDF(properties, clientContext);
                            //syslogWriter.WriteLog("Work Logs Documents RER triggered", "Item Added");
                        }
                        catch (Exception ex)
                        {
                            errorlogWriter.WriteLog("Work Logs Documents RER Item Added ERROR", ex.Message);
                        }

                        break;
                    }
                case SPRemoteEventType.ItemUpdating:
                    {
                        try
                        {
                            UpdateItem(properties, clientContext);
                            syslogWriter.WriteLog("Work Logs Documents RER  triggered", "Item Updated");
                        }
                        catch (Exception ex)
                        {
                            errorlogWriter.WriteLog("Work Logs Documents RER Item Updated ERROR", ex.Message);
                        }

                        break;
                    }
                case SPRemoteEventType.ItemDeleting:
                    {
                        try
                        {
                            syslogWriter.WriteLog("Work Logs Documents RER  triggered", "Item Deleting");
                        }
                        catch (Exception ex)
                        {
                            errorlogWriter.WriteLog("Work Logs Documents RER Item Deleting ERROR", ex.Message);
                        }

                        break;
                    }
                default:
                    {
                        break;
                    }
            }
        }
 public void ItemAddingToListEventHandler(SPRemoteEventProperties properties, SPRemoteEventResult result)
 {
     try
     {
         UpdateDefaultValuesAdding(properties, result);
     }
     catch (Exception oops)
     {
         System.Diagnostics.Trace.WriteLine(oops.Message);
     }
 }
 private void HandleAppInstalled(SPRemoteEventProperties properties)
 {
     //Below code is used to register ListAdded event on Host Web 
     //Note the token helper method used - second paratemer is to whether to create context with App or not
     using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, false)) 
     {
         if(clientContext != null)
         {
             new RemoteEventReceiverManager().AssociateRemoteEventsToHostWeb(clientContext);
         }
     }
 }
        /// <summary>
        /// Handles app events that occur after the app is installed or upgraded, or when app is being uninstalled.
        /// </summary>
        /// <param name="properties">Holds information about the app event.</param>
        /// <returns>Holds information returned from the app event.</returns>
        public SPRemoteEventResult ProcessEvent(SPRemoteEventProperties properties)
        {
            SPRemoteEventResult result = new SPRemoteEventResult();

            using (ClientContext clientContext = TokenHelper.CreateAppEventClientContext(properties, useAppWeb: false))
            {
                var web = clientContext.Web;
                
                if (!web.ListExists("Book Categories"))
                {
                    var categoriesList = web.Lists.Add(new ListCreationInformation
                    {
                        Title = "Book Categories",
                        TemplateType = (int)ListTemplateType.GenericList
                    });

                    if (!web.ListExists("Books"))
                    {
                        var booksList = web.Lists.Add(new ListCreationInformation
                        {
                            Title = "Books",
                            TemplateType = (int)ListTemplateType.GenericList
                        });
                        
                        //https://karinebosch.wordpress.com/my-articles/creating-fields-using-csom/
                        var schemaMultilineTextField = string.Format("<Field Type='Note' Name='{0}' StaticName='{0}' DisplayName='{0}' NumLines='6' RichText='FALSE' Sortable='FALSE' />",
                            "Description");

                        booksList.Fields.AddFieldAsXml(schemaMultilineTextField, true, AddFieldOptions.DefaultValue);

                        var schemaPictureField = string.Format("<Field Type='URL' Name='{0}' StaticName='{0}' DisplayName='{0}' Format='Image'/>",
                            "Image");

                        booksList.Fields.AddFieldAsXml(schemaPictureField, true, AddFieldOptions.DefaultValue);

                        clientContext.Load(categoriesList, l => l.Id);
                        clientContext.ExecuteQueryRetry();

                        var lookupFieldXml = string.Format("<Field DisplayName='{0}' Type='Lookup' />", "Category");
                        var field = booksList.Fields.AddFieldAsXml(lookupFieldXml, true, AddFieldOptions.DefaultValue);
                        var lookupField = clientContext.CastTo<FieldLookup>(field);
                        lookupField.LookupList = categoriesList.Id.ToString();
                        lookupField.LookupField = "Title";
                        field.Update();

                        clientContext.ExecuteQueryRetry();
                    }
                }
            }

            return result;
        }