<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.devleap.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Paolo Pialorsi</title><link>http://blogs.devleap.com/paolo/default.aspx</link><description>SOA, Workflow Foundation (WF), Windows Communication Foundation (WCF) e le Architetture Distribuite</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Microsoft SharePoint Conference 2008: 2 e 3 ottobre 2008 a Milano!</title><link>http://blogs.devleap.com/paolo/archive/2008/07/02/microsoft-sharepoint-conference-2008-2-e-3-ottobre-2008-a-milano.aspx</link><pubDate>Tue, 01 Jul 2008 23:00:08 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18515</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18515</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/07/02/microsoft-sharepoint-conference-2008-2-e-3-ottobre-2008-a-milano.aspx#comments</comments><description>&lt;p&gt;Con grande piacere posso annunciare, insieme all&amp;#39;amico &lt;a href="http://blogs.devleap.com/igor/"&gt;Igor&lt;/a&gt;,&amp;nbsp; che da qualche giorno è online il sito dedicato alla prossima edizione di &lt;a href="http://www.sharepointconference.it/"&gt;Microsoft SharePoint Conference 2008&lt;/a&gt;, la conferenza italiana dedicata a Microsoft Office SharePoint Server 2007 e alle tecnologie collegate. Dopo il successo dello scorso anno, questa volta l&amp;#39;organizzazione è il frutto di una partnership diretta con &lt;a href="http://www.microsoft.it/"&gt;Microsoft Italia&lt;/a&gt; che da sponsor, quale era lo scorso anno, con nostra grande soddisfazione diventa quest&amp;#39;anno co-organizzatore. &lt;p&gt;Sul sito dell&amp;#39;evento si possono trovare &lt;a href="http://www.sharepointconference.it/agenda"&gt;agenda&lt;/a&gt;, &lt;a href="http://www.sharepointconference.it/sessioni"&gt;descrizione sessioni&lt;/a&gt; e contenuti, biografie degli &lt;a href="http://www.sharepointconference.it/speaker"&gt;speaker&lt;/a&gt; e istruzioni per l&amp;#39;&lt;a href="http://www.sharepointconference.it/iscrizione"&gt;iscrizione&lt;/a&gt;.  &lt;p&gt;L’evento si terrà il 2 e 3 ottobre 2008 a Milano (a breve maggiori dettagli sulla &lt;a href="http://www.sharepointconference.it/Logistica/"&gt;location&lt;/a&gt;) e vedrà riuniti in due giorni una dozzina tra i massimi esperti nazionali ed internazionali di Microsoft Office SharePoint Server 2007 e delle tecnologie collegate, per erogare 30 sessioni tecniche per IT Pro, Site Builders e sviluppatori. Obiettivo dell’evento è condividere esperienze reali e riunire la comunità di persone che ad oggi lavorano con SharePoint. &lt;p&gt;L’evento prevede un &amp;quot;super early bird&amp;quot; che permette un’iscrizione a tariffa agevolata (480€+IVA anziché 600€+IVA). Il &amp;quot;super early bird&amp;quot; scadrà il 20 luglio 2008! &lt;p&gt;Per chi ha partecipato all&amp;#39;edizione dello scorso anno e per chi scopre per la prima volta questo evento, l&amp;#39;invito è di visitare il &lt;a href="http://www.sharepointconference.it/"&gt;sito dell’evento&lt;/a&gt; per consultarne i contenuti ed &lt;a href="http://www.sharepointconference.it/iscrizione"&gt;iscriversi&lt;/a&gt; al più presto!&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18515" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/Varie/default.aspx">Varie</category><category domain="http://blogs.devleap.com/paolo/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>SharePoint Workflow: due articoli utili</title><link>http://blogs.devleap.com/paolo/archive/2008/06/13/sharepoint-workflow-due-articoli-utili.aspx</link><pubDate>Fri, 13 Jun 2008 10:24:15 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18497</guid><dc:creator>paolo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18497</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/06/13/sharepoint-workflow-due-articoli-utili.aspx#comments</comments><description>&lt;p&gt;Per chi vuole &amp;quot;avviarsi&amp;quot; allo sviluppo di Workflow per SharePoint, segnalo due articoli utili scritti da David Man e pubblicati su MSDN:&lt;/p&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc546557.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc546557.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc546558.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc546558.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18497" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.devleap.com/paolo/archive/tags/WF/default.aspx">WF</category></item><item><title>VSeWSS v1.2: prime prove</title><link>http://blogs.devleap.com/paolo/archive/2008/06/06/vsewss-v1-2-prime-prove.aspx</link><pubDate>Fri, 06 Jun 2008 18:07:17 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18487</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18487</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/06/06/vsewss-v1-2-prime-prove.aspx#comments</comments><description>&lt;p&gt;Ieri sera ho fatto qualche prova con VSeWSS v. 1.2. Ecco qualche feedback:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Non &amp;#232; in grado di migrare i progetti fatti con VSeWSS 1.1 su VS2005 (e questo non &amp;#232; bello!). Ho provato a migrare diversi progetti, ma il tipo di progetto tra VS2005 e VS2008 &amp;#232; apparentemente diverso, quindi la conversione non va a buon fine. Se qualcuno ha trovato il modo di scavalcare il problema ... sotto ci sono i commenti :-).&lt;/li&gt;    &lt;li&gt;L&amp;#39;editor grafico di solution non &amp;#232; affatto male, &amp;#232; comodo anche se potrebbe essere pi&amp;#249; &amp;quot;ricco&amp;quot; perch&amp;#233; alla fine occorre comunque andare di XML a manina nei file di Feature.XML. Resta comunque comodo il fatto che si possono creare dei package di deployment con al loro interno diverse feature.&lt;/li&gt;    &lt;li&gt;I template di progetto e di elemento sono integrati con la generazione automatica della solution, per cui diventa molto semplice creare progetti di estensione &amp;quot;articolati&amp;quot; fatti di N WebPart, CustomField, ContentTyp, List Template, ecc.&lt;/li&gt;    &lt;li&gt;Il solution generator, a partire da siti/liste esistenti, ha apparentemente gli stessi problemi di stabilit&amp;#224; e affidabilit&amp;#224; della versione precendente. Esiste per&amp;#242; in due versioni: una per VS2005 e una VS2008.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In conclusione strumenti come &lt;a href="http://www.codeplex.com/stsdev"&gt;STSDev&lt;/a&gt; restano ancora molto interessanti, ma queste estensioni a VS2008 sono decisamente comode. Speriamo che la futura versione 1.3 (o come si chiamer&amp;#224;) sia in grado di migrare i dati e che non ci costringa a spostare a mano di nuovo i file di progetto da VS2005 a VS2008.&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18487" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>VSeWSS v1.2: eccolo!</title><link>http://blogs.devleap.com/paolo/archive/2008/06/05/vsewss-v1-2-eccolo.aspx</link><pubDate>Thu, 05 Jun 2008 17:14:22 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18485</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18485</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/06/05/vsewss-v1-2-eccolo.aspx#comments</comments><description>&lt;p&gt;Come &lt;a href="http://blogs.devleap.com/paolo/archive/2008/06/04/visual-studio-2008-extensions-for-windows-sharepoint-services.aspx"&gt;annunciato&lt;/a&gt; ieri, &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7BF65B28-06E2-4E87-9BAD-086E32185E68&amp;amp;displaylang=en"&gt;eccolo&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18485" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Programming LINQ a TechEd e ... "The pen is on the table" :-)</title><link>http://blogs.devleap.com/paolo/archive/2008/06/05/programming-linq-a-teched-e-quot-the-pen-is-on-the-table-quot.aspx</link><pubDate>Thu, 05 Jun 2008 16:50:07 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18483</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18483</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/06/05/programming-linq-a-teched-e-quot-the-pen-is-on-the-table-quot.aspx#comments</comments><description>&lt;p&gt;Come gi&amp;#224; &lt;a href="http://blogs.devleap.com/marco/archive/2008/06/05/intervistati-a-teched.aspx"&gt;segnalato da Marco&lt;/a&gt;, l&amp;#39;altro giorno siamo stati intervistati da Ken Rosen a proposito del nostro &lt;a href="http://www.programminglinq.com/"&gt;nuovo libro&lt;/a&gt; su LINQ. &lt;/p&gt;  &lt;p&gt;Se volete sentire un bresciano e un torinese che parlano in inglese ... fate un giro sulla &lt;a href="http://www.microsoft.com/techedonline/default.aspx"&gt;home page di TechEd Online&lt;/a&gt; (per qualche ora saremo l&amp;#236;, poi ci sposteremo sul link interno - &lt;a href="http://microsofttech.fr.edgesuite.net/TechEdOnline/Videos/08_NA_Dev_techtalk_12_high.wmv"&gt;high res&lt;/a&gt; e &lt;a href="http://mfile.akamai.com/14853/wmv/microsofttec.download.akamai.com/14853/TechEdOnline/Videos/08_NA_Dev_techtalk_12_low.asx"&gt;low res&lt;/a&gt;).&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18483" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/Inutili+_3A00_-_2900_/default.aspx">Inutili :-)</category><category domain="http://blogs.devleap.com/paolo/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>Parallel Extensions for .NET: June 2008 CTP</title><link>http://blogs.devleap.com/paolo/archive/2008/06/04/parallel-extensions-for-net-june-2008-ctp.aspx</link><pubDate>Wed, 04 Jun 2008 19:54:16 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18477</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18477</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/06/04/parallel-extensions-for-net-june-2008-ctp.aspx#comments</comments><description>&lt;p&gt;Le Parallel Extensions per .NET sono sicuramente uno degli argomenti pi&amp;#249; caldi del periodo. Se ne &amp;#232; parlato anche durante la Keynote di TechEd (l&amp;#39;ultima di Bill Gates come employee di Microsoft). Contestualmente alle sessione sull&amp;#39;argomento tenute a TechEd &lt;a href="http://blogs.msdn.com/pfxteam/archive/2008/06/02/8567802.aspx"&gt;ecco&lt;/a&gt; una &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=348F73FD-593D-4B3C-B055-694C50D2B0F3&amp;amp;displaylang=en"&gt;nuova CTP disponibile&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Come abbiamo (io e &lt;a href="http://blogs.devleap.com/marco/"&gt;Marco&lt;/a&gt;) gi&amp;#224; detto in diverse occasioni LINQ non &amp;#232; solo LINQ to SQL e non &amp;#232; solo un ORM ... le prospettive che si prefigurano con strumenti come Parallel Extensions e PLINQ ne sono la dimostrazione chiara e tangibile.&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18477" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.devleap.com/paolo/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>Visual Studio 2008 Extensions for Windows SharePoint Services</title><link>http://blogs.devleap.com/paolo/archive/2008/06/04/visual-studio-2008-extensions-for-windows-sharepoint-services.aspx</link><pubDate>Wed, 04 Jun 2008 17:55:27 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18475</guid><dc:creator>paolo</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18475</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/06/04/visual-studio-2008-extensions-for-windows-sharepoint-services.aspx#comments</comments><description>&lt;p&gt;Come gi&amp;#224; segnalato da &lt;a href="http://blogs.devleap.com/marco/"&gt;Marco&lt;/a&gt;, in questi giorni siamo ad Orlando per seguire TechEd e soprattutto :-) per promuovere il nostro &lt;a href="http://www.programminglinq.com/"&gt;nuovo libro su LINQ&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Oggi ho assistito ad una sessione in cui &amp;#232; stato annunciato il rilascio a giugno 2008 (cio&amp;#232; in questi giorni) delle estensioni per Visual Studio 2008 per WSS3. Era ora! Tutti le aspettavamo da tempo. A cosa servono?&lt;/p&gt;  &lt;p&gt;Queste estensioni, insieme a quanto gi&amp;#224; offerto nativamente da VS2008, offrono:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Project Templates&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Team Site Definition&lt;/li&gt;      &lt;li&gt;List Definition&lt;/li&gt;      &lt;li&gt;Empty&lt;/li&gt;      &lt;li&gt;Blank Site Definition&lt;/li&gt;      &lt;li&gt;Web Part&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Workflow Templates&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;SharePoint 2007 Sequential Workflow&lt;/li&gt;      &lt;li&gt;SharePoint 2007 State Machine Workflow&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Item Templates&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;List Definition&lt;/li&gt;      &lt;li&gt;Content Type&lt;/li&gt;      &lt;li&gt;Field Control&lt;/li&gt;      &lt;li&gt;Web Part&lt;/li&gt;      &lt;li&gt;Module&lt;/li&gt;      &lt;li&gt;Template&lt;/li&gt;      &lt;li&gt;Event Receiver&lt;/li&gt;      &lt;li&gt;List Instance&lt;/li&gt;      &lt;li&gt;List Definition from Content Type&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Custom Viewers&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;WSP Viewer&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Con funzionalit&amp;#224; di build &amp;amp; deploy&lt;/li&gt;     &lt;/ul&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;Quali sono i limiti di questo insieme di estensioni?&lt;/p&gt;  &lt;p&gt;Non supporta i 64bit sulle macchine di sviluppo (quindi se usate le VM come me non avrete problemi, se usate il PC &amp;quot;ufficiale&amp;quot; e l&amp;#39;avete installato a 64bit ... vi toccher&amp;#224; rivedere i vostri progetti). Non supporta la compilazione da riga di comando e il remote deployment, cio&amp;#232; non potete automatizzare il deploy su server diversi da quello di sviluppo, sul quale state lavorando (di nuovo, va bene su PC DEV dedicati o su VM dedicate). Non ha designer WYSIWYG degli oggetti che si creano (e questo non &amp;#232; un limite :-) ...).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/sharepoint/archive/2008/02/11/announcing-the-final-release-of-vsewss-1-1-and-the-upcoming-version-1-2.aspx"&gt;Qui&lt;/a&gt; trovate maggiori dettagli sulla versione 1.1 ad oggi disponibile solo per VS2005. &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3e1dcccd-1cca-433a-bb4d-97b96bf7ab63&amp;amp;displaylang=en"&gt;Qui&lt;/a&gt; invece potete fare il download, della versione per VS2005.&lt;/p&gt;  &lt;p&gt;Infine &lt;a href="http://blogs.msdn.com/sharepoint/archive/2008/05/12/announcing-visual-studio-extensions-for-sharepoint-developer-user-guide.aspx"&gt;qui&lt;/a&gt; potete trovare informazioni sulla documentazione del prodotto.&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18475" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.devleap.com/paolo/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category></item><item><title>Un nuovo LINQ Query Provider: LINQ4SP</title><link>http://blogs.devleap.com/paolo/archive/2008/05/18/un-nuovo-linq-query-provider-linq4sp.aspx</link><pubDate>Sun, 18 May 2008 07:46:43 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18446</guid><dc:creator>paolo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18446</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/05/18/un-nuovo-linq-query-provider-linq4sp.aspx#comments</comments><description>&lt;p&gt;Ho appena visto l&amp;#39;&lt;a href="http://www.sharepointblogs.com/aghy/archive/2008/05/08/announcing-linq4sp.aspx"&gt;annuncio&lt;/a&gt; di un nuovo LINQ query provider per creare/modificare/cancellare e interrogare contenuti di liste di SharePoint . Sembra un&amp;#39;implementazione molto interessante, almeno in base ai video dimostrativi pubblicati (&lt;a href="http://www.sharepointblogs.com/aghy/default.aspx"&gt;qui&lt;/a&gt; e &lt;a href="http://www.sharepointblogs.com/aghy/archive/2008/05/15/linq4sp-simple-query.aspx"&gt;qui&lt;/a&gt;) per ora. Da quando ho iniziato ad occuparmi di LINQ (ormai 3 anni fa) ho sempre pensato che SharePoint sarebbe stato un valido candidato per l&amp;#39;implementazione di un LINQ query provider personalizzato.&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18446" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.devleap.com/paolo/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>.NET 3.5 e Visual Studio 2008 SP1 - Beta</title><link>http://blogs.devleap.com/paolo/archive/2008/05/14/net-3-5-e-visual-studio-2008-sp1-beta.aspx</link><pubDate>Tue, 13 May 2008 22:17:21 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18434</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18434</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/05/14/net-3-5-e-visual-studio-2008-sp1-beta.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx"&gt;Ecco&lt;/a&gt; la prima Beta del SP1 di .NET 3.5 e Visual Studio 2008. Tra le novità più interessanti, oltre ai soliti bug fix tipici dei Service Pack, la diffusione di una nuova release di ADO.NET Entity Framework e ADO.NET Data Services e tutta una serie di migliorie a WCF, compreso un hosting wizard che dovrebbe aiutare nella creazione di WCF Service Host.&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18434" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.devleap.com/paolo/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category></item><item><title>SharePoint Object Model</title><link>http://blogs.devleap.com/paolo/archive/2008/05/12/sharepoint-object-model.aspx</link><pubDate>Sun, 11 May 2008 22:04:57 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18431</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18431</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/05/12/sharepoint-object-model.aspx#comments</comments><description>&lt;p&gt;In questo post riporto &amp;quot;as is&amp;quot; l&amp;#39;articolo che ho pubblicato su Visual Basic Journal di alcuni mesi fa, a proposito della programmazione di SharePoint tramite il suo Object Model.&lt;/p&gt; &lt;p&gt;_____&lt;/p&gt; &lt;p&gt;Microsoft Office SharePoint Server 2007 (MOSS2007) è un framework applicativo principalmente pensato per la realizzazione di soluzioni web di collaborazione, gestione documentale e publishing. Come probabilmente saprete esiste una versione gratuita di SharePoint, chiamata Windows SharePoint Services 3.0 (WSS3), che sta alla base anche di MOSS2007, che semplicemente lo estende in termini di funzionalità e servizi accessori. Ad esempio MOSS2007, nelle sue varie versioni e licenze, offre un motore di ricerca evoluto e di livello enterprise, fornisce un motore di Single Sign On, consente il collegamento a sistemi e software gestionali esterni tramite il Business Data Catalog, consente di gestire integrazioni con Microsoft Office Form Server e Microsoft Office Excel Services, ecc. &lt;p&gt;Tutti questi servizi e funzionalità sono utilizzabili “out of the box” e gestibili con strumenti già pronti per l’uso, come Microsoft Office SharePoint Designer 2007 e Microsoft Office 2007 in generale. &lt;h3&gt;Sviluppare soluzioni SharePoint&lt;/h3&gt; &lt;p&gt;Molto spesso però non è sufficiente appoggiarsi a questi strumenti e occorre sviluppare delle personalizzazioni, per integrare le proprie soluzioni con il motore di WSS3/MOSS2007. &lt;p&gt;Di seguito sono elencati alcuni dei più comuni ambiti di personalizzazione e sviluppo di soluzioni SharePoint: &lt;ul&gt; &lt;li&gt;WebPart: controlli web pensati per arricchire la classica interfaccia utente di SharePoint, definibili e configurabili anche dall’utente finale, che si integrano con l’interfaccia web di SharePoint. Richiamano in tutto e per tutto il concetto di WebPart di ASP.NET 2.0, in quanto ne rappresentano un’estensione.  &lt;li&gt;EventHandler: sono classi che intercettano azioni eseguite dagli utenti (inserimento di un file, cancellazione di un item da una lista, ecc.) e consentono di svolgere azioni correttive, se invocati pre-evento, o consequenziali, se invocati post-evento.  &lt;li&gt;List template: descrivono modelli di liste di documenti o elementi (contatti, appuntamenti, task, ecc.) utilizzabili per creare N diverse istanze delle stesse, tutte con la stessa struttura e comportamento, in base a quanto definito nel modello.  &lt;li&gt;Site template: spesso si realizzano soluzioni basate su N siti web tutti con lo stesso modello grafico e la stessa struttura di contenuti (liste, cartelle documenti, ecc.). Si pensi alla gestione dei clienti e alla realizzazione di un mini-portale web, per ciascun cliente o area commerciale, con le cartelle per le fatture attive, passive, gli indirizzi, gli appuntamenti, ecc. Creare un site template corrisponde a formalizzare uno schema dei contenuti, delle personalizzazioni e del layout grafico di base, da applicare poi a tutte le singole istanze di sito web, costruite secondo quel modello.  &lt;li&gt;Workflow: sono processi di business realizzati con Windows Workflow Foundation e che possono arricchire di funzionalità e comportamenti le liste di file e contenuti o i modelli di documento. Ad esempio è possibile associare un workflow di approvazione ad ogni documento di tipo “offerta”, oppure collegare un workflow a qualsiasi documento inserito in una specifica cartella, oppure ancora definire un flusso da eseguire ogni volta che viene inserito un appuntamento in un’agenda on-line. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Vi sono molti altri ambiti in cui può essere necessario sviluppare porzioni di codice per SharePoint, ma quelli appena visti sono sicuramente tra i più diffusi. Ciò che conta maggiormente però è il fatto che qualunque tipo di soluzione si vada ad implementare, uno degli strumenti principali da utilizzare è l’Object Model di SharePoint.  &lt;h3&gt;SharePoint Object Model&lt;/h3&gt; &lt;p&gt;Dal momento che SharePoint persiste sia la propria configurazione che la configurazione e i contenuti dei suoi siti su dei database applicativi, basati su Microsoft SQL Server, è necessario appoggiarsi ad un modello ad oggetti per poter operare in modo sicuro e corretto. &lt;p&gt;Lo SharePoint Object Model è un framework di classi, realizzato con .NET Framework e parzialmente offuscato, che consente di lavorare e interagire con tutti gli strumenti e gli oggetti definiti all’interno di una server farm SharePoint. &lt;p&gt;È una libreria di classi che è disponibile su qualsiasi server sul quale siano configurati i moduli di SharePoint. Non è pensato per essere referenziato ed utilizzato da applicazioni o servizi che girano su server diversi da quelli preposti ad ospitare SharePoint. Esistono infatti dei web service, pubblicati da SharePoint, pensati per tutte quelle situazioni in cui sia necessario utilizzare i server MOSS2007/WSS3 da server o applicazioni remote. &lt;p&gt;Esistono poco più di una ventina di namespace .NET che raggruppano diverse migliaia di classi. Il namespace radice si chiama Microsoft.SharePoint e contiene numerosi altri namespace, alcuni dei più importanti sono: &lt;ul&gt; &lt;li&gt;Microsoft.SharePoint.Administration: contiene le classi per l’amministrazione e la gestione della topologia di soluzioni SharePoint.  &lt;li&gt;Microsoft.SharePoint.WebControls: racchiude i controlli e le classi per la realizzazione di WebPart e WebControl.  &lt;li&gt;Microsoft.SharePoint.Workflow: rappresenta il namespace preposto a definire le classi relative all’integrazione tra SharePoint e Windows Workflow Foundation. &lt;li&gt;Microsoft.SharePoint.Portal.Search: contiene le classi relative al motore di ricerca, presente solo in MOSS2007 e non in WSS3.  &lt;li&gt;Microsoft.SharePoint.Portal.WebControls: controlli web specifici di MOSS2007.  &lt;li&gt;Microsoft.SharePoint.Portal.SingleSignOn: le classi che afferiscono al motore di Single Sign On di MOSS2007. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;La topologia di una soluzione SharePoint prevede la definizione di una SharePoint Server Farm, rappresentata da oggetti di tipo SPFarm. Una SPFarm consente di gestire la configurazione della farm, importare/esportare utenti definiti nella farm stessa e svolgere operazioni di backup e restore dei servizi configurati. Di seguito un esempio di codice per accedere ad una SPFarm, in base alla stringa di connessione del suo database di configurazione: &lt;blockquote&gt; &lt;p&gt;&lt;font color="#008000"&gt;SPFarm farm = SPFarm.Open(&amp;quot;server=localhost;database=SharePoint_Config;integrated security=SSPI;&amp;quot;);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;Console.WriteLine(&amp;quot;The current SPFarm version is: {0}&amp;quot;, farm.BuildVersion);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;Console.WriteLine(&amp;quot;The SPFarm name is: {0}&amp;quot;, farm.DisplayName);&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Una SPFarm è costituita da una o più Web Application, che in SharePoint Object Model si chiamano SPWebApplication. Queste ultime corrispondo ai siti IIS configurati sui server web di pubblicazione. Da una SPWebApplication si gestiscono le configurazioni della singola applicazione. Ad esempio di seguito si utilizza un oggetto SPWebApplication per configurare l’accesso anonimo all’applicazione: &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPWebApplication webApplication = SPWebApplication.Lookup(new Uri(&lt;a href="http://moss2007dev:9501/"&gt;http://moss2007dev:9501/&lt;/a&gt;));&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;webApplication.IisSettings[SPUrlZone.Default].AllowAnonymous = true;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;webApplication.Update();&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;Come si vede già da questo primo esempio, le modifiche agli oggetti devono sempre essere confermate invocando l’apposito metodo Update(). Infatti mentre si lavora con gli oggetti si modifica solo una copia in memoria di quello che deve poi essere persistito nel database di configurazione o applicativo, a seconda dei casi. &lt;p&gt;All’interno di ciascuna Web Application trovano posto le Site Collection, oggetti di tipo SPSite, che non sono altro che insiemi di Siti Web, corrispondenti ad oggetti di tipo SPWeb. Gli SPSite raggruppano diversi SPWeb, consentendo di condividere il database di contenuti, gli utenti e i gruppi SharePoint, oltre ad alcune impostazioni generali. &lt;p&gt;Ecco un esempio di codice che scorre tutti gli SPSite configurati su una SPWebApplication, per andare poi a mostrare le singole istanze di SPWeb in essi cotenute. &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPWebApplication webApplication = SPWebApplication.Lookup(new Uri(&amp;quot;http://moss2007dev:9501/&amp;quot;));&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;Console.WriteLine(&amp;quot;\nHere are the Sites in the SPWebApplication:&amp;quot;);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;foreach (SPSite site in webApplication.Sites)&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; Console.WriteLine(&amp;quot;\tPortal Name: {0}\n\tURL: {1}&amp;quot;,&lt;/font&gt;&lt;br /&gt;&amp;nbsp; &lt;font color="#008000"&gt;&amp;nbsp; site.PortalName, site.Url);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; Console.WriteLine(&amp;quot;\n\tHere are the Webs in the SPSite:&amp;quot;);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; foreach (SPWeb web in site.AllWebs)&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; {&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&amp;quot;\tTitle: {0}\n\tURL: {1}\n\tTemplate: {2}&amp;quot;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; web.Title, web.Url, web.WebTemplate);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; }&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;}&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;Il codice di esempio appena visto è definito all’interno di un’applicazione esterna, in questo caso specifico si tratta di un’applicazione Console, che interagisce con SharePoint. Molto spesso però il codice che scriviamo gira all’interno di pagine ASP.NET o WebPart, che in realtà sono ospitate all’interno di istanze di SPWeb. Per questo motivo gli oggetti SPWeb e SPSite possono essere costruiti anche sfruttando direttamente il contesto ASP.NET delle richieste che si stanno evadendo, per ricavare automaticamente il contesto SharePoint. &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPSite site = SPControl.GetContextSite(Context); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPWeb web = SPControl.GetContextWeb(Context);&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;L’esempio appena riportato descrive come accedere al SPSite e/o SPWeb corrente da una Web Part configurata in MOSS2007/WSS3. L’oggetto SPControl utilizzato, si trova nel namespace Microsoft.SharePoint.WebControls, proprio ad indicare che è di uso ricorrente da parte dei Web Control ASP.NET creati per girare in SharePoint. &lt;h3&gt;Lavorare con le liste&lt;/h3&gt; &lt;p&gt;A prescindere dal fatto che si lavori con applicazioni esterne (servizi del sistema operativo, moduli batch da Console, programmi Windows Forms, ecc.) referenziando gli SPSite e SPWeb tramite la loro URI, oppure con pagine ASP.NET e WebPart, utilizzando il contesto ASP.NET, tipicamente questi oggetti sono utilizzati non tanto o non solo per variare la configurazione dell’ambiente, ma soprattutto per accedere in lettura e scrittura ai contenuti del portale. &lt;p&gt;Attraverso un’istanza di SPWeb si può avere accesso, da codice, alle liste di contenuti e documenti presenti all’interno di un portale SharePoint, sia esso MOSS2007 o WSS3. Infatti ogni SPWeb espone la proprietà Lists, di tipo SPListCollection, tramite la quale si possono scorrere e ricercare le singole liste di contenuti. Pensiamo allora ad un classico portale SharePoint di collaborazione (detto “Team Site”), dove sia presente una lista di “Contacts”. Il seguente codice mostra come ottenere e sfogliare l’elenco dei singoli contatti in essa contenuti: &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPWeb web = SPControl.GetContextWeb(Context);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPList listContacts = web.Lists[&amp;quot;Contacts&amp;quot;];&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;foreach (SPListItem contact in listContacts.Items)&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; Respone.Write(String.Format(&amp;quot;Last Name: {0} - EMail: {1}&amp;quot;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; contact[&amp;quot;Title&amp;quot;], contact[&amp;quot;Email&amp;quot;]));&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;}&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;Come si vede dall’esempio appena riportato, ogni item di una lista SharePoint è descritto da un oggetto di tipo SPListItem, il quale espone un dictionary di proprietà che corrispondono ai campi informativi dell’elemento. Si noti che le chiavi utilizzate per accedere i singoli campi non corrispondo necessariamente ai nomi dei campi stessi (“Last Name” diventa “Title”). Inoltre ogni campo di un SPListItem ha un nome pubblico e descrittivo, chiamato Title, e un nome interno, chiamato InternalName. Nel nostro esempio il campo con Title “Last Name” ha un InternalName pari a “Title”. La ricerca dei campi su un SPListItem avviene sulla base dell’InternalName, che è case sensitivi. Per avere un elenco preciso dei nomi dei campi disponibili per gli SPListItem di un’istanza di SPList possiamo utilizzare la proprietà Fields dell’oggetto che descrive la lista. &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPWeb web = SPControl.GetContextWeb(Context);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPList listContacts = web.Lists[&amp;quot;Contacts&amp;quot;];&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPWeb web = new SPSite(&amp;quot;http://moss2007dev/&amp;quot;).OpenWeb();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;foreach (SPField field in listContacts.Fields)&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; Respone.Write(String.Format(&amp;quot;Title: {0} - Internal Name: {1} - Type: {2}&amp;quot;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; field.Title, field.InternalName, field.TypeAsString));&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;}&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;In alternativa possiamo utilizzare la proprietà SchemaXml che caratterizza ogni istanza di SPList, per avere la sua struttura in un solo passaggio, in formato XML. &lt;p&gt;Un’operazione ricorrente, oltre allo sfogliare una lista, è creare nuovi elementi al suo interno ovvero creare liste ex-novo. Di seguito è riportato un esempio di codice che aggiunge un contatto alla lista appena sfogliata: &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPWeb web = new SPSite(&amp;quot;http://moss2007dev/&amp;quot;).OpenWeb();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPList listContacts = web.Lists[&amp;quot;Contacts&amp;quot;];&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPListItem newContact = listContacts.Items.Add();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;newContact[&amp;quot;Title&amp;quot;] = &amp;quot;Pialorsi&amp;quot;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;newContact[&amp;quot;First Name&amp;quot;] = &amp;quot;Paolo&amp;quot;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;newContact[&amp;quot;Email&amp;quot;] = &amp;quot;paolo@devleap.it&amp;quot;;&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;newContact.Update();&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;In questo caso l’accesso all’istanza di SPWeb avviene tramite il metodo OpenWeb() dell’oggetto SPSite. Di fatto questo metodo, se invocato nel suo overload senza parametri, restituisce l’istanza di SPWeb corrispondente al sito web radice della Site Collection corrente. Sottolineo il fatto che l’elemento deve prima di tutto essere aggiunto alla lista, tramite il metodo Add() della collezione di Items, quindi solo dopo aver valorizzato i suoi campi può essere salvato, chiamandone il metodo Update(), già visto in precedenza. &lt;p&gt;Nel prossimo estratto di codice invece si crea, completamente da zero, una lista di clienti, con titoli “Clienti”, in un portale di collaborazione SharePoint: &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPWeb web = SPControl.GetContextWeb(Context);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;Guid newListId = web.Lists.Add(&amp;quot;Clienti&amp;quot;, &amp;quot;Lista Clienti&amp;quot;, SPListTemplateType.Contacts);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;Response.Write(String.Format(&amp;quot;List {0} created.&amp;quot;, web.Lists[newListId].Title));&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;La lista viene aggiunta, come accadeva per gli SPListItem, alla collezione delle Lists del SPWeb. Il risultato del metodo di Add(...) è il GUID che identifica univocamente in SharePoint la lista appena creata. Come si vede il tipo di lista è ottenuto tramite una enumerazione di tipologie predefinite (SPListTemplateType). In realtà è anche possibile utilizzare template di liste personalizzati, per creare da codice N istanze di liste secondo modelli proprietari. Non soffermiamoci oltre su aspetti di dettaglio in un articolo introduttivo come questo. &lt;h3&gt;Gestire file e documenti&lt;/h3&gt; &lt;p&gt;Uno degli aspetti più interessanti e rivoluzionari di SharePoint è il fatto che è possibile utilizzare portali e soluzioni SharePoint come valide alternative a sistemi di file sharing tradizionali. Le soluzioni di archiviazione documentale basate su WSS3/MOSS2007 sono gestibili non solo attraverso l’interfaccia utente di SharePoint, Microsoft Office e Windows Explorer, ma anche attraverso l’Object Model. Ogni lista di documenti, dal punto di vista di SharePoint, è innanzitutto una SPList, specializzata nel tipo SPDocumentLibrary. In pratica ogni SPDocumentLibrary non è altro che una classe, derivata da SPList, che specializza alcuni dei suoi comportamenti e funzionalità. Mentre gli elementi di una SPList tradizionale sono oggetti di tipo SPListItem, i documenti all’interno di una SPDocumentLibrary sono oggetti di tipo SPFile. A ciascun SPFile corrisponde però anche un SPListItem che rappresenta il contenitore di meta-informazioni legate al singolo file (autore, data di upload, versione, ecc. e campi personalizzati). &lt;p&gt;Di seguito è riportato un esempio di codice per leggere i file presenti in una document library: &lt;blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;h5&gt;&lt;font color="#008000"&gt;SPWeb web = new SPSite(&amp;quot;http://moss2007dev/&amp;quot;).OpenWeb();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPDocumentLibrary doclib = web.Lists[&amp;quot;Shared Documents&amp;quot;] as SPDocumentLibrary;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;Console.WriteLine(&amp;quot;\n\tHere are the Files in the SPDocumentLibrary:&amp;quot;); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;foreach (SPFile file in doclib.RootFolder.Files)&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; Console.WriteLine(&amp;quot;\tTitle: {0}\n\tUrl: {1}\n\tAuthor: {2}&amp;quot;,&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; file.Title, file.Url, file.Author.Name);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;}&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;Qualora si voglia estrarre da SharePoint il contenuto binario di un file, è possibile accedervi tramite un oggetto di tipo System.IO.Stream, nel modo seguente: &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPWeb web = new SPSite(&amp;quot;http://moss2007dev/&amp;quot;).OpenWeb();&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPDocumentLibrary doclib = web.Lists[&amp;quot;Shared Documents&amp;quot;] as SPDocumentLibrary;&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPFile fileInstance = doclib.RootFolder.Files[&amp;quot;Notes.txt&amp;quot;];&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;Stream fileStream = fileInstance.OpenBinaryStream();&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;using (StreamReader sr = new StreamReader(fileStream))&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;{&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;&amp;nbsp; String data = sr.ReadToEnd();&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;&amp;nbsp; Console.WriteLine(data);&lt;/font&gt;&lt;/h5&gt; &lt;h5&gt;&lt;font color="#008000"&gt;}&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;Anche il salvataggio di un file in una cartella documenti è un’operazione abbastanza banale: &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPWeb web = new SPSite(&amp;quot;http://moss2007dev/&amp;quot;).OpenWeb();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPDocumentLibrary doclib = web.Lists[&amp;quot;Shared Documents&amp;quot;] as SPDocumentLibrary;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;String fileContentAsText = &amp;quot;Sample document content!&amp;quot;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;Byte[] fileContent = Encoding.Unicode.GetBytes(fileContentAsText);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPFile fileUploaded = doclib.RootFolder.Files.Add(&amp;quot;sample.txt&amp;quot;, fileContent);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;fileUploaded.Item[&amp;quot;Title&amp;quot;] = &amp;quot;Sample Document&amp;quot;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;fileUploaded.Item.Update();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;fileUploaded.Update();&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;Come si vede possiamo scrivere il contenuto del file sotto forma di array di Byte, oppure anche come Stream sfruttando un overload differente del metodo Add(...) della lista di Files corrente. Ogni SPFile prevede poi una proprietà di nome Item che corrisponde al SPListItem sottostante. Ogni lista di documenti infatti è prima di tutto una lista di SPListItem, che hanno però una serie di caratteristiche in più finalizzate a descrivere il file rappresentato. Nuovamente si sottolinea l’importanza dell’invocazione del metodo Update() sul SPFile e sul SPListItem sottostante. &lt;p&gt;Un’altra attività abbastanza semplice e ricorrente è il check-in/check-out dei documenti da modello ad oggetti. SharePoint consente infatti di gestire politiche di accesso concorrente ai documenti, sfruttando regole di check-out esclusivo dei file e di check-in al termine delle attività di modifica. Ecco un esempio di codice in grado di prendere un documento, farne il check-out e successivamente il check-in, il tutto da Object Model. &lt;blockquote&gt; &lt;h5&gt;&lt;font color="#008000"&gt;SPWeb web = new SPSite(&amp;quot;http://moss2007dev/&amp;quot;).OpenWeb();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPDocumentLibrary doclib = web.Lists[&amp;quot;Shared Documents&amp;quot;] as SPDocumentLibrary;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;String fileContentAsText = &amp;quot;Sample document content!&amp;quot;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;Byte[] fileContent = Encoding.Unicode.GetBytes(fileContentAsText);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;SPFile fileUploaded = doclib.RootFolder.Files.Add(&amp;quot;sample.txt&amp;quot;, fileContent);&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;fileUploaded.Item[&amp;quot;Title&amp;quot;] = &amp;quot;Sample Document&amp;quot;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;fileUploaded.Item.Update();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;fileUploaded.Update();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;fileUploaded.CheckOut();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;Stream fileStream = fileUploaded.OpenBinaryStream();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;using (StreamReader sr = new StreamReader(fileStream))&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; String data = sr.ReadToEnd();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;nbsp; data = data.ToUpper();&lt;/font&gt;&lt;br /&gt;&amp;nbsp; &lt;font color="#008000"&gt;fileUploaded.SaveBinary(Encoding.Unicode.GetBytes(data)); &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;fileUploaded.Update();&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;fileUploaded.CheckIn(&amp;quot;Upper case done.&amp;quot;);&lt;/font&gt;&lt;/h5&gt;&lt;/blockquote&gt; &lt;p&gt;I metodi più importanti di questo esempio sono CheckOut() e CheckIn(...), dove il nome indica già in modo inequivocabile lo scopo di ciascuno dei due. Volendo è anche possibile annullare un’operazione di check-out, invocando il metodo di UndoCheckOut(). &lt;h3&gt;Conclusioni&lt;/h3&gt; &lt;p&gt;In questo articolo abbiamo “assaggiato” alcune delle potenzialità del modello ad oggetti di SharePoint. È importante ricordare che lo SharePoint Object Model è fruibile da qualsiasi postazione abbia SharePoint installato. Inoltre è fondamentale sottolineare che il codice che usa l’Object Model dall’interno di Web Part o controlli ASP.NET, deve essere autorizzato a farlo, tramite apposite configurazioni di Code Access Security (CAS), altrimenti il codice non sarà autorizzato a girare e non produrrà alcun effetto, anzi in alcune circostanze determinerà errori. &lt;p&gt;In articoli futuri approfondiremo alcuni di questi e altri temi relativi allo sviluppo per SharePoint, come per esempio la creazione di EventHandler e di Workflow personalizzati, l’utilizzo dei Web Service di SharePoint, per la gestione dei contenuti da remoto, e la configurazione della Code Access Security. &lt;h3&gt;Riferimenti&lt;/h3&gt; &lt;p&gt;&lt;b&gt;[1]&lt;/b&gt; &lt;a href="http://msdn.microsoft.com/sharepoint/"&gt;http://msdn.microsoft.com/sharepoint/&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;b&gt;[2]&lt;/b&gt; &lt;a href="http://msdn2.microsoft.com/en-us/library/bb530302.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb530302.aspx&lt;/a&gt; &lt;br /&gt;&lt;b&gt;[3]&lt;/b&gt; &lt;a href="http://msdn2.microsoft.com/en-us/library/bb530301.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb530301.aspx&lt;/a&gt; &lt;br /&gt;&lt;b&gt;[4]&lt;/b&gt; &lt;a href="http://msdn2.microsoft.com/en-us/library/bb153523.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb153523.aspx&lt;/a&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18431" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.devleap.com/paolo/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>WCF Web Centric e Microsoft Search Server Express =&gt; 1 + 1 = 1000! :-)</title><link>http://blogs.devleap.com/paolo/archive/2008/04/25/wcf-web-centric-e-microsoft-search-server-express-gt-1-1-1000.aspx</link><pubDate>Fri, 25 Apr 2008 13:52:34 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18410</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18410</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/04/25/wcf-web-centric-e-microsoft-search-server-express-gt-1-1-1000.aspx#comments</comments><description>&lt;p&gt;Il nuovo &lt;a href="http://www.microsoft.com/enterprisesearch/serverproducts/searchserverexpress/default.aspx"&gt;Microsoft Search Server Express&lt;/a&gt;, di recente annunciato e rilasciato da Microsoft offre tra le sue funzionalità a mio modo di vedere più interessanti il &amp;quot;&lt;a href="http://www.microsoft.com/enterprisesearch/connectors/federated.aspx"&gt;Federated Search&lt;/a&gt;&amp;quot; che consente di rivolgere le ricerche anche ad altri server (MSSX e non), sfruttando un paradigma basato su &amp;quot;connettori&amp;quot; che tra gli altri possono anche nativamente essere risultati in formato RSS 2.0/Atom 1.0, a fronte di richieste HTTP GET (REST), così come previsto dalla specifica OpenSearch.&lt;/p&gt; &lt;p&gt;Bene! Non vi viene in mente nulla?! :-)&lt;/p&gt; &lt;p&gt;Pensiamo a WCF Web Centric, che consente di esporre servizi WCF interrogabili via HTTP GET (in ottica REST) ottenendo risultati in formato POX (Plain Old XML) che possono anche essere Syndication (RSS 2.0 o Atom 1.0). Ebbene ecco che prende forma la possibilità di avere servizi di ricerca implementati con WCF (solo con .NET 3.5) federabili e richiamabili da MSSX 2008. Pensate ad un software gestionale che si rende ricercabile dalla Search Center di SharePoint ... senza nemmeno avere bisogno di BDC.&lt;/p&gt; &lt;p&gt;Non male! :-)&lt;/p&gt; &lt;p&gt;PS: A &lt;a href="http://devcon.devleap.com/agenda.aspx"&gt;DevCon&lt;/a&gt; avremo una sessione dedicata a WCF Web Centric ... per chi volesse approfondire la cosa ci vediamo là.&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18410" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.devleap.com/paolo/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category></item><item><title>WCF: Impostazioni predefinite, limiti configurati/configurabili, parametri che influenzano la scalabilità</title><link>http://blogs.devleap.com/paolo/archive/2008/03/23/wcf-impostazioni-predefinite-limiti-configurati-configurabili-parametri-che-influenzano-la-scalabilit-224.aspx</link><pubDate>Sun, 23 Mar 2008 17:54:30 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18372</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18372</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/03/23/wcf-impostazioni-predefinite-limiti-configurati-configurabili-parametri-che-influenzano-la-scalabilit-224.aspx#comments</comments><description>&lt;p&gt;Segnalo che &lt;a href="http://weblogs.asp.net/paolopia/archive/2008/03/23/wcf-configuration-default-limits-concurrency-and-scalability.aspx"&gt;ho appena pubblicato sul mio blog in inglese&lt;/a&gt; un post relativo a quanto in oggetto. Spero risulti utile.&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18372" width="1" height="1"&gt;</description></item><item><title>STSDev Tool 1.2</title><link>http://blogs.devleap.com/paolo/archive/2008/03/23/stsdev-tool-1-2.aspx</link><pubDate>Sun, 23 Mar 2008 14:47:03 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18371</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18371</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/03/23/stsdev-tool-1-2.aspx#comments</comments><description>&lt;p&gt;Qualche giorno fa è stato aggiornato STSDev, come &lt;a href="http://www.mannsoftware.com/Blog/?p=117"&gt;segnalato da David Mann&lt;/a&gt;. Si tratta di un tool molto utile per chi come me sviluppa personalizzazioni per SharePoint. In particolare è interessante la possibilità, di recente aggiunta, di generare modelli di activity e condition per SharePoint Designer. &lt;a href="http://www.codeplex.com/stsdev"&gt;Qui&lt;/a&gt; il download. Da non sottovalutare il fatto che supporti anche Visual Studio 2008, dove ad oggi le Extension for WSS sono ancora assenti.&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18371" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Libri che consiglio a proposito di SharePoint (per DEV)</title><link>http://blogs.devleap.com/paolo/archive/2008/03/14/libri-che-consiglio-a-proposito-di-sharepoint-per-dev.aspx</link><pubDate>Fri, 14 Mar 2008 14:44:35 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18362</guid><dc:creator>paolo</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18362</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/03/14/libri-che-consiglio-a-proposito-di-sharepoint-per-dev.aspx#comments</comments><description>&lt;p&gt;Stimolato dalla richiesta di un amico, ecco la mia lista personale di libri che consiglio di leggere per diventare programmatori SharePoint:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Professional SharePoint 2007 Development - Wrox&lt;br /&gt;&lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470117567.html"&gt;http://www.wrox.com/WileyCDA/WroxTitle/productCd-0470117567.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Developer&amp;#39;s Guide to the Windows SharePoint Services v3 Platform - Charles River Media&lt;br /&gt;by Todd C. Bleeker&lt;br /&gt;&lt;a href="http://www.charlesriver.com/Books/BookDetail.aspx?productID=149744"&gt;http://www.charlesriver.com/Books/BookDetail.aspx?productID=149744&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Inside Microsoft Windows SharePoint Services 3.0 - Microsoft Press&lt;br /&gt;by T. Pattison, D. Larson&lt;br /&gt;&lt;a href="http://www.microsoft.com/mspress/books/9692.aspx"&gt;http://www.microsoft.com/mspress/books/9692.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Inside Microsoft Office SharePoint Server 2007 - Microsoft Press&lt;br /&gt;by P. Tisseghem&lt;br /&gt;&lt;a href="http://www.microsoft.com/mspress/books/10472.aspx"&gt;http://www.microsoft.com/mspress/books/10472.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Inside the Index and Search Engines: Microsoft® Office SharePoint® Server 2007 - Microsoft Press&lt;br /&gt;by P. Tisseghem, L. Fastrup (Questo libro deve ancora uscire, ma gli autori e l&amp;#39;argomento lo rendono irrinunciabile!)&lt;br /&gt;&lt;a href="http://www.microsoft.com/MSPress/books/12195.aspx"&gt;http://www.microsoft.com/MSPress/books/12195.aspx&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Credo che sia importante leggerli nell&amp;#39;ordine che ho indicato, anche se i primi due testi sono parzialmente in sovrapposizione. Dovendo scegliere tra i due iniziali prenderei il libro di Todd C. Bleeker.&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18362" width="1" height="1"&gt;</description></item><item><title>OBA Composition Reference Toolkit</title><link>http://blogs.devleap.com/paolo/archive/2008/03/06/oba-composition-reference-toolkit.aspx</link><pubDate>Thu, 06 Mar 2008 19:14:23 GMT</pubDate><guid isPermaLink="false">723bc1d7-e66b-4192-854d-44fd94d7f9a3:18350</guid><dc:creator>paolo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.devleap.com/paolo/rsscomments.aspx?PostID=18350</wfw:commentRss><comments>http://blogs.devleap.com/paolo/archive/2008/03/06/oba-composition-reference-toolkit.aspx#comments</comments><description>&lt;p&gt;Oggi ho seguito una sessione in cui &amp;#232; stato presentato il nuovo &lt;a href="http://msdn2.microsoft.com/en-us/architecture/cc196391.aspx"&gt;OBA Composition Reference Toolkit&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Si tratta di un progetto che potrebbe avere del potenziale, soprattutto considerando che:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;consente ai non tecnici di definire soluzioni OBA da un designer (realizzato in WPF) e farne poi il provisioning automatizzato&lt;/li&gt;    &lt;li&gt;&amp;#232; un prodotto estendibile da noi programmatori che possiamo/potremo creare componenti custom utilizzabili nel designer&lt;/li&gt;    &lt;li&gt;prevede un&amp;#39;infrastruttura di sicurezza per gestire chi pu&amp;#242; fare cose nella definizione delle soluzioni OBA&lt;/li&gt;    &lt;li&gt;la prossima refresh di aprile 2008 sar&amp;#224; fornita con &amp;quot;shared source&amp;quot; su CodePlex&lt;/li&gt;    &lt;li&gt;ha gi&amp;#224; una serie di componenti per collegarsi a BDC via SOAP e per &amp;quot;pluggare&amp;quot; componenti di estensione realizzati con VSTO&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Sicuramente da tenere d&amp;#39;occhio ...&lt;/p&gt;&lt;img src="http://blogs.devleap.com/aggbug.aspx?PostID=18350" width="1" height="1"&gt;</description><category domain="http://blogs.devleap.com/paolo/archive/tags/SharePoint/default.aspx">SharePoint</category></item></channel></rss>