An Avanade Blogging Community

Welcome to An Avanade Blogging Community Sign in | Join | Help
in Search

Marco Rizzi - All around Sharepoint

  • Customize Site Actions menu items

    A common question of customers:
    is it possible to customize Site Action menu adding new items or removing existing OOB items? Yes, it is.

    When the publishing page feature is activated, the data source for the “SiteAction” comes from the XML file which lies in the C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\EditingMenu\Siteaction.xml.
    The menu items of Site Action is contained in that file and you can add easily new item in two ways:
    • with features if you want to have the ability to switch the feature on or off depending on site
    • editing a sharepoint file used to customize the menu item for all the sites
    To remove existing item you have to browse to the master page gallery in the site collection and edit “CustomSiteAction.xml” under “EditingMenu” folder.  Here you have to write custom node and set “ChangedNodeId” and “ConfigeMenu” property you can replace your custom console node with existing console node.

    This example remove out-of-box 'Create Page' menu item and add a new one to create page with custom flow:
    <?xml version="1.0" encoding="utf-8" ?>
    <Console>
     <references>
           <reference TagPrefix="cms"
             assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"   namespace="Microsoft.SharePoint.Publishing.WebControls.EditingMenuActions" />
       </references>
       <structure >
         <ConsoleNode ConfigMenu="Replace" ChangedNodeID="wsaCreatePage" />
         <ConsoleNode Action="cms:CreateNewPublishingPageAction" 
             DisplayText="cms,siteactions_createpage_displaytext" 
             Description="cms,siteactions_createpage_description"
             HideIfDisabled="true" 
             UseResourceFile="true" 
             MenuGroupId="100" 
             Sequence="6000"
             IsSiteRelative="true" 
             PermissionContext="CurrentList" 
             ImageUrl="/_layouts/images/crtpage.gif"
             NavigateUrl="/_layouts/Customcreatepage.aspx" 
             ID="wsaCreatePage1"/>
       </structure>
    </Console>

  • Page layouts installed with feature constain illegal characters.

    During this week I had a problem with page layouts installation via features.  In the past, I created a lot of features to install page layouts or to do some operations, but for the first time I had a strange error using some page layouts. Creating new publishing page with some page layouts I had error messages like 'Page contains illegal characters'.

    Opening those page layouts, I found this markup at the end of the page

    <html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"><head>

    <META name="WebPartPageExpansion" content="full">

    <!--[if gte mso 9]><xml>

    <mso:CustomDocumentProperties>

    <mso:PublishingPreviewImage msdt:dt="string">http://devmoss01:10100/fr/_catalogs/masterpage/en-US/Preview Images/ArticleBodyOnly.png, /fr/_catalogs/masterpage/en-US/Preview Images/ArticleBodyOnly.png</mso:PublishingPreviewImage>

    <mso:ContentType msdt:dt="string">Page Layout</mso:ContentType>

    <mso:MasterPageDescription msdt:dt="string">WORLD_STORIA_CRONO</mso:MasterPageDescription>

    <mso:PublishingAssociatedContentType msdt:dt="string">;#CustomPage;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F20079481;#</mso:PublishingAssociatedContentType>

    <mso:PublishingAssociatedVariations msdt:dt="string"></mso:PublishingAssociatedVariations>

    <mso:PublishingHidden msdt:dt="string">0</mso:PublishingHidden>

    </mso:CustomDocumentProperties>

    </xml><![endif]-->

    <title>WORLD_STORIA_CRONO</title></head>

     

    Googling I found only one intesting post on this blog http://www.sharepointblogs.com/tmt/archive/2007/11/19/placeholderpagetitle-is-the-root-of-all-evil.aspx, but unfortunately it was not right for me because all the page layouts contain asp:Content named PlaceHolderPageTitle within field PageTitle.

     

    After some investigations, I solved it. The issue was regarding text case of markup.

     

    This does not work (lower case)

    <asp:content contentplaceholderid="PlaceHolderPageTitle" runat="server">

    <SharePointWebControls:FieldValue id="PageTitle" FieldName="Title" runat="server"/>

    </asp:content>

     

    This works

    <asp:Content ContentPlaceholderID="PlaceHolderPageTitle" runat="server">

    <SharePointWebControls:FieldValue id="PageTitle" FieldName="Title" runat="server"/>

    </asp:Content>

  • Creare form raccolta dati utenti anonimi senza scrivere code-behind

    Lo scopo di questo post è quello di indirizzare la realizzazione dei form di raccolta dati fruibili da utenti internet anonimi che fanno browsing di siti ospitati su SPS. Degli esempi di form possono essere Contact Us, Survey, Pool, Blog Post Comments, ecc…

    Questo studio è dettato dal fatto che gli utenti anonimi non possono accedere alle pagine applicative di sharepoint su siti di tipo Publishing. Questo perchè i siti di publishing quando vengono creati sono configurati per limitare la pagine al quale gli utenti anonimi possono accedere.

    Per ottenere l’elenco delle operazioni che gli utenti anonimi possono fare all’interno dei sito basta consultare l’elenco dei permessi base assegnati al ruolo Limited Access. Per vedere l’elenco occorre andare su Site Settings -> Advanced Permissions -> Permissions level e selezionare Limited Access.

     

    Se comparassimo i permessi base attivati su un sito di Publising con un qualsiasi altro sito, noteremmo che sui siti di publishing il ruolo Limited Access ha disattivati i permessi View Application Pages e Use Remote Interfaces. Sebbene da UI non sia possibile modificare il ruolo Limited Access, è possibile agire sull’attivazione/disattivazione di una feature di effettua il lockdown dei siti. La feature in questione si chiama ViewFormPagesLockdown, quando è attivata i permessi precedentemente elencati vengono disattivati dal ruolo Limited Access, viceversa quando attivata. Per ulteriori info vedi allegato A.

    Una volta che gli utenti anonimi possono accedere alle pagina applicative di SharePoint occorre configurare opportunamente la security, relativamente alle operazione che possono compiere gli utenti anonimi all’interno del sito e delle liste con particolare riguardo a cosa alle azioni permesse.

    Consiglio quindi creare una nuova site collection, tramite gli alternate access mapping, che sarà usata come contenutore di tutte le liste utilizzate per le funzionalità di raccolta dati. In questo modo le configurazioni della security impatteranno solo una parte limitata del sito. Verificare eventualmente la possibilità di creare questa nuova site collection con un template diverso da quello di publishing, in modo da non dover neanche agire sulla configurazione delle security tramite la feature Lockdown. Considerare inoltre il contenuto di default di sito di publishing, tipo document library, master page and page layoy, style library, ecc… se ha senso per la soluzione che si andrà ad implementare.

     

    Operazioni da seguire passo passo

    Step 1 – Creare una nuova site collection e la lista per salvare i dati dei form

    ·         Creare una nuova site collection

    ·         Creare la lista ContactUs e configurarla (colonne e viste)

    Step 2 – Configurare le security per accesso in scrittura dell’utente anonimo

    ·         Abilitare l’accesso anonimo da CA (è indifferente se sulla zona di default o su una zona diversa)

    ·        Abilitare l’accesso anonimo sul sito tramite Advanced Permission, Anonymous Access

    ·         Disattivare la feature di Lockdown
    stsadm.exe –o deactivatefeature –url <site collection url> -filename ViewFormPagesLockdown\feature.xml

    ·         Disattivare l’accesso anonimo sul sito da CA

    ·         Disattivare l’accesso anonimo sul sito impostando a Nothing access

    ·         Riattivare l’accesso anonimo sul sito da CA

    ·         Riattivare l’accesso anonimo sul sito importando a Entire Site o Lists and Libraries secondo le esigenze

    ·         Verificare che il ruolo Limited Access abbia i permessi View Application Pages e Use Remote Interfaces

    ·         Sulla lista appena creata configurare la security facendo breakRoleInheritance e impostare anymonous access a Add item e View Items

    Step 3 – Operatività utente anonimo

    A questo punto della configurazione l’utente anonimo è in grado di scrivere sulla lista configurata, ma è anche in grado di visualizzare tutti gli item inseriti dagli altri non solo sulla lista ContactUs ma su tutte le liste.

    E’ quindi necessario andare sulle liste che l’utente anonimo non deve avere accesso, fare un BreakRoleInheritance e dai privilegi dell’utente anonimo eliminare View Items. In questo modo l’utente anonimo avrà accesso alle sole liste che noi decidiamo e che dovranno essere quelle che contengono i dati dei form di import ed eventualmente quelle con elementi grafici.

    Rimane quindi da oscurare l’elenco degli item presenti sulla lista sia dalla pagina allitems.aspx che su dispform.aspx. Per fare ciò è sufficiente aprire tali pagine con Sharepoint Designer e fare security trimming del html da visualizzare. Per fare Security trimming c’è un controllo OOB di sharepoint:

    <Sharepoint:SPSecurityTrimmedControl runat="server" PermissionsString=" DeleteListItems">

        [content to be rights-trimmed]

    </Sharepoint:SPSecurityTrimmedControl>

     

    dove nella proprietà PermissionString è possibile indicare l’elenco dei permessi che gli utenti devono avere per visualizzare l’html contenuto all’interno di questa sezione.

    In questo esempio ho inserito all’interno del controllo SPSecurityTrimmedControl tutto codice che è contenuto nel content PlaceHolderMain. Così quando l’utente anonimo andrà sulla pagina allitems.aspx vedrà una pagina senza contenuti.

    Allegato A

    http://blogs.msdn.com/ecm/archive/2007/05/12/anonymous-users-forms-pages-and-the-lockdown-feature.aspx

    Allegato B

    http://www.sharepointplatform.com/teamblog/Lists/Posts/Post.aspx?ID=31

    Allegato C

    http://www.sharepointplatform.com/teamblog/Lists/Posts/Post.aspx?ID=29

  • Operatività assegnazioni gruppi/utenti = MOSS Manage User Membership

    Parecchio tempo fa mi fu richiesto di realizzare una feature di SharePoint che permettesse di associare ad un utente contemporaneamente più gruppi. Con mio stupore verificai ne nella nuova versione di sharepoint, dico nuova in quanto era da poco uscita la versione 2007, non era presente una funzionalità del genere. Pensai tra me e me "... veramente strano che non ci sia un fuzionalità di questo tipo, uscirà tra un pò un pacchetto di features che permetteranno di velocizzare operazioni di manutezione e normale operatività ...", ma da oggi ancora nulla a riguardo.

    La feature in questione è MOSS Manage User Membership pubblicata su codeplex all'indirizzo http://www.codeplex.com/mossusermembership

    E' possibile scaricare sia il solution packege di MOSS che i codici sorgenti. Al momento non sono previste nuove release, se perverranno particolari richieste o segnalazioni saranno valutate in toto.

    Ecco alcuni screenshot


    MUM1.jpg

    MUM2.jpg
  • PDC2008 fa rima con maybe

    E' da qualche giorno disponibile il link per registrarsi al PDC2008. Una conferenza alla quale ho già partecipato durante le ultime tre ezioni:

    • 2001 con .NET, Visual Studio .NET e la grande bufala di Hailstorm
    • 2003 con Windows Vista (Longhorn), Mobile e WinFx
    • 2005 con WCF, WPF, WWF

    In realtà più che una conferenza può essere definita LA conferenza sia per la location che è al Convention Center in Downtown Los Angeles sia per il contenuti di altissimo livello per figure quali architetti e sviluppatori. Da segnalare che quest'anno ci sarà la prima vera key note post Bill Gates di Key Ozzie.

     

    Naturalmente è iniziato il toto argomenti: personalmente penso che quest'anno di argomenti caldi ce ne saranno parecchi a partire dal nuovo sistema operativo desktop e mobile,  sperando che rilasceranno qualche bit. Ci saranno anche delle presentazioni di un possibile nuovo office ? Consiglio di tenere sott'occhio l'agenda.

     

    La registrazione in early bird (se effettuata prima del 15 agosto) è 2200 dollari circa, bisognerebbe sapere se l'euro salirà ancora in questi mesi per effettuare un pagamento 'tattico' al momento giusto.

     

    Personalmente mi piacerebbe molto partecipare, al momento però ci sono troppi ma.

  • Maybe Content Deployment will works now.

    Microsoft has release a new package that fix more then 60 issues of Content Deployment. [Well done guys!!]

    To obtain this package, you have to ask it to Microsoft Customer Support Service (CSS).

    For other info:

    http://andrewconnell.com/blog/archive/2008/05/20/MOSS-2007-Content-Deployment-QFE-Pack-Now-Available-via-MSFT.aspx

    http://harbar.net/archive/2008/05/21/MOSS-2007-Content-Deployment-QFE-Pack-Now-Available-via-MSFT.aspx

  • Come settare valori su un campo lookup multi value da codice in modo incrementale

    In questi giorni mi sono imbattutto in un problema che riguarda la scrittura di valori in un field di tipo lookup multi value. Per la precisione: ciò che veniva fatto è valorizzare la collezione del multi value un pò alla volta senza ogni volta salvare l'item, più o meno come riportato

    SPListItem item = getItem();
    //Code 1
    SPFieldLookupValueCollection fieldLookupValues = (SPFieldLookupValueCollection)item["MultiValueField"]; // ok
    fieldLookupValues.Add(new SPFieldLookupValue(1, "value));
    item["MultiValueField"] = fieldLookupValues;
    //... do some operations

    //Code 2
    fieldLookupValues = (SPFieldLookupValueCollection)item["MultiValueField"]; // Exception

    Nel primo blocco di codice viene letto un field, settato il primo valore della collection e successivamente salvata la collection sul item.
    Il secondo blocco, se seguito successivamente al primo, genera una exception di tipo 'Unable to cast object'. Questo perchè è l'oggetto SPListItem che si occupa di mappare la stringa di un lookup multi value, il cui valore è id1;#value1;id2;#value2, in un oggetto di tipo SPFieldLookupValueCollection. Una volta impostato un valore per questo campo, il type del field torna ad essere String, ovvero il tipo con cui viene internamente gestisto.
    Per farlo tornare un oggetto tipizzato a SPFieldLookupValueColletion occorre fare un item.Update() prima del blocco 2.

  • Benvenuto - Welcome

    Ciao a tutti,
    questo è il primo post di benvenuto di un nuovo blog che tratterà argomenti incentrati su Sharepoint (WSS e MOSS). Per ora inizio a scrivendo in italiano, ma nessuno vieta che in futuro proseguirò in inglese, semplicemente dipenderà dai feedback ricevuti e dal tempo che avrò a disposizione.

    Hi everyone,
    this is the welcome post. In this blog I'll talk about Sharepoint (WSS e MOSS) and related arguments. Next posts will be in italian, but if i'll receive a lot of feedback requesting to post in english, maybe i'll change language. English is not my first language and I have a bit of problem to write fast and well. So it's can be a training to improve my english.

    --marco

     

This Blog

Post Calendar

<August 2008>
SuMoTuWeThFrSa
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

Syndication

©2006 Avanade Inc. All Rights Reserved.