Office 365 Developer Bootcamp a Milano

Se siete sviluppatori Office 365 o SharePoint, il 14 novembre non potete perdervi il developer Bootcamp che stiamo organizzando a Milano.
Tappa unica organizzata da Fabio Franzini, in cui io e Peppe daremo una mano durante tutta la giornata.
Dopo alcune sessioni introduttive vi diamo la possibilità di sviluppare direttamente dai vostri PC dei laboratori o comunque sia potete farci delle domande sulle tecnologie che girano intorno a Office 365, come Teams, Graph API, Office Add-ins, SharePoint Add-ins e tante altre.
In particolare in questa giornata ci concentreremo sullo SharePoint Framework e sulle Microsoft Graph API.

Per particare all'evento vi dovete semplicemente iscrivere utilizzando questo link: https://www.eventbrite.it/e/office-365-developer-bootcamp-milano-tickets-38377577367
L'evento si svolgerà nella nuova sede Microsoft in via Pasubio 21, che è molto vicina alla fermata della metro Garibaldi, quindi molto comoda.
Ci è stata riservata una sala abbastanza capiente, ma il consiglio è quello di iscrivervi subito per non perdere questa occasione.

Nei prossimi giorni vi aggiornerò in modo più dettagliato su cosa dovrete aver installato sul proprio computer per essere produttivi fin dai primi momenti della giornata.

Volete un altro motivo per partecipare a questa giornata?

Passerete una tranquilla giornata di novembre con questi tre bei ragazzi!
Se vi sempra poco!
:) 

SharePoint Saturday Milan: the day after and slides

Sabato, come ho scritto in precedenza, si è tenuta la tappa italiana dello SharePoint Saturday a Milano.
Giornata ad alto contenuto tecnologico vista l'altezza degli speaker.
Sentirmi infatti in mezzo a nomi del genere mi ha fatto un po' strano, ma evidentemente ci dovevo essere anche io. :)

Durante la mia sessione ho parlato di come realizzare un'applicazione ASP.NET (e come schedularla) per interagire con le Graph API.
Non con il solito approccio che si trova spesso in cui si interrogano le Graph con l'utente attualmente loggato, ma con la delega a un'applicazione che può accedere praticamente a tutto il tenant AD a cui è legato.
Questo approccio ovviamente apre molti scenari per sviluppare molte applicazioni o utility.
Qua sotto trovate le mie slide, al cui interno, potete trovare anche il link all'applicazione che ho fatto vedere durante le demo.

Ci vediamo al prossimo SharePoint Saturday italiano...

 

SharePoint Saturday Milano 30 Settembre 2017: agenda e altre informazioni

Torna a Milano uno degli eventi più importanti su SharePoint e Office 365: lo SharePoint Saturday.
Direttamente nella nuova casa di Microsoft, il 30 settembre, ne vedremo delle belle. :)

Come sempre ci ha abituato questo format, speaker che arrivano un po' da tutto il mondo oltre a noi SharePoint Fighters italiani.
Quest'anno avrò l'onore di alternarmi sul palco con Peppe, Fabio, Igor, Paolo e Riccardo.

Potete iscrivervi direttamente da questo link e vi consiglio di affrettarvi perchè i posti stanno per esaurire.
A dimostrazione del fatto che lo SharePoint Saturday è garanzia di buoni contenuti, sia per sviluppatori che per IT Pro.

Potete trovare l'agenda completa della giornata a questo link.
Io parlerò sia alle 12:00 per presentare il prodotto a cui sto lavorando in questo periodo con 4ward.
Poi alle 16:15 avrò una sessione molto più tecnica in cui vi parlerò di come realizzare con ASP.NET e Azure un servizio che va a interagire con le Graph API del vostro Tenant, con la possibilità di accedere alle informazioni di SharePoint, Calendari, Email, Tasks e tanto altro.
Vi andrò a svelare alcuni "segreti" che si celano dietro al nostro prodotto e soprattutto agli ultimi sviluppi che stiamo realizzando per realizzazione di un bot all'interno di SharePoint online e Microsoft Teams.

Dopo le sessioni ovviamente appuntamento tutto insieme per bene una birra e parlare di tecnologia.

Se avete qualche domanda o argomento da approfondire durante la sessione, scrivetemi pure. Non siate timidi. :)
I miei riferimenti li trovate su http://about.emanuelebartolesi.com

Buon lavoro a tutti!

Leggere il profilo di un utente da uno SharePoint Addin con C# e ASP.NET

In uno SharePoint Addin, realizzato con ASP.NET, può capitare di dover leggere delle proprietà dal Profile Service.
Per leggere le proprietà dell'utente corrente è molto semplice.
Basta istanziare l'oggetto People Manager con il contesto dell'applicazione e leggere le proprietà con il metodo "GetMyProperties()".

            var peopleManager = new PeopleManager(clientContext);
            var personProperties = peopleManager.GetMyProperties();

Se invece dobbiamo leggere il profilo di un altro utente, il lavoro da fare è un po' più complesso e sicuramente non risolvibile con una soluzione "pulitissima".

In questo caso dobbiamo istanziare un nuovo contesto, non per il sito corrente, ma del sito di amministrazione di SharePoint.
Ovviamente questo vi fa capire subito che l'utente che deve avere accesso a quelle informazioni, deve avere accesso anche all'amministrazione del tenant.
Visto che non è il caso di dare a tutti i diritti su quel sito, conviene creare un utente di servizio che ci possa accedere ed usare quello.
Per comodità vi inserisco il codice che sto usando io.
Ovviamente dovete sostituire i valori di esempio che ho messo con i vostri.
Altra nota: il nome dell'utente di cui si vogliono prendere le proprietà deve essere esattamente in quel formato.

        public void ReadUserProfileProperties()
        {
            var serverUrl = "https://tenant-admin.sharepoint.com/";
            var targetUser = "i:0#.f|membership|###email###";

            var adminUsername = "";
            var adminPassword = "";

            var securePassword = new SecureString();
            foreach (char c in adminPassword)
            {
                securePassword.AppendChar(c);
            }

            var clientContext = new ClientContext(serverUrl);
            clientContext.Credentials = new SharePointOnlineCredentials(adminUsername, securePassword);

            var peopleManager = new PeopleManager(clientContext);
            var personProperties = peopleManager.GetPropertiesFor(targetUser);

            clientContext.Load(personProperties);
            clientContext.Load(personProperties, p => p.AccountName, p => p.UserProfileProperties);
            clientContext.ExecuteQuery();

            foreach (var property in personProperties.UserProfileProperties)
            {
                Console.WriteLine(string.Format("Key: {0} - Value: {1}",
                    property.Key.ToString(), property.Value.ToString()));
            }
        }