<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Fabio Carucci's WebLogs</title>
        <link>http://blogs.ugidotnet.org/FabioCarucci/Default.aspx</link>
        <description>"...You may say I'm a dreamer, but I'm not the only one..." (Imagine)</description>
        <language>it-IT</language>
        <copyright>Fabio Carucci</copyright>
        <managingEditor>fabio.carucci@alice.it</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <image>
            <title>Fabio Carucci's WebLogs</title>
            <url>http://blogs.ugidotnet.org/images/RSS2Image.gif</url>
            <link>http://blogs.ugidotnet.org/FabioCarucci/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Che Bravi!</title>
            <category>Others</category>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2008/06/29/che-bravi.aspx</link>
            <description>&lt;p align="justify"&gt;Mi ero preparato un po’ di esempi di codice in ausilio ad una giornata di corso sui design patterns, poi però ho pensato che forse, per un fine didattico, la cosa migliore che potessi fare era di “raccontare” ai partecipanti una serie di scenari in cui poter applicare, per ciascuno, uno specifico pattern e lasciare a loro il compito di trovare un modo per risolvere il problema; dopodichè gli avrei presentato il pattern e illustrato il mio esempio di implementazione.&lt;/p&gt;  &lt;p align="justify"&gt;Mi ha meravigliato che, per un buon 70% ci sono sempre andati vicino, segno che i patterns sono soluzioni comunque vicine alla logica umana piuttosto che a quella di un guru dell’IT e, probabilmente, segno che le attività dei labs svolte negli incontri passati sono state utili per far passare le loro “menti” da un approccio procedurale ad uno object oriented.&lt;/p&gt;  &lt;p align="justify"&gt;Bravi…&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e8235636-8913-4a08-9aca-cbf1b58add44" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Corsi" rel="tag"&gt;Corsi&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OOP" rel="tag"&gt;OOP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Patterns" rel="tag"&gt;Patterns&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/93213.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2008/06/29/che-bravi.aspx</guid>
            <pubDate>Sun, 29 Jun 2008 11:48:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/93213.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2008/06/29/che-bravi.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/93213.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/93213.aspx</trackback:ping>
        </item>
        <item>
            <title>Appello ai Signori Clienti</title>
            <category>Others</category>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2008/06/22/appello-ai-signori-clienti.aspx</link>
            <description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Questo è un appello rivolto a qualsiasi categoria di azienda italiana che fa uso di tecnologia software e si avvale della consulenza di aziende IT per svilupparlo.&lt;/p&gt;  &lt;p&gt;Cari Clienti, vi prego, fate capire in modo chiaro quali sono le vostre necessità e, se pensate di sapere esattamente cosa volete, se decidete quindi di scrivere da voi un documento dei requisiti, fatelo pure ma che sia solo un aiuto ulteriore per migliorare la comunicazione fra voi e i vostri consulenti IT; non fatelo solo perchè non avete voglia e tempo di “parlare”, è un grande errore perchè il risultato potrebbe non essere ciò che immaginavate.&lt;/p&gt;  &lt;p&gt;Magari accade di rado, ma se i vostri consulenti vi forniscono dei suggerimenti sull’approccio al ciclo di sviluppo del software diversi da quelli che avete sempre utilizzato, fate il favore, rimettevi in gioco, datevi una alternativa, in fondo state pagando qualcuno per aiutarvi.&lt;/p&gt;  &lt;p&gt;Ricordatevi che il mondo dell’IT è in continua evoluzione e qualcuno nel mondo cerca di trovare nuove pratiche che aiutino a comprendervi e sviluppare al meglio il sistema di cui avete bisogno, quindi non è detto che quello che avete imparato dieci anni fa sia la perfezione, provate il CAMBIAMENTO!&lt;/p&gt;  &lt;p&gt;Questo appello non è a titolo personale, bensì frutto di alcune chiacchierate con persone che partecipano all’erogazione di miei corsi. &lt;/p&gt;  &lt;p&gt;Ed è solo l’inizio…&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d53f6d74-a397-4859-bf16-f639d4402790" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Corsi" rel="tag"&gt;Corsi&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Tecnologie" rel="tag"&gt;Tecnologie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Metodologie" rel="tag"&gt;Metodologie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Software" rel="tag"&gt;Software&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/93121.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2008/06/22/appello-ai-signori-clienti.aspx</guid>
            <pubDate>Sun, 22 Jun 2008 09:48:56 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/93121.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2008/06/22/appello-ai-signori-clienti.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/93121.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/93121.aspx</trackback:ping>
        </item>
        <item>
            <title>[OT] stefanoefabiola.org</title>
            <category>Others</category>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2008/01/12/ot-stefanoefabiola.org.aspx</link>
            <description>&lt;p&gt;Sono amici di un caro vecchio amico, si erano appena sposati ed erano sull'aereo caduto il 4 gennaio scorso in Venezuela.&lt;/p&gt;  &lt;p&gt;Il titolo del post corrisponde ad un sito: &lt;a href="http://www.stefanoefabiola.org" target="_blank"&gt;stefanoefabiola.org&lt;/a&gt;, costruito per dare e soprattutto ricevere possibili notizie in merito alla scomparsa dell'aereo, dato che non si trovano rottami. Forse si è inabissato nel punto in cui dovrebbe esser caduto, circa 1200 metri di profondità, o forse è caduto su un'isola. Non lo sappiamo.&lt;/p&gt;  &lt;p&gt;State ascoltando o vedendo nei TG vari le novità su questa tragedia? No, ed è per questo che serve tener viva la voce, altrimenti c'è il rischio che vengano abbandonate le ricerche per sempre.&lt;/p&gt;  &lt;p&gt;Chissà se qualche amico che legge questo blog, magari dagli USA (visto che ricevo visite anche da là), può in qualche modo parlare con quelli di TerraServer per dare una mano agli amici e ai familiari che cercano queste persone a metter su qualcosa sulla falsa riga di ciò che è stato fatto per Jim Gray un anno fa?&lt;/p&gt;  &lt;p&gt;Leggete il sito, grazie a tutti.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/90668.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2008/01/12/ot-stefanoefabiola.org.aspx</guid>
            <pubDate>Sat, 12 Jan 2008 18:00:42 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/90668.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2008/01/12/ot-stefanoefabiola.org.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/90668.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/90668.aspx</trackback:ping>
        </item>
        <item>
            <title>[OT] Bloggare a 86 anni</title>
            <category>Others</category>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/10/15/ot-bloggare-a-86-anni.aspx</link>
            <description>&lt;p&gt;Bello questo blog, parole semplici ma piene di esperienza. E' il blog di una nonna, e non è nè una battuta nè un insulto, chi lo riempie ogni giorno è una signora di ottantasei anni, della Toscana, una insegnante in pensione, che accudisce il marito malato e si sente sola, o meglio forse si sentiva sola, poi due anni fa ha iniziato a scrivere e, qualche giorno fa, è stata intervistata da Repubblica.&lt;/p&gt;  &lt;p&gt;Andate a vedere quanti commenti, peccato che non ha un RSS attivo...forse non sa cos'è. Però è forte lo stesso. Leggetelo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://neddagottardi.splinder.com/" target="_blank"&gt;L'eredità di Nedda&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/88961.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/10/15/ot-bloggare-a-86-anni.aspx</guid>
            <pubDate>Mon, 15 Oct 2007 18:49:02 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/88961.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/10/15/ot-bloggare-a-86-anni.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/88961.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/88961.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con SOA e... WCF - #1</title>
            <category>.NET Framework</category>
            <category>SOA</category>
            <category>WCF</category>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/10/15/88955.aspx</link>
            <description>&lt;p align="justify"&gt;&lt;font size="2"&gt;&lt;/font&gt;Abbiamo la necessità di implementare un client WCF che sia in grado di effettuare il download automatico dei metadati del servizio remoto e configurare un proxy che sia in grado di stabilire una comunicazione?&lt;/p&gt;
&lt;p align="justify"&gt;Utilizziamo le classi &lt;strong&gt;&lt;em&gt;MetadataExchangeClient, MetadataSet, WsdlImporter &lt;/em&gt;&lt;/strong&gt;e&lt;strong&gt;&lt;em&gt; ServiceEndpointCollection&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p target="_blank"&gt;&lt;img id="id" height="335" alt="MetadataExchangeClient" width="980" border="0" src="http://www.fabiocarucci.it/me/MetadataExchangeClient_ETC_thumb.jpg" /&gt; &lt;/p&gt;
&lt;p align="justify"&gt;creiamo un oggetto &lt;em&gt;MetadataExchangeClient&lt;/em&gt; nel quale definiamo la URI del servizio remoto e specifichiamo di voler richiedere il documento WSDL di descrizione del servizio&lt;/p&gt;
&lt;p align="justify"&gt; &lt;/p&gt;
&lt;p align="justify"&gt; MetadataExchangeClient metadataExchange = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; MetadataExchangeClient&lt;/p&gt;
&lt;pre&gt; (&lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; Uri("&lt;span style="COLOR: #8b0000"&gt;http://localhost:8000/ServizioRemoto/?wsdl&lt;/span&gt;"),&lt;/pre&gt;
&lt;pre&gt; MetadataExchangeClientMode.HttpGet);&lt;/pre&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="justify"&gt;poi creiamo un oggetto &lt;em&gt;MetadataSet&lt;/em&gt; in cui scarichiamo i metadati utilizzando il metodo &lt;em&gt;GetMetadata&lt;/em&gt;() della classe &lt;em&gt;MetadataExchangeClient&lt;/em&gt;&lt;/p&gt;
&lt;p align="justify"&gt; &lt;/p&gt;
&lt;p&gt; MetadataSet metadataSet = metadataExchange.GetMetadata();&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="justify"&gt; creiamo un oggetto &lt;em&gt;WsdlImporter&lt;/em&gt; dal &lt;em&gt;MetadataSet&lt;/em&gt; che contiene il documento WSDL comprensivo degli endpoints&lt;/p&gt;
&lt;p align="justify"&gt; &lt;/p&gt;
&lt;p&gt; WsdlImporter importer = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; WsdlImporter(metadataSet);&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="justify"&gt;e inseriamo gli endpoints nell'apposita collection &lt;em&gt;ServiceEndpointCollection&lt;/em&gt; mediante il metodo &lt;em&gt;ImportAllEndpoints&lt;/em&gt;() della classe &lt;em&gt;WsdlImporter&lt;/em&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt; ServiceEndpointCollection endpoints = importer.ImportAllEndpoints();&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p align="justify"&gt; infine, all'interno di un ciclo For..Each configuriamo una variabile proxy per ogni endpoint trovato&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;span style="COLOR: #0000ff"&gt;foreach&lt;/span&gt; (ServiceEndpoint ep &lt;span style="COLOR: #0000ff"&gt;in&lt;/span&gt; endpoints)&lt;/p&gt;
&lt;pre&gt;{&lt;/pre&gt;
&lt;pre&gt; IInterfacciaServizio proxy = &lt;span style="COLOR: #0000ff"&gt;new&lt;/span&gt; ChannelFactory&amp;lt;IInterfacciaServizio&amp;gt;(ep.Binding, ep.Address).CreateChannel();&lt;/pre&gt;
&lt;pre&gt; ((IChannel) proxy).Open();&lt;/pre&gt;
&lt;pre&gt;&lt;span style="COLOR: #008000"&gt; // codice di elaborazione del servizio&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt; ((IChannel) proxy).Close();&lt;/pre&gt;
&lt;pre&gt;} &lt;/pre&gt;
&lt;pre&gt; &lt;/pre&gt;
&lt;p align="justify"&gt;da notare che &lt;em&gt;ChannelFactory&lt;/em&gt; è in grado di generare il proxy basandosi in maniera identica a ciò che riflette il contratto del servizio remoto, quindi se un metodo è dichiarato sincrono l'oggetto proxy avrà la stessa identica implementazione del metodo.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:935eff4c-a599-4367-9423-bcc19c063d61" contenteditable="false" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tag: &lt;a rel="tag" href="http://technorati.com/tags/WCF/"&gt;WCF&lt;/a&gt; , &lt;a rel="tag" href="http://technorati.com/tags/.NET3/"&gt;.NET3&lt;/a&gt; , &lt;a rel="tag" href="http://technorati.com/tags/C#/"&gt;C#&lt;/a&gt; &lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/88955.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/10/15/88955.aspx</guid>
            <pubDate>Mon, 15 Oct 2007 13:51:50 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/88955.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/10/15/88955.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/88955.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/88955.aspx</trackback:ping>
        </item>
        <item>
            <title>Meglio Moss2007 oppure Groove...?</title>
            <category>.NET Framework</category>
            <category>Others</category>
            <category>Visual C#</category>
            <category>Workflow Foundation</category>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/07/05/84715.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;&lt;font size="2"&gt;Questo post nasce da una domanda posta da un mio PartnerClienteCollega.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Il titolo è provocatorio, non credo sia possibile metterli a confronto, credo invece più adeguato valutare le esigenze e decidere, conoscendone i vantaggi e i limiti, di adottare l'uno anzichè l'altro.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;MOSS 2007 è un ambiente Web-based dotato di un backend scalabile in cui è possibile effettuare ricerche di informazioni, quindi ideale per &lt;strong&gt;condividere &lt;/strong&gt;in azienda;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Groove 2007 è un rich client, installato su ogni pc, per piccoli team, quindi ideale per &lt;strong&gt;decentralizzare&lt;/strong&gt; la collaborazione.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;MOSS 2007 permette di sviluppare applicazioni con workflow mediante Windows Workflow Foundation;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Groove 2007 facilita la comunicazione diretta per la maggior parte mediante il peer-to-peer (si, esatto), permette di lavorare disconessi per poi riconnettersi in un secondo momento e sincronizzare il lavoro eseguito offline.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;MOSS 2007 va utilizzato da aziende che devono fare attività di searching di dati condivisi, deploy di portali, sviluppo di business forms e processi di workflow;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Groove 2007 va utilizzato da team&amp;nbsp;che hanno bisogno di condividere &lt;strong&gt;non un portale&lt;/strong&gt; ma un &lt;em&gt;banco di lavoro&lt;/em&gt; per frequenti scambi di informazioni.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Ora però, anche per rispondere al mio PartnerClienteCollega,&amp;nbsp;vediamo alcuni limiti di Groove rispetto a MOSS.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;La fonte dei dati seguenti è un post pubblicato sul blog del team TechNet&amp;nbsp;di Groove: &lt;a title="http://blogs.technet.com/groove/default.aspx" href="http://blogs.technet.com/groove/default.aspx"&gt;http://blogs.technet.com/groove/default.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="382" border="1" unselectable="on"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&lt;font size="2"&gt;Maximum individual file size (in a Files tool or otherwise): &lt;/font&gt;&lt;/td&gt; &lt;td valign="top" width="180"&gt;2Gb&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Maximum total content size that can be serialized to others during invitation&lt;/td&gt; &lt;td valign="top" width="180"&gt;2Gb&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Maximum total File size in a SharePoint Files Tool&lt;/td&gt; &lt;td valign="top" width="180"&gt;1Gb&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Maximum total File and Folder count in a SharePoint Files Tool&lt;/td&gt; &lt;td valign="top" width="180"&gt;5,000&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Meetings Tool limits text input to:&lt;br&gt;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Meeting title to 256 chars&lt;br&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Meeting location to 256 chars&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Action item names to 256 chars&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Agenda item names to 256 chars&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Agenda item duration to 24 hours&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Account Configuration limits text input to:&lt;br&gt;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Key field to 37 chars&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Account name to 256 chars&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Account name to 256 chars&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Password limits text input to 256 chars&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="180"&gt;Calendar subject limits text input to 256 chars&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;In Forms we only allow 1 attachments field per Form&lt;/td&gt; &lt;td valign="top" width="180"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Maximum Total File Size in a Folder Sharing workspace&lt;/td&gt; &lt;td valign="top" width="180"&gt;2Gb (can be overriden)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Maximum Total File and Folder count in a Folder Sharing Workspace&lt;/td&gt; &lt;td valign="top" width="180"&gt;5,000 (can be overriden)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;Maximum Number of Members in a Workspace&lt;/td&gt; &lt;td valign="top" width="180"&gt;100 (can be overriden)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/84715.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/07/05/84715.aspx</guid>
            <pubDate>Thu, 05 Jul 2007 09:57:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/84715.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/07/05/84715.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/84715.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/84715.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con Caching Application Block - #1</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/05/14/78107.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Sono passati diverse settimane da quando ho scritto l'ultimo post del mio blog, finalmente ho trovato un attimo di tempo; durante la scrittura di quel post pensavo di mettermi a scrivere una activity che potesse far navigare la user interface di un software, fortunatamente qualcuno mi ha fermato dicendomi che era già stato scritto e in effetti, facendo una breve ricerca ho trovato una serie di link a codice simile a ciò che avevo in mente, quindi lungi da me clonare l'acqua calda.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Giro pagina. Per un mio cliente&amp;nbsp;ho consigliato di&amp;nbsp;implementare (e lo sto facendo), in un prodotto,&amp;nbsp;la gestione della cache e ho scelto l'application block&amp;nbsp;scritto in oggetto del post; in rete ho trovato diversi siti e blog che parlano di ciò, non credo che ai miei lettori&amp;nbsp;possa interessare&amp;nbsp;la "mia" introduzione o la "mia" spiegazione perciò mi limiterò a descrivere dettagli tecnici secondo la mia esperienza in proposito.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Nel già citato application block vi è, tra le altre, una classe denominata &lt;em&gt;ExpirationTask &lt;/em&gt;che, una volta istanziata, rappresenta un singolo task per gestire ciò che, inserito in cache, è scaduto.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Se si vuole dare una occhiata all'interno della nostra cache e rimuovere tutti gli elementi scaduti è possibile&amp;nbsp;invocare il metodo&amp;nbsp;&lt;em&gt;SweepExpiredItemsFromCache&lt;/em&gt; passandogli come parametro un HashTable di oggetti CacheItems da rimuovere.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Occorre però prima aver marcato come expired gli elementi nella HashTable, quindi &lt;em&gt;MarkAsExpired(HashTable object).&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/78107.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/05/14/78107.aspx</guid>
            <pubDate>Sun, 13 May 2007 22:06:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/78107.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/05/14/78107.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/78107.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/78107.aspx</trackback:ping>
        </item>
        <item>
            <title>UIPAB 2 e l'arte di disaccoppiare le GUI</title>
            <category>.NET Framework</category>
            <category>Others</category>
            <category>Visual Basic .NET</category>
            <category>Visual C#</category>
            <category>Application Blocks</category>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2005/09/26/27108.aspx</link>
            <description>&lt;P&gt;Se vi interessa l'argomento trovate l'articolo a questo &lt;A href="http://www.dotnet2themax.it/ShowContent.aspx?Type=knowledge,slide&amp;ID=7f8354e1-d4fb-43f1-9a2c-117ede351aa4"&gt;link&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Buona lettura&lt;/P&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/27108.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2005/09/26/27108.aspx</guid>
            <pubDate>Mon, 26 Sep 2005 17:57:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/27108.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2005/09/26/27108.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/27108.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/27108.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con le WebPart - #1</title>
            <category>WebPart</category>
            <category>ASP.NET 2.0</category>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2006/07/08/44296.aspx</link>
            <description>&lt;FONT face=Verdana size=2&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P align=justify&gt;"&lt;EM&gt;ASP.NET 2.0 fornisce classi che permettono di costruire 
applicazioni web integrando la tecnologia delle web parts...&lt;/EM&gt;" si ok questo 
gi&amp;#224; lo conosco.&lt;/P&gt;
&lt;P align=justify&gt;Come spesso accade, per&amp;#242;, non sempre basta quello che mamma 
Microsoft rilascia per le nostre innumerevoli esigenze, cos&amp;#236; capita che ci si 
ritrova a dover "&lt;EM&gt;estendere"&lt;/EM&gt; qualcosina.&lt;/P&gt;
&lt;P align=justify&gt;Iniziamo a estendere, o meglio "rivedere", il Web Part 
Framework di ASP.NET 2.0 con un bel WebPartManager di casa nostra che si adopera 
per autorizzare o meno le webparts che gli si pareranno dinanzi nella pagina 
web. Nel codice che segue da notare &lt;EM&gt;AuthorizationFilter,&lt;/EM&gt; &amp;#232; una 
propriet&amp;#224; che assume il nostro Custom User Control (o semplicemente uno 
User Control, di cosa possiamo trasformare in Web Part se ne parler&amp;#224; in un 
prossimo post) ereditando da &lt;EM&gt;System.Web.UI.WebControls.WebParts.WebPart&lt;/EM&gt; 
e permette di specificare, passando una stringa (es. "Administrators, Users, 
PowerUsers,..."), quali ruoli hanno l'autorit&amp;#224; di visualizzare la Web Part in 
una pagina.&lt;/P&gt;
&lt;P align=justify&gt;Facile, quindi, verificare il ruoli abilitati in associazione 
con l'utente corrente&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;[] roles = e.AuthorizationFilter.Split(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;new char&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;[] { &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff00ff; FONT-FAMILY: Courier New"&gt;',' &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;});&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(roles.Length &gt; 0)&lt;BR&gt;{&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(Roles.Enabled)&lt;BR&gt;        isAuthorized = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;this&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;.RolesManagerIsUserInRoles(roles);&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;else&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;isAuthorized = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;this&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;.ContextIsUserInRoles(roles);&lt;BR&gt;}               &lt;BR&gt;&lt;/DIV&gt;&lt;/SPAN&gt;
&lt;P&gt;ed ecco il listato completo&lt;/FONT&gt;&lt;FONT face=Verdana size=2&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;public class &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;WebPartManager : System.Web.UI.WebControls.WebParts.WebPartManager&lt;BR&gt;    {        &lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;public &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;WebPartManager() { }        &lt;BR&gt;&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;protected override void &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;OnAuthorizeWebPart(WebPartAuthorizationEventArgs e)&lt;BR&gt;        {&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;bool &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;isAuthorized = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;false&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;;&lt;BR&gt;&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;.IsNullOrEmpty(e.AuthorizationFilter) || e.AuthorizationFilter == "*")&lt;BR&gt;            {&lt;BR&gt;                isAuthorized = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;true&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;;&lt;BR&gt;            }&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;else&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;{&lt;BR&gt;                &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;[] roles = e.AuthorizationFilter.Split(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;new char&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;[] { &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #ff00ff; FONT-FAMILY: Courier New"&gt;',' &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;});&lt;BR&gt;                &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(roles.Length &gt; 0)&lt;BR&gt;                {&lt;BR&gt;                    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(Roles.Enabled)&lt;BR&gt;                        isAuthorized = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;this&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;.RolesManagerIsUserInRoles(roles);&lt;BR&gt;                    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;else&lt;BR&gt;                        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;isAuthorized = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;this&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;.ContextIsUserInRoles(roles);&lt;BR&gt;                }                &lt;BR&gt;            }&lt;BR&gt;            e.IsAuthorized = isAuthorized;            &lt;BR&gt;        }&lt;BR&gt;        &lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;private bool &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;RolesManagerIsUserInRoles(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;[] roles)&lt;BR&gt;        {&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;for &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;int &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;i = 0; i &lt; roles.Length; i++)&lt;BR&gt;            {&lt;BR&gt;                &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(Roles.IsUserInRole(roles[i]))&lt;BR&gt;                    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;return true&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;;&lt;BR&gt;            }&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;return false&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;;&lt;BR&gt;        }&lt;BR&gt;        &lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;private bool &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;ContextIsUserInRoles(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;[] roles)&lt;BR&gt;        {&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;for &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;int &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;i = 0; i &lt; roles.Length; i++)&lt;BR&gt;            {&lt;BR&gt;                &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;( (Context != &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;null&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;) &amp;&amp; (Context.User != &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;null&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;))&lt;BR&gt;                    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(Context.User.IsInRole(roles[i]))&lt;BR&gt;                        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;return true&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;;&lt;BR&gt;            }&lt;BR&gt;            &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;return false&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;;&lt;BR&gt;        }&lt;BR&gt;    }&lt;BR&gt;&lt;/DIV&gt;&lt;/SPAN&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt;al prossimo post, in cui &lt;EM&gt;rivediamo&lt;/EM&gt; qualcos'altro.&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://imhoproject.org/"&gt;&lt;FONT face=Verdana size=1&gt;powered by IMHO 
1.3&lt;/FONT&gt;&lt;/A&gt;&lt;/FONT&gt;

&lt;/FONT&gt;
&lt;FONT face=Verdana size=2&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;!-- Powered by IMHO 1.3 (IT) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --&gt;
&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/44296.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2006/07/08/44296.aspx</guid>
            <pubDate>Sat, 08 Jul 2006 21:41:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/44296.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2006/07/08/44296.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/44296.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/44296.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con le WebPart - #2</title>
            <category>ASP.NET 2.0</category>
            <category>WebPart</category>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2006/11/02/53750.aspx</link>
            <description>&lt;FONT face=Verdana size=2&gt;
&lt;P&gt;&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;
&lt;P align=justify&gt;Secondo post sull'argomento WebParts Framework.&lt;/P&gt;
&lt;P align=justify&gt;Vediamo come &lt;EM&gt;"rivisitare"&lt;/EM&gt; un altro componente che 
serve per ospitare le Web Parts in zone diverse della pagina web: il 
&lt;EM&gt;WebPartZone.&lt;/EM&gt; 
&lt;P align=justify&gt;Prima di tutto, cosa offre? Il WebPartZone deriva dalla 
classe WebPartZoneBase, che a sua volta deriva da WebZone, che deriva da 
CompositeControl; in effetti una WebPartZone non &amp;#232; altro che un controllo Web 
composto in grado di ospitare al suo interno altri controlli compositi, le 
Web Parts.  &lt;A href="file:///C:/Documents and Settings/FCarucci/Dati applicazioni/Elite Agency/imho10/000000049/clip_image0027.jpg" atomicselection="true"&gt;&lt;/A&gt; 
&lt;P align=justify&gt;In questo post vorrei porre l'attenzione su una caratteristica 
in particolare: i Verbi. 
&lt;P align=justify&gt;Si da per assunta la conoscenza di base 
del Web Part Framework quindi non spiego cosa sono i Verbi, bens&amp;#236; illustro un 
semplice modo per estendere il WebPartZone e far si che ad ogni Web Part 
condivisa o personalizzata per uno specifico utente, inclusa nella 
Zone, venga associato il verbo "Edit".&lt;/FONT&gt; &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;protected override void &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;OnCreateVerbs(WebPartVerbsEventArgs e)&lt;BR&gt;{&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;base&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;.OnCreateVerbs(e);&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;this&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;.EditVerb.Visible = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;false&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;;&lt;BR&gt;    Collection verbs = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;new &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;Collection();&lt;BR&gt;    HttpContext ctx = HttpContext.Current;&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(ctx.Request.IsAuthenticated)&lt;BR&gt;    {&lt;BR&gt;        WebPartVerb editVerb = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;new &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;WebPartVerb("editVerb", &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;new &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;WebPartEventHandler(HandleEditClick));&lt;BR&gt;        verbs.Add(editVerb);&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(WebPartManager.Personalization.Scope == PersonalizationScope.Shared)&lt;BR&gt;        {&lt;BR&gt;            editVerb.Text = "Modifica Web Part condivisa"&lt;BR&gt;        }&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;else&lt;BR&gt;        &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;{&lt;BR&gt;            editVerb.Text = "Modifica Web Part"&lt;BR&gt;        }&lt;BR&gt;    }&lt;BR&gt;    e.Verbs = &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;new &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;WebPartVerbCollection(verbs);&lt;BR&gt;}&lt;BR&gt;&lt;/DIV&gt;&lt;/SPAN&gt;
&lt;P align=justify&gt;In questo modo ogni webpart aggiunta nella Zone avr&amp;#224;, 
cliccando, nel suo men&amp;#249; a tendina il suddetto verbo, oltre ai verbi di 
default.&lt;/P&gt;&lt;FONT face=Verdana size=2&gt;
&lt;DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;void &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;HandleEditClick(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;object &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;sender, WebPartEventArgs e)&lt;BR&gt;{&lt;BR&gt;    WebPartManager wpm = (WebPartManager)  WebPartManager.GetCurrentWebPartManager(&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;this&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;.Page); &lt;BR&gt;&lt;BR&gt;    wpm.DisplayMode = WebPartManager.EditDisplayMode;&lt;BR&gt;&lt;BR&gt;    WebPart wp = e.WebPart;&lt;BR&gt;    &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;if &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;(wp != &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New"&gt;null &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"&gt;&amp;&amp; wp != wpm.SelectedWebPart)&lt;BR&gt;        wpm.BeginWebPartEditing(wp);&lt;BR&gt;}&lt;BR&gt;&lt;/DIV&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;A href="http://imhoproject.org/"&gt;&lt;FONT face=Verdana size=1&gt;powered by IMHO 
1.3&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;!-- Powered by IMHO 1.3 (IT) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --&gt;&lt;!-- Powered by IMHO 1.3 (IT) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --&gt;

&lt;/FONT&gt;&lt;!-- Powered by IMHO 1.3 (IT) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --&gt;
&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/53750.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2006/11/02/53750.aspx</guid>
            <pubDate>Thu, 02 Nov 2006 16:47:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/53750.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2006/11/02/53750.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/53750.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/53750.aspx</trackback:ping>
        </item>
    </channel>
</rss>