SharePoint 2013 ha introdotto le App. Le app SharePoint sono slegate dal sito parent, quindi interagire con il suo contenuto non è un'operazione banale.

In questo articolo esporremo i passi da effettuare per fare il deploy di una lista nel parent site al momento dell'installazione della app. Per fare ciò, la app necessita di un web service hostato in una web application differente per gestire gli eventi.
Il template Auto-Hosted App di Visual Studio semplifica le cose facendo uso di Windows Azure come host della web application.
Dopo aver creato il progetto, apriamo le sue proprietà e settiamo Handle App Installed e Handle App Uninstalling a true e modifichiamo il metodo ProcessEvent nel file AppEventReceiver.svc come segue:
        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();
 
                    ListCollection lists = clientContext.Web.Lists;
                    clientContext.Load(lists);
                    clientContext.ExecuteQuery();
 
                    List myList = lists.GetByTitle("Test");
 
                    switch (properties.EventType) {
                        case SPRemoteEventType.AppInstalled:
                            CreateList(clientContext, lists, myList);
                            break;
                        case SPRemoteEventType.AppUninstalling:
                            RemoveList(clientContext, myList);
                            break;
                    }
                }
            }
 
            return result;
        }
Come si può vedere nell'evento AppInstalled aggiungiamo la nostra lista, in AppUninstalling la rimuoviamo.
        private bool ListExists(ClientContext clientContext, List list)
        {
            try
            {
                clientContext.Load(list);
                clientContext.ExecuteQuery();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
 
        private void CreateList(ClientContext clientContext, ListCollection lists, List list)
        {
            if (!ListExists(clientContext, list))
            {
                ListCreationInformation myListInfo = new ListCreationInformation();
                myListInfo.Title = "Test";
                myListInfo.Url = "Lists/Test";
                myListInfo.TemplateType = (int)ListTemplateType.GenericList;
 
                lists.Add(myListInfo);
                clientContext.Load(lists);
                clientContext.ExecuteQuery();
            }
        }
 
        private void RemoveList(ClientContext clientContext, List list)
        {
            if (ListExists(clientContext, list))
            {
                list.DeleteObject();
                clientContext.Load(list);
                clientContext.ExecuteQuery();
            }
        }
E' importante impostare i permessi nel file AppManifest.xml  come segue:
comments powered by Disqus