Quantcast
Channel: Developing Apps for SharePoint 2013 forum
Viewing all articles
Browse latest Browse all 8089

How to remove eventreceiver when handling AppUninstalling in a RER without getting access denied

$
0
0

I am trying to remove an eventreceiver from the clientContext.Web.EventReceivers

by using DeleteObject() but I am getting Access Denied exception

In my appmanifest.xml I already granted full control to the app

Within my AppEventReceiver I have:

if (properties.EventType == SPRemoteEventType.AppUninstalling)

{

                SharePointContextToken contextToken = TokenHelper.ReadAndValidateContextToken(properties.ContextToken, OperationContext.Current.IncomingMessageHeaders.To.Host);
                string appOnlyAccessToken = TokenHelper.GetAppOnlyAccessToken(contextToken.TargetPrincipalName, properties.AppEventProperties.HostWebFullUrl.Authority, contextToken.Realm).AccessToken;

                //string appOnlyAccessToken = TokenHelper.GetAppOnlyAccessToken(SHAREPOINT_PID, properties.AppEventProperties.HostWebFullUrl.Authority, TokenHelper.GetRealmFromTargetUrl(properties.AppEventProperties.HostWebFullUrl)).AccessToken;
                using (ClientContext clientContext = TokenHelper.GetClientContextWithAccessToken(properties.AppEventProperties.HostWebFullUrl.ToString(), appOnlyAccessToken))
                {
                    try
                    {
                        clientContext.Load(clientContext.Web);
                        clientContext.Load(clientContext.Web.EventReceivers);
                        clientContext.Load(clientContext.Web, web => web.Title);
                        clientContext.Load(clientContext.Web, web => web.CurrentUser.LoginName);
                        clientContext.ExecuteQuery();

                        //IEnumerable<EventReceiverDefinition> receivers = clientContext.LoadQuery(clientContext.Web.EventReceivers.Where(e => e.ReceiverName == "GroupUserAddedRER"));
                        //clientContext.ExecuteQuery();
                        EventReceiverDefinitionCollection receivers = clientContext.Web.EventReceivers;

                        List<EventReceiverDefinition> receiversToDelete = new List<EventReceiverDefinition>();
                        foreach (var rec in receivers)
                        {
                            if (rec.ReceiverName == "GroupUserAddedRER")
                                receiversToDelete.Add(rec);
                        }

                        foreach (var recToDelete in receiversToDelete)
                        {
                            recToDelete.DeleteObject();
                        }
                        clientContext.ExecuteQuery();
                    }
                    catch (Exception)
                    {
                        result.Status = SPRemoteEventServiceStatus.CancelNoError;
                    }
                }

}



Viewing all articles
Browse latest Browse all 8089

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>