<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>ASP.NET 2.0</title>
        <link>http://blogs.ugidotnet.org/FabioCarucci/category/2073.aspx</link>
        <description>ASP.NET 2.0</description>
        <language>it-IT</language>
        <copyright>Fabio Carucci</copyright>
        <generator>Subtext Version 2.1.0.3</generator>
        <item>
            <title>L'arte di lavorare con Workflow Foundation - #2</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/02/27/71795.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Molto tempo fa scrissi un articolo sullo User Interface Application Block in cui parlai di grafi navigazionali, dare la possibilit&amp;#224; ad un applicativo di "guidare" e mostrare la propria interfaccia utente mediante l'uso di un file xml dotato di un apposito schema in cui potevo scrivere il percorso delle transizione che le singole forms della mia applicazione potevano fare secondo ci&amp;#242; che l'utente sceglieva di volta in volta. Bello.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Mi rendo conto solo ora che ci&amp;#242; &amp;#232; possibile anche con WF. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Posso progettare e implementare una &lt;em&gt;activity&lt;/em&gt; che funga da navigatore del mio grafo. Molto bello.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Mi occorrono fondamentalmente tre cose: il punto di partenza, il punto di arrivo e una "memoria storica" dei percorsi precedenti, una sorta di segnalibri; penso quindi, in maniera semplificata, ad una classe &lt;strong&gt;NavigationManager&lt;/strong&gt; di tipo &lt;em&gt;CompositeActivity &lt;/em&gt;e a due property &lt;strong&gt;TheFirstIs&lt;/strong&gt; e &lt;strong&gt;TheNextIs - &lt;/strong&gt;la raccolta di segnalibri, poi, non &amp;#232; altro che una collection di &lt;em&gt;Activities&lt;/em&gt;. Bellissimo.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Ora penso al #3 di questo post.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt; &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/71795.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/02/27/71795.aspx</guid>
            <pubDate>Tue, 27 Feb 2007 01:19:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/71795.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/02/27/71795.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/71795.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/71795.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con le WebPart - #15</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/02/01/69452.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Lavorando con la funzionalit&amp;#224; di esportazione di webpart, e collegandomi al mio precedente post &lt;A href="http://blogs.ugidotnet.org/fabiocarucci/archive/2007/01/21/67858.aspx"&gt;#9&lt;/a&gt;, potrebbe capitare il caso in cui un utente provi ad esportare una webpart che contiene una parte dei suoi dati contrassegnati come sensibili; quindi, per riassumere, significa che la webpart ha l'attributo&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;em&gt;[Personalizable(PersonalizationScope.User, true)]&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;nella situazione suddetta possiamo mostrare all'utente un avviso che lo informa di annullare l'operazione perch&amp;#232; non consentita.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;L'oggetto che gestisce ci&amp;#242; &amp;#232; il &lt;em&gt;WebPartManager &lt;/em&gt;e la property &amp;#232; &lt;em&gt;ExportSensitiveDataWarning&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:14473e1c-100d-49a9-ab77-a2d2adbfded6" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 478px; padding-top: 0px"&gt;&lt;pre style="background-color:Silver;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF; "&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000; "&gt;asp:WebPartManager &lt;/span&gt;&lt;span style="color: #FF0000; "&gt;ID&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;="myWPM"&lt;/span&gt;&lt;span style="color: #FF0000; "&gt; runat&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;="server"&lt;/span&gt;&lt;span style="color: #FF0000; "&gt; ExportSensitiveDataWarning&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;="Attenzione! impossibile esportare dati sensibili"&lt;/span&gt;&lt;span style="color: #FF0000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;/&gt;&lt;/span&gt;&lt;span style="color: #000000; "&gt;
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/69452.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/02/01/69452.aspx</guid>
            <pubDate>Thu, 01 Feb 2007 15:10:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/69452.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/02/01/69452.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/69452.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/69452.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con le WebPart - #14</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/31/69284.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Pu&amp;#242; essere necessario, a volte, inibire ad un utente la possibilit&amp;#224; di effettuare il drag'n'drop di una webpart da una zona ad un'altra.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Possiamo farlo mediante la classe &lt;em&gt;WebPartZoneBase&lt;/em&gt; e, in particolare, utilizzando la property &lt;em&gt;DragDropEnabled(True|False)&lt;/em&gt; che passa il valore alla omonima property della classe &lt;em&gt;WebPartChrome.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/69284.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/31/69284.aspx</guid>
            <pubDate>Wed, 31 Jan 2007 00:04:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/69284.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/31/69284.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/69284.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/69284.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con le WebPart - #13</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/31/69281.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Uno dei metodi canonici che il WebPart Framework mette a disposizione per disabilitare verbi &amp;#232; quello di utilizzare l'override sul metodo &lt;em&gt;FilterWebPartVerbs &lt;/em&gt;e passargli la collection di verbi che si vuole abilitare/disabilitare unitamente alla webpart:&lt;/font&gt;&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:5160bc72-f0ab-4d8a-9608-0f7a4813c360" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 484px; padding-top: 0px"&gt;&lt;pre style="background-color:Silver;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF; "&gt;protected&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;override&lt;/span&gt;&lt;span style="color: #000000; "&gt; WebPartVerbCollection FilterWebPartVerbs(WebPartVerbCollection verbs, WebPart webPart)
{
  WebPartVerbCollection wpvc &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;base&lt;/span&gt;&lt;span style="color: #000000; "&gt;.FilterWebPartVerbs(verbs, webPart);
  &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;foreach&lt;/span&gt;&lt;span style="color: #000000; "&gt; (WebPartVerb verb &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;in&lt;/span&gt;&lt;span style="color: #000000; "&gt; wpvc)
  {
     &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; (verb &lt;/span&gt;&lt;span style="color: #000000; "&gt;==&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;this&lt;/span&gt;&lt;span style="color: #000000; "&gt;.Zone.EditVerb)     
        verb.Enabled &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; webPart.AllowEdit;     
  }
  &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;return&lt;/span&gt;&lt;span style="color: #000000; "&gt; wpvc;
}

&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;ci&amp;#242; che probabilmente non riusciremo a fare, per&amp;#242;, &amp;#232; nascondere il verbo "Edit" per una serie di motivi, primo fra tutti &lt;em&gt;WebPartChrome.ShouldRenderVerb&lt;/em&gt; che sembra "ignorare" l' &lt;em&gt;AllowEdit=False&lt;/em&gt; soltanto per il verbo "Edit".&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;Per suggerire un possibile workaround rimando al mio post &lt;A href="http://blogs.ugidotnet.org/fabiocarucci/archive/2006/11/04/53886.aspx"&gt;#3&lt;/a&gt; fermo restando il valido uso del codice suddetto per i restanti verbi.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/69281.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/31/69281.aspx</guid>
            <pubDate>Tue, 30 Jan 2007 23:42:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/69281.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/31/69281.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/69281.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/69281.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con le WebPart - #12</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/30/69131.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Quando creiamo verbi custom potremmo avere la necessit&amp;#224; di associare azioni particolari, come ad esempio la funzione di narrazione del testo per utenti disabili, che non prevede form di dialogo o da compilare ma soltanto una attivazione o disattivazione della suddetta funzionalit&amp;#224;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Ebbene, ci&amp;#242; significa che accanto al verbo, nel men&amp;#249; a tendina, dovrebbe comparire anche un simbolo di spunta o un checkbox da selezionare/deselezionare; come fare?&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Utilizzando la property &lt;em&gt;WebPartVerb.Checked (true|false)&lt;/em&gt; possiamo giungere al nostro obiettivo. Quando il suo valore &amp;#232; &lt;em&gt;true &lt;/em&gt;accanto al nome del verbo apparir&amp;#224; una checkbox.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Da ricordare, per&amp;#242;, che tale propriet&amp;#224; funziona solo con verbi custom.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/69131.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/30/69131.aspx</guid>
            <pubDate>Tue, 30 Jan 2007 01:55:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/69131.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/30/69131.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/69131.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/69131.aspx</trackback:ping>
        </item>
        <item>
            <title>Recensione: &amp;quot;Essential Windows Workflow Foundation&amp;quot;</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/30/69130.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;&lt;img height="218" src="http://www.fabiocarucci.it/me/EssentialWWF.jpg" width="218" align="left"&gt;&lt;a title="http://www.amazon.com/Essential-Workflow-Foundation-Microsoft-Development/dp/0321399838" href="http://www.amazon.com/Essential-Workflow-Foundation-Microsoft-Development/dp/0321399838"&gt;Link al libro su Amazon&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Scritto a quattro mani da un architetto e da un progettista di WF (Shukla &amp; Schmidt), consiglio la lettura di questo libro a chi desidera acquisire i concetti che sono alla base di quello che considero essere un &lt;em&gt;"framework nel framework"&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;L'obiettivo del libro non &amp;#232; quello di elencare e disquisire a 360&amp;#176; sui 350 e passa tipi presenti nei tre assemblies che costituiscono il Windows Workflow Foundation, infatti il libro &lt;u&gt;non &amp;#232;&lt;/u&gt; un manuale o una reference guide, bens&amp;#236; si pone come spunto di riflessione sui concetti e principi che hanno spinto i due autori a dedicarsi alla progettazione di WF, e lo fa anche con una moltitudine di esempi di codice sparsi nel libro.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Il primo capitolo &amp;#232; dedicato alla descrizione di concetti, quasi astratti, del modello di programmazione di WF;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Nel secondo capitolo si inizia a parlare di &lt;em&gt;activities, &lt;/em&gt;cosa sono nel mondo reale, come si implementano nel codice, come si creano workflows composti da activities e come si esegue una applicazione "pilotata" da workflows.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;I capitoli 3 e 4 descrivono le features interne delle activities, come si aggiungono activities durante l'esecuzione di un programma, come si gestiscono le exceptions, cosa &amp;#232; la compensation, insomma il ciclo di vita di una activity.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Il capitolo 5 spiega come costruire applicazioni che fungono da hosting per il runtime di WF, mentre nel capitolo 6 si affronta in dettaglio come sia possibile gestire le transazioni in un ambiente come quello di WF.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Infine i rimanenti 2 capitoli danno una idea delle potenzialit&amp;#224; di estensione del WF e dei suoi workflows.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;A complemento del libro vi sono due appendici molto utili poich&amp;#232; elencano una serie di porzioni di codice relative ai diversi tipi di workflow e alle activity composite.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;In conclusione, "Essential Windows Workflow Foundation" &amp;#232; un testo adatto a coloro che vogliono iniziare un percorso di studio su WF ma che hanno necessariamente basi consolidate di .NET e C# 2.0.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt; &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/69130.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/30/69130.aspx</guid>
            <pubDate>Tue, 30 Jan 2007 01:27:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/69130.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/30/69130.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/69130.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/69130.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con le WebPart - #11</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/30/69123.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Quando lavoriamo con i Verbs, per default nel men&amp;#249; a tendina, accanto ai verbi, non appaiono immagini che rendono pi&amp;#249; user friendly la nostra webpart.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Per ovviare a ci&amp;#242;, mediante l'uso della property &lt;em&gt;ImageUrl &lt;/em&gt;contenuta nella classe &lt;em&gt;WebPartVerb, &lt;/em&gt;possiamo ad esempio creare una zona custom e, ogni webpart che verr&amp;#224; inserita in essa, acquisir&amp;#224; i verbi di default e quelli aggiunti, nonch&amp;#232; le immagini (nei formati soliti) che appariranno accanto ad ogni verbo&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;img style="margin: 0px" height="161" hspace="50" src="http://www.fabiocarucci.it/me/WebPartVerbSample.jpg" width="204" vspace="10"&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Ecco un esempio del codice&lt;/font&gt; &lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:2e6b2e4f-0dee-4560-b6ce-38c1a0cd539f" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 511px; padding-top: 0px"&gt;&lt;pre style="background-color:Silver;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #0000FF; "&gt;internal&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;class&lt;/span&gt;&lt;span style="color: #000000; "&gt; CustomWebPartVerb : WebPartVerb
{
   &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;private&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;const&lt;/span&gt;&lt;span style="color: #000000; "&gt; String _copyImageUrl &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #000000; "&gt;"&lt;/span&gt;&lt;span style="color: #000000; "&gt;~/Copy.ico&lt;/span&gt;&lt;span style="color: #000000; "&gt;"&lt;/span&gt;&lt;span style="color: #000000; "&gt;;

   &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;internal&lt;/span&gt;&lt;span style="color: #000000; "&gt; CustomWebPartVerb(WebPartEventHandler serverClickHandler) :  
       &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;base&lt;/span&gt;&lt;span style="color: #000000; "&gt;(&lt;/span&gt;&lt;span style="color: #000000; "&gt;"&lt;/span&gt;&lt;span style="color: #000000; "&gt;CustomVerb&lt;/span&gt;&lt;span style="color: #000000; "&gt;"&lt;/span&gt;&lt;span style="color: #000000; "&gt;, serverClickHandler)
   { }
   
   &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;public&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;override&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;bool&lt;/span&gt;&lt;span style="color: #000000; "&gt; Enabled
   {
     &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;get&lt;/span&gt;&lt;span style="color: #000000; "&gt; { &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;return&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;base&lt;/span&gt;&lt;span style="color: #000000; "&gt;.Enabled; }
     &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;set&lt;/span&gt;&lt;span style="color: #000000; "&gt; { &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;base&lt;/span&gt;&lt;span style="color: #000000; "&gt;.Enabled &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; value; }
   }
    
   &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;public&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;override&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;string&lt;/span&gt;&lt;span style="color: #000000; "&gt; ImageUrl
   {
      &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;get&lt;/span&gt;&lt;span style="color: #000000; "&gt; { &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;return&lt;/span&gt;&lt;span style="color: #000000; "&gt; _copyImageUrl; }
      &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;set&lt;/span&gt;&lt;span style="color: #000000; "&gt; { ; }
   }
  }
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/69123.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/30/69123.aspx</guid>
            <pubDate>Mon, 29 Jan 2007 23:21:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/69123.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/30/69123.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/69123.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/69123.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con le WebPart - #10</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/27/68865.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Il nostro utente ha aggiunto una webpart in una zona della pagina dal catalogo di webparts che gli abbiamo messo a disposizione. Ha aggiunto dei contenuti all'interno della webpart e, dietro le quinte, glieli abbiamo salvati nello storage di persistenza di AspNet e, avendo l'esigenza di dover lavorare su determinati molteplici contenuti di una webpart, in un nostro db custom.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Il nostro amato utente si rende conto di aver sbagliato pagina e quella webpart non doveva metterla l&amp;#224; bens&amp;#236; in un'altra pagina, quindi clicca sull'apposito men&amp;#249; a tendina della webpart e seleziona "Delete".&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Sappiamo che aspnet elimina dal suo storage la webpart eliminata, ma resta il record nel nostro db custom.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Come si pu&amp;#242; sincronizzare questa operazione?&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Semplicemente utilizzando l'evento &lt;em&gt;OnDeleting(EventArgs e)&lt;/em&gt; della webpart in questione che intercetta il "Delete" nel men&amp;#249; a tendina e permette quindi di invocare un nostro metodo che elimina anche il record sul db custom.&lt;/font&gt;&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/68865.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/27/68865.aspx</guid>
            <pubDate>Sat, 27 Jan 2007 13:36:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/68865.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/27/68865.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/68865.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/68865.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con Workflow Foundation - #1</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/25/68534.aspx</link>
            <description>&lt;p&gt;&lt;font size="2"&gt;Dopo aver definito e disegnato un workflow, lo poniamo in esecuzione. Immaginiamo di aver creato un workflow che ci permette di prendere le prenotazioni per mandare un nostro pony express in giro per la citt&amp;#224; a fare consegne.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Il nostro workflow tiene conto dell'orario di arrivo della richiesta, quindi gira al pony l'elenco, in ordine di arrivo, degli indirizzi a cui recarsi. Se volessimo rendere pi&amp;#249; ottimizzato il workflow potremmo inserire uno step intermedio (&lt;em&gt;activity&lt;/em&gt;) che mette in ordine di vicinanza/lontananza gli indirizzi e fornisce una stima del tempo di arrivo del pony al cliente.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="2"&gt;Il workflow &amp;#232; in esecuzione, ma grazie alla classe &lt;em&gt;WorkflowChanges&lt;/em&gt; possiamo aggiungere a runtime la nuova &lt;em&gt;activity&lt;/em&gt; senza dover interrompere nulla.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:8fe359cb-414a-4a29-9f39-c8afa26c7e5e" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 609px; padding-top: 0px"&gt;&lt;pre style="background-color:Silver;"&gt;&lt;div&gt;&lt;!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt;&lt;span style="color: #000000; "&gt;InvokeWorkflowActivity newWorkflow &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; InvokeWorkflowActivity();
WorkflowChanges changes &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;new&lt;/span&gt;&lt;span style="color: #000000; "&gt; WorkflowChanges(&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;this&lt;/span&gt;&lt;span style="color: #000000; "&gt;);
 
Type type &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;typeof&lt;/span&gt;&lt;span style="color: #000000; "&gt;(ReservationWorkflow);
newWorkflow.Name &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #000000; "&gt;"&lt;/span&gt;&lt;span style="color: #000000; "&gt;NewReservationWF&lt;/span&gt;&lt;span style="color: #000000; "&gt;"&lt;/span&gt;&lt;span style="color: #000000; "&gt;;
newWorkflow.TargetWorkflow &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; type;
 
DelayActivity delay &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; changes.TransientWorkflow.Activities[&lt;/span&gt;&lt;span style="color: #000000; "&gt;"&lt;/span&gt;&lt;span style="color: #000000; "&gt;delay1&lt;/span&gt;&lt;span style="color: #000000; "&gt;"&lt;/span&gt;&lt;span style="color: #000000; "&gt;] &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;as&lt;/span&gt;&lt;span style="color: #000000; "&gt; DelayActivity;
delay.Parent.Activities.Add(newWorkflow);
 
&lt;/span&gt;&lt;span style="color: #0000FF; "&gt;this&lt;/span&gt;&lt;span style="color: #000000; "&gt;.ApplyWorkflowChanges(changes);
&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;Ci sono per&amp;#242; delle restrizioni riguardo ai cambiamenti che possono essere compiuti su un workflow in esecuzione:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font size="2"&gt;Le &lt;em&gt;activities&lt;/em&gt; possono essere aggiunte o rimosse da un WF ma le propriet&amp;#224; di una attivit&amp;#224; esistente (regole escluse) non possono essere modificate;&lt;/font&gt; 
&lt;li&gt;&lt;font size="2"&gt;Una &lt;em&gt;activity &lt;/em&gt;&lt;em&gt;composita&lt;/em&gt; non pu&amp;#242; avere al suo interno delle sotto-attivit&amp;#224; aggiunte o rimosse dinamicamente;&lt;/font&gt; 
&lt;li&gt;&lt;font size="2"&gt;Una activity con una o pi&amp;#249; istanze nello stato di &lt;em&gt;Executing&lt;/em&gt;, &lt;em&gt;Fault&lt;/em&gt;, &lt;em&gt;Canceling&lt;/em&gt; o &lt;em&gt;Compensating&lt;/em&gt; non pu&amp;#242; essere rimossa da una istanza di un workflow in esecuzione.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font size="2"&gt;Nei prossimi post scruteremo, con il passare del tempo sempre pi&amp;#249; in dettaglio, le numerose features di questo nuovo '&lt;em&gt;framework nel framework'.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/68534.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/25/68534.aspx</guid>
            <pubDate>Thu, 25 Jan 2007 00:35:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/68534.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/25/68534.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/68534.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/68534.aspx</trackback:ping>
        </item>
        <item>
            <title>L'arte di lavorare con le WebPart - #9</title>
            <link>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/21/67858.aspx</link>
            <description>&lt;P&gt;&lt;FONT size=2&gt;Quando vogliamo dare all'utente del nostro sito la possibilit&amp;#224; di esportare una web part in formato xml sappiamo che occorre innanzitutto abilitare l'export dal web.config mediante&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;system.web&gt;&lt;BR&gt;   &lt;webparts  enableExport="true" /&gt;&lt;BR&gt;&lt;sytem.web&gt;&lt;WEBPARTS enableExport="true"&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;In questo modo, tuttavia, se non impostiamo la property ExportMode della web part, l'utente non otterr&amp;#224; l'esportazione a causa del valore di default che &amp;#232; &lt;EM&gt;None&lt;/EM&gt;.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Se per&amp;#242; vogliamo che l'esportazione avvenga in maniera parziale, cio&amp;#232; che non tutte le properties vengano esportate, dobbiamo impostare a &lt;EM&gt;NonSensitiveData&lt;/EM&gt; la suddetta property, importante &amp;#232; che nella dichiarazione dell'attributo &lt;EM&gt;[Personalizable] &lt;/EM&gt;ci ricordiamo di passare &lt;EM&gt;true &lt;/EM&gt;come secondo argomento:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;EM&gt;[Personalizable(PersonalizationScope.User, &lt;FONT color=#ff0000&gt;true&lt;/FONT&gt;)]&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;in questo modo le properties della nostra web part che avranno questo secondo argomento verranno escluse dall'esportazione.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.ugidotnet.org/FabioCarucci/aggbug/67858.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Fabio Carucci</dc:creator>
            <guid>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/21/67858.aspx</guid>
            <pubDate>Sun, 21 Jan 2007 01:13:00 GMT</pubDate>
            <wfw:comment>http://blogs.ugidotnet.org/FabioCarucci/comments/67858.aspx</wfw:comment>
            <comments>http://blogs.ugidotnet.org/FabioCarucci/archive/2007/01/21/67858.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/FabioCarucci/comments/commentRss/67858.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/FabioCarucci/services/trackbacks/67858.aspx</trackback:ping>
        </item>
    </channel>
</rss>
