/// <summary> /// Controller servicing data for the add-in's home page /// </summary> /// <returns></returns> public async Task <ActionResult> Index() { using (var cc = ContextProvider.GetWebApplicationClientContext(Settings.SiteCollection)) { if (cc != null) { // Usage tracking SampleUsageTracking(cc); // Hookup event to capture access token cc.ExecutingWebRequest += Cc_ExecutingWebRequest; var lists = cc.Web.Lists; cc.Load(cc.Web, w => w.Url); cc.Load(lists, l => l.Include(p => p.Title, p => p.Id, p => p.Hidden)); cc.ExecuteQueryRetry(); WebHookManager webHookManager = new WebHookManager(); // Grab the current lists List <SharePointList> modelLists = new List <SharePointList>(); List <SubscriptionModel> webHooks = new List <SubscriptionModel>(); foreach (var list in lists) { // Let's only take the hidden lists if (!list.Hidden) { modelLists.Add(new SharePointList() { Title = list.Title, Id = list.Id }); // Grab the currently applied web hooks var existingWebHooks = await webHookManager.GetListWebHooksAsync(cc.Web.Url, list.Id.ToString(), this.accessToken); if (existingWebHooks.Value.Count > 0) { foreach (var existingWebHook in existingWebHooks.Value) { webHooks.Add(existingWebHook); } } } } // Prepare the data model SharePointSiteModel sharePointSiteModel = new SharePointSiteModel(); sharePointSiteModel.SharePointSite = Settings.SiteCollection; sharePointSiteModel.Lists = modelLists; sharePointSiteModel.WebHooks = webHooks; sharePointSiteModel.SelectedSharePointList = modelLists[0].Id; return(View(sharePointSiteModel)); } else { throw new Exception("Issue with obtaining a valid client context object, should not happen"); } } }
private async Task ExecuteWebHooksLogic() { using (var cc = spContext.CreateAppOnlyClientContextForSPAppWeb()) { cc.ExecutingWebRequest += Cc_ExecutingWebRequest; var lists = cc.Web.Lists; cc.Load(cc.Web, w => w.Url); cc.Load(lists, l => l.Include(p => p.Title, p => p.Id, p => p.Hidden)); cc.ExecuteQueryRetry(); WebHookManager webHookManager = new WebHookManager(); // Grab the current lists List <SharePointList> modelLists = new List <SharePointList>(); List <SubscriptionModel> webHooks = new List <SubscriptionModel>(); foreach (var list in lists) { if (!list.Hidden) { modelLists.Add(new SharePointList() { Title = list.Title, Id = list.Id }); var existingWebHooks = await webHookManager.GetListWebHooksAsync(cc.Web.Url, list.Id.ToString(), this.accessToken); if (existingWebHooks.Value.Count > 0) { foreach (var existingWebHook in existingWebHooks.Value) { webHooks.Add(existingWebHook); } } } } SharePointSiteModel sharePointSiteModel = new SharePointSiteModel(); sharePointSiteModel.Lists = modelLists; sharePointSiteModel.WebHooks = webHooks; sharePointSiteModel.SelectedSharePointList = modelLists[0].Id; phWebHookTable.Controls.Clear(); if (sharePointSiteModel.WebHooks.Count() == 0) { phWebHookTable.Controls.Add(new Literal() { Text = "No web hooks..." }); } else { StringBuilder sb = new StringBuilder(); sb.Append("<table><tr><th>Actions</th><th>ID</th><th>List name</th><th>Notification URL</th><th>Expiration time</th></tr>"); foreach (var webHook in sharePointSiteModel.WebHooks) { var list = sharePointSiteModel.Lists.Where(f => f.Id == new Guid(webHook.Resource)).FirstOrDefault(); string listName = ""; if (list != null) { listName = String.Format("{0} - {1}", list.Title, webHook.Resource); } sb.Append($"<tr>"); sb.Append($"<td><a href='javascript:__doPostBack(\"deletewebhook\",\"{webHook.Id}||{list.Id.ToString("D")}\");'>Delete</a></td>"); sb.Append($"<td>{webHook.Id}</td>"); sb.Append($"<td>{listName}</td>"); sb.Append($"<td>{webHook.NotificationUrl}</td>"); sb.Append($"<td>{webHook.ExpirationDateTime}</td>"); sb.Append($"</tr>"); } sb.Append("</table>"); phWebHookTable.Controls.Add(new Literal() { Text = sb.ToString() }); } ListDropDown.DataSource = from l in sharePointSiteModel.Lists select new System.Web.UI.WebControls.ListItem() { Value = l.Id.ToString("D"), Text = l.Title + "||" + l.Id.ToString("D") }; ListDropDown.DataBind(); } }