Come perdere 2 giorni di lavoro, ovvero: nascondere il Ribbon per gli anonimous users

Il problema di per se non è nascondere il Ribbon, bensi il problema che è venuto fuori è quello che spiego di seguito. Requisito: Nascondere il controllo Ribbon di SharePoint 2010 nel caso la pagina sia vista da un Anonimous user. Soluzione: Inserisco il controllo Ribbon (che è presente nella master page custom che è stata creata per il progetto) nel controllo asp.net che si chiama LoginView usando il template LoggedInTemplate, penso che sia la soluzione migliore evitare di renderizzare il markup quando non ce nè bisogno. Problema: Per qualche strano motivo, se aggiungo una web part CEWP (Content Editor Web Part) alla pagina che usa la mia master page custom, formatto il testo usando i comandi nel tab "format text", salvo la pagina e la rimetto in editing, il tab "format text" non ricompare più. In pratica, non era più possibile formattare il contenuto della CEWP una volta che si metteva in editing la pagina. La prima cosa che mi viene in mente è cercare su google/bing se qualcuno ha avuto lo stesso problema, ma niente, nessuno sembra aver avuto questo problema che mi/ci sta facendo perdere oltre che tempo, anche ore di sonno! Dopo un paio di giorni di ricerche invane, mi imbatto in un post che mi illumina e ci fa uscire dal tunnel in cui io e il buon Francesco ci eravamo infilati.Il problema era appunto (abbastanza assurdo per il vero) che il controllo Ribbon non digerisce bene il controllo LoginView, infatti si può leggere: I finally figured out what was causing this issue.  I'm posting it here for anyone else who happens to run into it.  I was putting the SPRibbon control inside of a LoginView control so that it would only show up when the user was authenticated.  Apparently SharePoint does not like this, and the original issue I posted will show up.  I now hide it via CSS styles by default, and use a LoginView control to change the style of the container for logged in users. Ok, finalmente è chiaro il motivo di questo problema!Come si può quindi risolvere il requisito di nascondere il Ribbon in caso l'utente sia di tipo anonimo? Esistono diversi modi: Nascondere il controllo Ribbon inserendolo in un controllo SPSecurityTrimmedControl e impostando la proprietà PermissionsString con i permessi che l'utente deve avere per poter visualizzare appunto il Ribbon, nel mio caso (sito pubblico) dovrei mettere "AddAndCustomizePages" in modo che sono chi abbia quel permesso possa appunto visualizzare il Ribbon, gli altri niente. <SharePoint:SPSecurityTrimmedControl PermissionsString="AddAndCustomizePages" runat="server"> <div id="s4-ribbonrow" class="s4-pr s4-ribbonrowhidetitle"> .... </div> </SharePoint:SPSecurityTrimmedControl> Nascondere il controllo Ribbon usando JavaScript (magari usando jQuery) al load della pagina, inserendolo in un controllo LoginView usando "AnonymousTemplate" come template: <asp:LoginView ID="LoginView1" runat="server"> <AnonymousTemplate> <script type="text/javascript"> function HideRibbon() { $("#s4-ribbonrow").hide(); } _spBodyOnLoadFunctionNames.push("HideRibbon"); </script> </AnonymousTemplate> </asp:LoginView> Nascondere il controllo Ribbon usando i css (in modo tale che se per qualsiasi motivo JavaScript non sia abilitato, il controllo viene comunque nascosto dal Browser), inserendolo sempre in un controllo LoginView usando "AnonymousTemplate" come template: <asp:LoginView ID="LoginView1" runat="server"> <AnonymousTemplate> <style type="text/css"> #s4-ribbonrow { display:none !important; } </style> </AnonymousTemplate> </asp:LoginView> Qual'è la soluzione migliore? Come sempre dipende dal contesto.In questo caso, la soluzione migliore (che è anche quella sponsorizzata da Francesco :) ) è la prima in quanto si tratta di un sito di publishing ed è meglio evitare di portare sul browser del markup quando non ce nè bisogno.Le altre due soluzioni sono migliori solo quando si vuol evitare di dover impostare ogni singolo permesso che l'utente dovrà avere per soddisfare il requisto di visualizzazione del Ribbon (con la soluzione 1) bensi lo si vuole nascondere solo per gli utenti anonimi.Fra queste ultime due soluzioni preferisco l'ultima in quanto appunto viene eseguita anche se il browser ha problemi con JavaScript. Buon lavoro a tutti! ;)

New Codeplex Project - SharePoint 2010 App Model

It a pleasure to announce the publication of my new project on Codeplex has just ended. The project is called SharePoint 2010 App Model and purpose is to emulate a subset of the functionality related to the new App Model in 2013 SharePoint SharePoint 2010 through the use of the SandBox Solution. Clearly the aim is not to create a true clone of new App Model in SharePoint 2010, also because it wouldn't even make sense, but to create a set of features that can enhance the future migrate applications developed today with this project from 2010 to 2013 version of SharePoint. At this early stage, the project contains a Project Template for Visual Studio 2012 to create one of three types of App that you can create in SharePoint that is SharePoint 2013 Hosted App. On the home page of the project on Codeplex you will find simple instructions in order to start using it right away. Enjoy!

Nuovo progetto Codeplex - SharePoint 2010 App Model

E’ con piacere che comunico che la pubblicazione del mio nuovo progetto su Codeplex si è appena conclusa. Il progetto si chiama SharePoint 2010 App Model è lo scopo è quello di emulare un subset delle funzionalità legate al nuovo App Model di SharePoint 2013 in SharePoint 2010 attraverso l’uso delle SandBox Solution. Chiaramente lo scopo non è quello di creare un vero clone dell nuovo App Model in SharePoint 2010, anche perchè non avrebbe neanche senso, ma di creare un set di funzionalità che possano un domani favorire la migrazione delle applicazioni sviluppate da oggi con questo progetto dalla versione 2010 alla versione 2013 di SharePoint. In questa prima fase il progetto contiene un Project Template per Visual Studio 2012 che permette di creare una delle tre tipologie di App che si possono creare in SharePoint 2013 ovvero le SharePoint Hosted App. Nella home page del progetto su Codeplex si trovano le semplici istruzioni per poter cominciare fin da subito a utilizzarlo. Enjoy!

Microsoft Technical Conferences 2011 Considerazioni Finali

Bella, bellissima esperienza, punto! La mia prima partecipazione alla MSTC e in particolare alla SPOC 2011 in qualità di speaker è stata a dir poco fantastica! Sia per l'emozione di essere sul palco, sia e aggiungerei sopratutto per aver conosciuto un sacco di SharePointer davvero in gamba, dai ragazzi di Green Team a quelli di Pialorsi Sistemi passando per tutti gli altri che anno avuto modo di parlare sul palco di questa importantissima conferenza! Un grazie in particolare a Igor e Paolo per avermi dato la possibilità di partecipare come Speaker!

SharePoint: filtrare Item in base al gruppo o all’utente

Questo è una semplice query CAML che permette di filtrare gli Item in SharePoint in base al gruppo o all’utente specificato nella colonna “AssignedTo”. <Query> <Where> <Or> <Membership Type="CurrentUserGroups"> <FieldRef Name="AssignedTo"/> </Membership> <Eq> <FieldRef Name="AssignedTo"> </FieldRef> <Value Type="Integer"> <UserID/> </Value> </Eq> </Or> </Where> </Query> La colonna “AssignedTo” in questo caso è una colonna di tipo “Person or Group” settata in questo modo: In sostanza, verranno fatti tornare solo gli item che avranno nella colonna “AssignedTo” o il nome del gruppo a cui l’utente corrente appartiene o l’utente stesso (essendoci lo statement Or) Questo può essere utilizzato sia attraverso l’Object Model, sia attreverso una WebPart come la XsltListViewWebPart presente in SharePoint 2010.

SharePoint 2010 Ribbon, Introduzione

Finalmente anche l'interfaccia utente di SharePoint 2010 vede l'introduzione dei ribbon. Anche in SP 2010 i ribbon sono gestiti come una serie di "Tab", ogni tab contiene uno o più "Gruppi", identificati visualmente da una label, dove vengono posizionati i controlli. I tipi di controllo che vengono gestiti sono all'interno dei gruppi sono: Button, Checkbox, Color Picker, Combo Box, Drop Down, Flyout Anchor, Insert Table, Label, Menu, Menu Section, MRU Split Button, Spinner, Split Button, Text Box, Toggle Button. A ogni controllo può essere associato un solo comando. Similmente a Office 2007 e 2010, anche in SP 2010 possiamo andare a personalizzare ogni aspetto dei ribbon, dall'aggiunta di tab, all'aggiunta di gruppi o controlli, fino alla modifica di quelli già presenti. Di seguito un esempio di file Elements.xml con il CustomAction contenente la definizione del Tab custom: <?xml version="1.0" encoding="utf-8"?> <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <CustomAction Id="MyCustomRibbonTab" Location="CommandUI.Ribbon.ListView" RegistrationId="101" RegistrationType="List"> <CommandUIExtension> <CommandUIDefinitions> <CommandUIDefinition Location="Ribbon.Tabs._children"> <Tab Id="Ribbon.CustomTabExample" Title="My Custom Tab" Description="My Custom Tab" Sequence="501"> <Groups Id="Ribbon.CustomTabExample.Groups"> <Group Id="Ribbon.CustomTabExample.CustomGroupExample" Description="Custom Group" Title="Custom Group" Sequence="52"> <Controls Id="Ribbon.CustomTabExample.CustomGroupExample.Controls"> <Button Id="Ribbon.CustomTabExample.CustomGroupExample.HelloWorld" Command="CustomTabExample.HelloWorldCommand" Sequence="15" Description="Hello, World!" LabelText="Hello, World!"/> </Controls> </Group> </Groups> </Tab> </CommandUIDefinition> </CommandUIDefinitions> <CommandUIHandlers> <CommandUIHandler Command="CustomTabExample.HelloWorldCommand" CommandAction="javascript:alert('Hello, world!');" /> </CommandUIHandlers> </CommandUIExtension> </CustomAction> </Elements> Come si può notare, nella definizione della CustomAction, l’azione vera e propria (“CustomTabExample.HelloWorldCommand”) non è nient’altro che una funzione JavaScript. Nei prossimi post, scenderò nel dettaglio di ogni singola funzionalità. Stay tuned!!

PowerShell and SharePoint 2010

Come è avvenuto per Exchange 2007, adesso anche SharePoint 2010 ha il supporto nativo a PowerShell.PowerShell per chi non lo sapesse è la "nuova"shell sviluppata da Microsoft che va a rimpiazzare la shell tradizionale (cmd.exe).Essa si basa sul framework .NET e oltre ad avere un linquaggio di scripting molto evoluto ha la possibilità di essere estesa tramite classi .NET chiamate cmdlets. Bene, a cosa ci può servire? Di sicuro per andare a automatizzare una serie di operazioni che possono risultare ripetitive come: creazione o eliminazione di site, configurazione di permessi, backup, amministrazione di feature, e in generale tutto quello che si può amministrare in SharePoint 2010. La cosa molto interessante è che con PowerShell possiamo passare il risultato di un cmdlets a un'altra cmdlets, permettendo la creazione di script anche molto complessi. Un esempio potrebbe essere quello di andare a creare una site collection, andando a prendere tutte le infomazioni necessare magari da un db o da un file xml. Certo, potremmo realizzare un programma che faccia questo tramite l'OM, ma fatelo fare a un sistemista!! :-D Indubbiamente, in certi ambiti, l'utilizzo di linguaggi di scripting è da preferire alla creazione di programmi su misura.  PowerShell per SharePoint 2010 offre ben 535 cmdlets che possono essere utilizzate da sole o combinate in script e che forniscono una copertura totale su tutti gli aspetti di amministrazione di SharePoint 2010 stesso. alcuni link utili: TechNet;  SharePoint 2010: STSADM and PowerShell;

I'm a SharePoint 2010 Ignite Instructor in Italy

Dirlo adesso, dopo aver già fatto il corso come trainer, non è la stessa cosa!Comunque dopo aver partecipato al "SharePoint 2010 Ignite delevoloper training" a Amsterdam a novembre e aver sostenuto un'intervista, posso affermare che ufficialmente sono il trainer ufficiale per l'italia per il corso Ignite su SharePoint 2010 parte sviluppo.Per chi non lo sapesse, i corsi di tipo "Ignite" sono corsi a cui possono partecipare solo partner Microsoft sotto invito stesso di Microsoft e sono erogati o dalla stessa Microsoft o da trainer autorizzati.Ovviamente non posso che ringraziare tutti quelli che mi hanno offerto questa opportunità. 

SharePoint 2010, novità per gli sviluppatori

Ovviamente tutti sanno che da questa versione SP ha finalmente una stretta integrazione con VisualStudio 2010. Finalmente perché chi ha sviluppato anche solo una webpart sa cosa vuol dire aver a che fare con SP 2007. Ma questa non è l’unica novità. Le novità più importanti per noi sviluppatori riguardano diversi fronti, dalle liste, all’integrazione di dati esterni a SP, ai tool di sviluppo come accennato prima. Quello che mi ha reso veramente felice è la possibilità di scrivere le query che prima dovevamo scrivere in CAML (usate tramite l‘OM), direttamente in Linq2SP. Integrato in modo nativo in SP 2010, Linq2SP permette di creare il DataContext tramite un tool (spmetal.exe) e poi su questo effettuare query linq come abbiamo sempre fatto per esempio in LinqToEntities. Quindi finalmente scriviamo anche qui query tipizzate, sfruttando join, projection, ecc. ecc. L'introduzione del Client Object Model permette di scrivere applicazioni che utilizzano un sotto insime dell’OM di SP ma che non devono più per forza di cose risiedere sul server. Prima uno dei modi era quello di utilizzare i webservice che SP offre, adesso possiamo mantenere la coerenza di sviluppo utilizzando un OM praticamente simile a quello lato server (è pur sempre un sotto insieme). Quello che è veramente cool è che possiamo usare il Cliente OM in applicazioni .NET (console, winform, WPF, ecc.), in Silverlight e soprattutto in JavaScript. Questo permette di poter scrivere una serie di operazioni che prima richiedevano magari dei postback lato server in modo da migliorare la user experience e aumentare le performance (meno postback si fanno, meglio è). Ricordiamo che SP 2010 presenta un’interfaccia utente completamente riscritta. La presenza dei Ribbon e del suo modello di estendibilità, fanno capire che l’utilizzo di JavaScript sarà sempre più “indispensabile”. Creare custom action che si basano su postback, vuol dire buttare all’aria tutto il framework e il “modello di utilizzo” che Microsoft con SP 2010 vuole (giustamente) imporre con questa nuova versione. Quindi morale della favola: Client Object Model a go go!!!! ;-) La parte di accesso a dati esterni è stata migliorata e non di poco. I “Businnes Connectivity Services” permettono di poter accedere non solo in lettura ma anche in inserimento, cancellazione e modifica, a fonti dati di tipo relazionali, web service, classi .NET e a Connector custom sviluppati proprio con Visual Studio 2010. Quindi un modello estendibile che virtualmete permette di interfacciare qualsiasi tipo di fonte dati. Questi dati vengono gestiti con nuovi “type” chiamati External Content Type, che vengono visti dal sistema come dei normali content type. Quindi possibilità di gestire lookup su queste liste (External List) e via dicendo. Inoltre i BCS vengono anche utilizzati per l’accesso ai dati in modo disconnesso tramite SharePoint Workspace 2010 (ex Groove) e Outlook 2010. Tutto questo ben di dio è presente dalla versione “SharePoint Foundation” :-D Per quanto riguarda le liste le migliorie più importanti possono essere riassunte nella gestione di costraint simili a quelle di un db relazionale per i campi di lookup, nella definizione di colonne che siano “unique” e nella validazioni dei campi prima di effettuare inserimenti o modifiche, anche con formule custom. Finalmente quindi, possiamo mantenere la coerenza dei dati in modo “out of the box” senza ricorrere a barba trucchi o a codice custom. Inoltre, oltra all’integrazione con Visual Studio 2010, adesso SharePoint Designer 2010 può essere utilizzato come vero e proprio tool di sviluppo. Questo perché SP permette di salvare i “template” e successivamente importali in Visual Studio 2010 per andare a creare le feature e estendere le customizzazioni che abbiamo fatto utilizzando un tool molto più semplice di Visual Studio. Le novità non finiscono qua, queste sono solo alcune delle cose che ho voluto sottolineare perché rappresentano veramente un passo avanti notevole. Vorrei aggiungere come poi, grazie appunto all’integrazione con Visual Studio 2010, le difficoltà nel sviluppare in SharePoint 2010 si siano notevolmente abbassate. Ovviamente non voglio dire che adesso chiunque può sviluppare su SharePoint 2010 senza neanche conoscerlo, ma intendo dire che la curva di apprendimento si è abbassata. Adesso a uno sviluppatore ASP.NET risulta più famigliare sviluppare estensioni per SP 2010 rispetto a quello che poteva essere sviluppare in SP 2007. Nei prossimi post parlerò in modo più approfondito di tutte queste cose.

Get Started Developing on SharePoint 2010

Ecco una serie di link con materiale utile per cominciare a familiarizzare con la programmazione in SharePoint 2010. The SharePoint 2010 Developer Evaluation Guide:  http://go.microsoft.com/fwlink/?LinkId=167784  A whitepaper by David Chappell describing the SharePoint 2010 Developer Platform:  http://go.microsoft.com/fwlink/?LinkId=167783 Online Course for SharePoint 2010 Developer:  http://MSSharePointDeveloper.com Buona lettura/visione.

About the author


Fabio Franzini is Senior Consultant, Software Engineer and Trainer, specializing mainly on SharePoint, ASP.NET, web solutions and in general about everything that revolves around the Microsoft web platform. [more]

Translate

Month List

Page List