<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0MDQ3cyfyp7ImA9WhBTFEU.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846</id><updated>2013-02-10T00:37:52.997-08:00</updated><category term="virtualization" /><category term="sp2010" /><category term="enterprise content type" /><category term="userprofile" /><category term="tools" /><category term="managed metadata" /><category term="cumulative update" /><category term="powershell" /><category term="variations" /><category term="esf" /><category term="tips" /><category term="sp 2007" /><category term="pattern" /><category term="best practices" /><category term="ipad" /><category term="migration" /><category term="sp1" /><category term="social" /><category term="events" /><category term="sp 2010" /><title>Marco Rizzi SPBlog</title><subtitle type="html">SharePoint, web and my life.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.marcorizzi.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Marco Rizzi</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/marcorizzi/personal" /><feedburner:info uri="marcorizzi/personal" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUUAR3c9cCp7ImA9WhRVEk4.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-5312338565924507207</id><published>2012-01-10T14:07:00.000-08:00</published><updated>2012-01-10T14:07:26.968-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T14:07:26.968-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tips" /><category scheme="http://www.blogger.com/atom/ns#" term="sp2010" /><title>Non tutte le cancellazioni di Content Type sono uguali</title><content type="html">La&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;cancellazione di un content type non è mai
stata una passeggiata. Per cancellare con successo un content type&amp;nbsp;SharePoint internamente effettua una serie di controlli, tra i quali
com'è stato deployato il content type (se tramite feature le cose si
complicano), che non sia referenziato in siti e liste e naturalmente che non ci
siano contenuti ad esso associati. &lt;br /&gt;
Nel caso in
cui una di queste condizioni non sia soddisfatta viene sollevata un'eccezione
che, incrociando le dita, qualche volta è tipizzata (come la famosa
SPException: The content type "XYZ" is part of an application
feature.)&lt;br /&gt;
&lt;br /&gt;
Tavolta
l'object model di SharePoint ci può venire in aiuto. Per ottenere un elenco
degli oggetti, siti e liste, che fanno uso del content type che si sta cercando
di cancellare, c'è il metodo &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spcontenttypeusage.aspx" target="_blank"&gt;SPContentTypeUsage&lt;/a&gt;.&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spcontenttypeusage.getusages.aspx" target="_blank"&gt;GetUsages()&lt;/a&gt;. &lt;br /&gt;
Per qualche
motivo, personalmente ipotizzo sia per ragioni storiche, c'è un ulteriore punto di attenzione molto importante. Mi sto riferendo ad una
differenza di implementazione della cancellazione dei content type tra
SharePoint Foundation e SharePoint Server. Riporto
l'estratto di un &lt;a href="http://msdn.microsoft.com/en-us/library/ms453791.aspx" target="_blank"&gt;articolo&lt;/a&gt; su MSDN:&lt;br /&gt;
&lt;br /&gt;
"&lt;em&gt;You
cannot delete a site content type if it is being used as the basis for other
site or list content types. You must first remove this content type from all
lists that use it and delete all child site content types that are based on it.
 &lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;You cannot
delete a content type from a list if that list contains items of that content
type. However, &lt;span style="font-weight: bold;"&gt;Microsoft SharePoint Foundation
does not consider items that are in the Recycle Bin. If those items are
restored after their content type is deleted from the list, those items are
assigned the default content type for that list&lt;/span&gt;.&lt;/em&gt;" &lt;br /&gt;
&lt;br /&gt;
In
conclusione quello che suggerisco di fare quando non si riesce a cancellare un
content type da object model è verificare approfonditamente i pre-requisiti
della cancellazione. &lt;br /&gt;
In seconda
battuta fare un backup della site collection e poi provare a&amp;nbsp;passare da client
side a server side, optare per usare i WebService, la UI, SP Designer (ebbesi&amp;nbsp;si a volta fa i miracoli)&amp;nbsp;e in
situazioni estreme&amp;nbsp;e/o per i più temerari&amp;nbsp;fare qualche query sul DB per cercare di individuare il
problema considerando sempre che db è fonte di ispirazione ma non di soluzione ai
problemi :-)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 17pt; margin: 0in;"&gt;


&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/2Gkx0-f-REY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/5312338565924507207/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2012/01/non-tutte-le-cancellazioni-di-content.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/5312338565924507207?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/5312338565924507207?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/2Gkx0-f-REY/non-tutte-le-cancellazioni-di-content.html" title="Non tutte le cancellazioni di Content Type sono uguali" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2012/01/non-tutte-le-cancellazioni-di-content.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ABRH0yfSp7ImA9WhRXE0w.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-3111486654760502747</id><published>2011-12-19T08:22:00.000-08:00</published><updated>2011-12-19T08:22:35.395-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-19T08:22:35.395-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="userprofile" /><category scheme="http://www.blogger.com/atom/ns#" term="sp 2010" /><title>WebPart targeting feature con User Profile e custom con IRuntimeFilter2</title><content type="html">&lt;br /&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
Nel
paradigma delle Intranet 2.0 gioco un ruolo importante la personalizzazione dei
contenuti. Sintetizzando il concetto possiamo dire che gli utenti devono essere
in grado di navigare una intranet ottenendo contenuti personalizzati. Quali
sono i criteri di personalizzazione? Sicuramente un ricco profilo utente può
essere un'ottima fonte di informazioni per definire un audience, ma non è
l'unica fonte dati. L'appartenenza a gruppi potrebbe essere di interesse per
individuare classi di profilo. Talvolta sono necessario delle logiche
personalizzate che si basano su dominio, nome utente o informazioni contenuti
in altri sistemi (ad esempio sistema di HR).&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
Calando il
requisito su SharePoint troviamo una funzionalità che fa il caso; è il
targeting e può essere applicato ad interi contenuti (item in generale) o parti
di un contenuto (webpart). Il targeting viene presentato come un campo con il
picker che ne permette la selezione di audience, distribution list e sharepoint
group.&amp;nbsp;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
Con l'amico Carmelo abbiamo appronfondito gli internals.&amp;nbsp;La
configurazione di SharePoint richiede che per usare la funzionalità dei
targeting sia necessario configurare la User Profile Service Application e associarla alla web application tramite il proxy; senza
la USPA associata alla web application, non viene visualizzata la&amp;nbsp;proprietà della webpart Target Audience all'interno della ToolPart.&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-ldZSmbhPZDo/Tu9BNVTrAuI/AAAAAAAAAMw/S4r7NwGg5MY/s1600/TargetAudiences.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="322" src="http://3.bp.blogspot.com/-ldZSmbhPZDo/Tu9BNVTrAuI/AAAAAAAAAMw/S4r7NwGg5MY/s640/TargetAudiences.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
Il sistema
del targeting è implementato a basso livello e questo ne per permette
l'applicazione sulle webpart senza richiedere specifici
sviluppi.&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
Queste
caratteristiche fanno si che il targeting sia disponibilie sono sulla versione Server e non quella &amp;nbsp;Foundation.&amp;nbsp;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
Qui è nata la mia curiosità e
l'approfondimento di questo post. Domande tipo "è possibile fare uso del
targeting anche senza UPSA?" o "se le formazioni delle audience sono
contenuti sui gruppi SharePoint perchè dobbiamo necessariamente fare uso della
USPA?" o "sono ammesse logiche custom per l'assegnazione della
audiences?"&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
Il
principale indagato era un componente che viene istanziato in tutte le webpart,
la cui configurazione è salvata sul web.config nella chiave &lt;span style="font-weight: bold;"&gt;SharePoint/RuntimeFilter. &lt;/span&gt;Sto parlando di questa chiave&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;runtimefilter assembly="Microsoft.Office.Server, Version=14.0.0.0, Culture=neutral,
PublicKeyToken=71e9bce111e9429c" builderurl="audience_chooser.aspx" class="Microsoft.Office.Server.Audience.AudienceManager"&gt;&lt;/runtimefilter&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
La classe Microsoft.Office.Server.Audience.AudienceManager
implementa le interfacce IRuntimeFilter (ormai obsoleta) e IRuntimeFilter2
usata dal WebPartManager per valutare se il sistema di filtro delle webpart
debba essere valutato e utilizzato, e ne influenza la visualizzazione
all’interno della Toolpart. Ho verificato che commentando questa chiave le
webparts non visualizzando più il campo Target Audiences.&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;span lang="it"&gt;Facendo
qualche ricerca ho trovato che componente era già presente su di
Microsoft.SharePoint.Portal, Version=11.0.0.0 (naturalmente al tempo non
c'erano ancora le service application); il sistema ha quindi un punto di estendibilità e permette di implementare custom runtime filter per andare ad gestire i filtri sulle
webpart. Ne parla approfonditamente il libro &lt;/span&gt;&lt;span lang="it" style="font-weight: bold;"&gt;SharePoint 2010 Web Part in Action&lt;/span&gt;&lt;span lang="it"&gt; di &lt;/span&gt;&lt;span lang="en-US" style="font-weight: bold;"&gt;Wictor Wilén&lt;/span&gt;&lt;span lang="en-US"&gt;
(SharePoint MVP e MCM)&lt;/span&gt;&lt;span lang="it"&gt; dedicando appunto un capitolo
all’implementazione di un custom filter &lt;/span&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11.0pt; margin: 0in;"&gt;
"&lt;i&gt;The
runtime filter in SharePoint is a specific class derived from the
IRuntimeFilter2&amp;nbsp;interface.
This class is registered in the web.config file and is called for every Web
Part&amp;nbsp;when
rendering a page. A specific method in the class tells SharePoint whether it
should&amp;nbsp;be shown to
the user. In this section you’ll create a custom runtime filter that can be
used&amp;nbsp;to target
the Web Part using the site collection groups. This will give you the option to&amp;nbsp;target Web
Parts to specific groups even in SharePoint Foundation.&lt;/i&gt;"&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/nIL43MAZlDE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/3111486654760502747/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/12/webpart-targeting-feature-con-user.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/3111486654760502747?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/3111486654760502747?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/nIL43MAZlDE/webpart-targeting-feature-con-user.html" title="WebPart targeting feature con User Profile e custom con IRuntimeFilter2" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-ldZSmbhPZDo/Tu9BNVTrAuI/AAAAAAAAAMw/S4r7NwGg5MY/s72-c/TargetAudiences.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/12/webpart-targeting-feature-con-user.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcMQnY_fSp7ImA9WhRVFk4.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-1768723173455732513</id><published>2011-12-15T09:47:00.000-08:00</published><updated>2012-01-15T04:21:23.845-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-15T04:21:23.845-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sp2010" /><title>Ottenere la versione di SharePoint</title><content type="html">&lt;br /&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Ottenere la
versione della build di SharePoint 2010 è un operazione estremamente semplice,
ma ... ci sono dei ma.&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Il metodo
migliore per ottenere la versione è quello di aprire la Central Admin e
nella sezione System Settings accendere alla voce &lt;b&gt;Manage servers in this farm&lt;/b&gt; (&lt;a href="http://site/_admin/FarmServers.aspx"&gt;http://site/_admin/FarmServers.aspx&lt;/a&gt;).&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-1ppJkDeViZc/TuodW6GPawI/AAAAAAAAAMU/7G-oN4Jww4A/s1600/SP-FarmVersion.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="99" src="http://3.bp.blogspot.com/-1ppJkDeViZc/TuodW6GPawI/AAAAAAAAAMU/7G-oN4Jww4A/s320/SP-FarmVersion.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Per avere
delle informazioni di dettaglio su tutti i
componenti installati (es. language pack) si può andare su Upgrade and
Migration e selezionalare&lt;b&gt; Check product and path installation status&lt;/b&gt; (&lt;a href="http://server/_admin/PatchStatus.aspx"&gt;http://server/_admin/PatchStatus.aspx&lt;/a&gt;)&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-WrEqXt57IZs/Tuodfd6yEHI/AAAAAAAAAMc/-jYUpNxNY_I/s1600/SP-ProductVersion.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="http://4.bp.blogspot.com/-WrEqXt57IZs/Tuodfd6yEHI/AAAAAAAAAMc/-jYUpNxNY_I/s640/SP-ProductVersion.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
In entrambe
i casi è comunque necessario fare accesso alla Central Admin. Ci sono
alternative?&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;
Se abbiamo
accesso al SQL Server che ospita il database della Central Admin e si ha a
disposizione SQL Management Studio, questo script TSQL ci restitusce la build
number.&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
SELECT
Version, UserName&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
FROM
Versions&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
WHERE
VersionId = '00000000-0000-0000-0000-000000000000'&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
ORDER BY Id
DESC&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Se possiamo
fare girare del codice su server SharePoint si può creare una console application che estrae le stesse infomazioni.&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
using
(SPSite startSite = new SPSite("&lt;central admin="" url=""&gt;")) {&lt;/central&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&amp;nbsp;&amp;nbsp; SPFarm farm = startSite.WebApplication.Farm;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&amp;nbsp;&amp;nbsp; SPWebService service =
farm.Services.GetValue&lt;spwebservice&gt;("");&amp;nbsp;&amp;nbsp; &lt;/spwebservice&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&amp;nbsp;&amp;nbsp; foreach (SPWebApplication webApplication in
service.WebApplications) {&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (SPSite site in
webApplication.Sites)&amp;nbsp;&amp;nbsp; {&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Console.WriteLine(string.Format("{0} - {1}", site.Url,
site.ContentDatabase.Name));&amp;nbsp; &lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&amp;nbsp;&amp;nbsp; }&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
}&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Naturalmente questi metodi devono essere eseguiti con un utente che abbia i diritti appropriati. Se non avessimo questi diritti?&amp;nbsp;Se fossimo abilitati ad accedere ad una site collection con una security più limitata? Per farla ancora più difficile: da un sito di publishing
pubblicato su internet e acceduto in modalità anonima possiamo identificare la
build installata?&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
La risposta
è sì, ma ... non è detto che il dato ottenuto sia "sempre" affidabile.&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Per ottenere la versione si deve analizzare il contenuto delle HttpResponse generate da SharePoint &amp;nbsp;e tra gli header troveremo uno dal nome &lt;b&gt;MicrosoftSharePointTeamServices&lt;/b&gt;. Questo header è&amp;nbsp;configurato su IIS da
SharePoint 2010 e mantenuto aggiornato dai vari&amp;nbsp;
aggiornamenti di SP e CU. &lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-2o6uT_eNM48/TuodolN6jyI/AAAAAAAAAMk/kScjTxuCGko/s1600/SP-HttpResponse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="244" src="http://3.bp.blogspot.com/-2o6uT_eNM48/TuodolN6jyI/AAAAAAAAAMk/kScjTxuCGko/s640/SP-HttpResponse.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
Via
Javascript possiamo così scrivere alcune righe di codice per risalire dalla build.&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
var xmlHttp
= new XMLHttpRequest();&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
var url =
"&lt;a href="http://yoursite/"&gt;http://yoursite&lt;/a&gt;";&amp;nbsp; &lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
xmlHttp.open('HEAD',
url, false);&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
xmlHttp.send();&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
var
SPVersion =
xmlHttp.getResponseHeader("MicrosoftSharePointTeamServices");&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
NOTE: talvolta gli
IT Admin considerano che l'esposizione di questo tipo di informazioni possa in
qualche modo 'ledere' la sicurezza della farm. Il ragionamento è
"se chiunque è in grado di ottenere informazioni sul livello di Patch,
la stessa persona potrebbe attaccare la piattaforma sfruttando le vunerabilità
conosciute". Di fatto però la maggior parte dei siti internet ospitati su SharePoint espongono questa informazione ... provare per credere!&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang="it" style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;
&lt;br /&gt;
UPDATE 15/1: ovviamente anche via Powershell con l'addin di SharePoint 2010 otteniamo la build tramite&amp;nbsp;&lt;strong&gt;(Get-SPFarm).BuildVersion &lt;/strong&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/KjQizNpTK-E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/1768723173455732513/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/12/ottenere-la-versione-di-sharepoint.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/1768723173455732513?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/1768723173455732513?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/KjQizNpTK-E/ottenere-la-versione-di-sharepoint.html" title="Ottenere la versione di SharePoint" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-1ppJkDeViZc/TuodW6GPawI/AAAAAAAAAMU/7G-oN4Jww4A/s72-c/SP-FarmVersion.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/12/ottenere-la-versione-di-sharepoint.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIGRHY_fyp7ImA9WhRTFk0.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-6403484410002744755</id><published>2011-11-06T10:35:00.000-08:00</published><updated>2011-11-06T10:35:25.847-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-06T10:35:25.847-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="powershell" /><category scheme="http://www.blogger.com/atom/ns#" term="sp 2010" /><title>PowerShell ISE e SharePoint</title><content type="html">Lavorando con SharePoint a tutti i livelli capiterà,&amp;nbsp;a chi&amp;nbsp;prima ed a&amp;nbsp;che poi,&amp;nbsp;di scrivere dei PowerShell con fare configurazioni, procedure di deploy, setup di servizi,&amp;nbsp;addirittura il setup di tutta la farm&amp;nbsp;e in generale gran parte, se non tutte, le attività amministrative. Naturalmente con il tempo la frequenza di utilizzo di PowerShell aumenta sempre più dapprima&amp;nbsp;si passerà&amp;nbsp;a realizzare e magari scopiazzare semplici script e piano piano si passerà a cose ben più complesse. Come dico sempre ai ragazzi che si avvicinano a SharePoint è &lt;em&gt;PowerShell will be your best friend&lt;/em&gt; :)&lt;br /&gt;
&lt;br /&gt;
SharePoint mette a disposizione direttamente dall’elenco della applicazioni SharePoint 2010 Management Shell. Un prompt dei comandi PowerShell nel quale è pre&amp;nbsp;caricato lo snapin&amp;nbsp;Microsoft.SharePoint.PowerShell.dll. Con un click si può iniziare a scrivere snippet powershell per SharePoint.&lt;br /&gt;
&lt;br /&gt;
Sfruttando PowerShell ISE, un tool incluso nel sistema operativo, si invece ha un vero ambiente di debugging degli script powershell.&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/-4LkS3qqL3k0/TrbPTH05BKI/AAAAAAAAAMA/m7lUOHfkKrk/s1600-h/image%25255B3%25255D.png"&gt;&lt;img alt="image" border="0" height="551" src="http://lh5.ggpht.com/-kvF9bRHzHrY/TrbPUK-ueNI/AAAAAAAAAMI/yoPXu4-HZjs/image_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="618" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Naturalmente PowerShell ISE non carica automaticamente l’assembly con le estensioni SharePoint per PowerShell. E’ quindi necessario inserire come prima riga dello script il comando &lt;br /&gt;&lt;span style="font-family: Courier New;"&gt;Add-PSSnapin Microsoft.SharePoint.Powershell&lt;/span&gt;&lt;br /&gt;e&amp;nbsp;farlo eseguire una volta sola perchè le successive avranno lo snippet precaricato (spesso infatti viene commentato).&lt;br /&gt;
&lt;br /&gt;
Ovviamento l’approccio è migliorabile. E’ sufficiente scrivere qualche riga in più e con uno script più sofisticato controlliamo se lo snapin è già stato caricato. Se non lo è si fa il caricamento, diversamente prosegue.&lt;br /&gt;&lt;code&gt;if ((&lt;/code&gt;&lt;code&gt;Get-PSSnapin&lt;/code&gt; &lt;code&gt;| &lt;/code&gt;&lt;code&gt;Where&lt;/code&gt; &lt;code&gt;{$_.Name &lt;/code&gt;&lt;code&gt;-eq&lt;/code&gt; &lt;code&gt;"Microsoft.SharePoint.PowerShell"&lt;/code&gt;&lt;code&gt;}) &lt;/code&gt;&lt;code&gt;-eq&lt;/code&gt; &lt;code&gt;$null&lt;/code&gt;&lt;code&gt;) { &lt;/code&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp; Add-PSSnapin&lt;/code&gt; &lt;code&gt;Microsoft.SharePoint.PowerShell; &lt;/code&gt;&lt;code&gt;}&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Ammetto però che dover scrivere, meglio copiare, queste righe tende ad essere una perdita di tempo e ci espone ogni volta ad probabili errori di battitura. Per&amp;nbsp;semplificare maggiormente l'approccio&amp;nbsp;ci viene in aiuto la funzionalità &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb613488(v=vs.85).aspx" target="_blank"&gt;PowerShell Profiles&lt;/a&gt;.&amp;nbsp;Un&amp;nbsp;sistema che quando configurato esegue in fase di caricamento un proprio&amp;nbsp;script ed è in questo script che noi andremo ad innestare il caricamento dello snapin. Come si fa?&lt;br /&gt;E' necessario&amp;nbsp;creare uno profile script, io uso questa&amp;nbsp;tipogia&amp;nbsp;&lt;strong&gt;%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1&lt;/strong&gt;, aprire il ps1 e inserire queste righe di codice che vanno&amp;nbsp;a configurare il riutilizzo dello thread&amp;nbsp;ad ogni&amp;nbsp;esecuzione di script e caricano l'assembly con le&amp;nbsp;estensioni PowerShell per SharePoint.&amp;nbsp;&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;$ver = $host | select version &lt;br /&gt;if ($ver.Version.Major -gt 1) {$host.Runspace.ThreadOptions = "ReuseThread"} &lt;br /&gt;if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null) { &lt;br /&gt;&amp;nbsp;&amp;nbsp; Add-PSSnapin "Microsoft.SharePoint.PowerShell" &lt;br /&gt;} &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
D’ora in poi ad ogni apertura di PowerShell ISE verrà caricato lo snapin di SharePoint e anche voi direte come me: “questa si che è vità!!!”&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/Iv667uFGO9Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/6403484410002744755/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/11/powershell-ise-e-sharepoint.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6403484410002744755?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6403484410002744755?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/Iv667uFGO9Q/powershell-ise-e-sharepoint.html" title="PowerShell ISE e SharePoint" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-kvF9bRHzHrY/TrbPUK-ueNI/AAAAAAAAAMI/yoPXu4-HZjs/s72-c/image_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/11/powershell-ise-e-sharepoint.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAAR3w5cCp7ImA9WhdaE0o.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-5327991856105276309</id><published>2011-10-23T06:49:00.000-07:00</published><updated>2011-10-23T06:49:06.228-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-23T06:49:06.228-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="managed metadata" /><category scheme="http://www.blogger.com/atom/ns#" term="sp 2010" /><title>Export e Import TermSet</title><content type="html">Dal momento in cui il backup e restore delle site collection non includono le informazioni contenuti nella Service Application Managed Metadata è facile capire che se una site collection fa uso di colonne di tipo Managed Metadata queste saranno si backuppate (odio questo termine ma lo uso per semplicità) ma non nella loro interezza. Per dirla un pò meglio sarà backuppato solo il valore del identificativo, un guid, del term e una lista nascosta che contiene il nome dei Term utilizzati. &lt;br /&gt;
&lt;br /&gt;
In questi casi è importanti che ci sia allineamento tra il backup della site collection e del Managed Metadata per i TermSet e Terms in essa contenuti. &lt;br /&gt;Ad esempio se a seguito di un back di una site collection sono stati eliminati dei Term e questi erano stati usati nei contenuti sarà necessario ‘ripristinare’ sia la site collection che il managed metadata. Lo stesso discorso va applicato per spostare una site collection da una farm ad un’altra.&lt;br /&gt;
&lt;br /&gt;
Facendo un export del managed metadata dalla farm source e import su quella target verrà ristabilita la normale operatività. &lt;br /&gt;
&lt;h5&gt;
&lt;span style="font-size: large;"&gt;Export&lt;/span&gt;&lt;/h5&gt;
Seguire passo passo la procedura qui descritta per esportare i TermSet: &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Aprire il command Powershell di SharePoint 2010 in modalità Amministrativa  &lt;/li&gt;
&lt;li&gt;Per ottenere il GUID della Managed Metadata SA (MMSA) eseguire&lt;br /&gt;&lt;em&gt;Get-SPServiceApplication&lt;/em&gt; &lt;/li&gt;
&lt;li&gt;Per ottenere il GUID della Managed Metadata SA (MMSA) eseguire &lt;br /&gt;&lt;em&gt;Get-SPServiceApplicationProxy&lt;/em&gt; &lt;/li&gt;
&lt;li&gt;Modificare il seguente script inserendo il path e nome del file di export dei TermSet e i GUID ottenuti nei passi 2 e 3 rispettivamente sulle variabili $mmsApp e $mmsProxy &lt;br /&gt;&lt;em&gt;$mmsApp = "1de49354-364c-4b00-b938-993eee8bf8a7";&lt;/em&gt;&lt;em&gt;$mmsProxy = "8caa7f5f-d68b-40f3-8243-e8ae01573ec8";&lt;/em&gt;&lt;em&gt;Export-SPMetadataWebServicePartitionData -Identity $mmsApp -ServiceProxy $mmsProxy -Path W:\MMSexportfile.bak;&lt;/em&gt;&lt;em&gt;&lt;/em&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;
&lt;span style="font-size: large;"&gt;Import&lt;/span&gt;&lt;/h5&gt;
Seguire passo passo la procedura qui descritta per importare i TermSet: &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Copiare il file di export dei TermSet sulla farm target &lt;/li&gt;
&lt;li&gt;Per ottenere il GUID della Managed Metadata SA (MMSA) eseguire&lt;br /&gt;&lt;em&gt;Get-SPServiceApplication&lt;/em&gt; &lt;/li&gt;
&lt;li&gt;Per ottenere il GUID della Managed Metadata SA (MMSA) eseguire &lt;br /&gt;&lt;em&gt;Get-SPServiceApplicationProxy&lt;/em&gt; &lt;/li&gt;
&lt;li&gt;Modificare il seguente script inserendo il path e nome del file di export dei TermSet e i GUID ottenuti nei passi 2 e 3 rispettivamente sulle variabili $mmsApp e $mmsProxy&lt;br /&gt;&lt;em&gt;$mmsApp = "1de49354-364c-4b00-b938-993eee8bf8a7";&lt;/em&gt;&lt;em&gt;$mmsProxy = "8caa7f5f-d68b-40f3-8243-e8ae01573ec8";&lt;/em&gt;&lt;em&gt;Import-SPMetadataWebServicePartitionData -Identity &lt;/em&gt;&lt;em&gt;$mmsApp -ServiceProxy $mmsproxy -path W:\MMSexportfile.bak -OverwriteExisting;&lt;/em&gt; &lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;
&lt;span style="font-size: large;"&gt;Troubleshooting&lt;/span&gt;&lt;/h5&gt;
Come approcciare i problemi comuni: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Eseguire powershell cmd in Administrative mode &lt;/li&gt;
&lt;li&gt;Se il comando di export lanciato via powershell restituisce un errore di Access denied&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;a href="http://lh5.ggpht.com/-v4R_j3CcYB8/TqQZ5uDaGgI/AAAAAAAAALo/D3ynywuj6bY/s1600-h/clip_image002%25255B5%25255D.jpg"&gt;&lt;img alt="clip_image002" border="0" height="179" src="http://lh5.ggpht.com/-6FH-EQPzV-8/TqQZ6Ck4KPI/AAAAAAAAALw/tTAWs5VWomA/clip_image002_thumb%25255B2%25255D.jpg?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="clip_image002" width="621" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
L’utente dell’app pool del servizio MMSA non ha accesso in scrittura al path specificato. Da IIS Manager ottenere l’identity dell’app pool della MMSA e dare full control sul path specificato &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Se durante l’operazione di Restore dei “Managed Metadata” ottenete il messaggio di errore &lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;&lt;i&gt;&lt;span style="color: red;"&gt;You do not have permission to use the bulk load statement&lt;/span&gt;&lt;/i&gt;&lt;/b&gt; &lt;/div&gt;
&lt;br /&gt;Aggiungere su Sql Server nel gruppo “bulkadmin” l’utenza dell’application pool. Ulteriori info &lt;a href="http://blogs.msdn.com/b/taj/archive/2010/10/20/import-spmetadatawebservicepartitiondata-and-bulk-load-problem.aspx"&gt;qui&lt;/a&gt; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Se durante l’operazione di Restore dei “Managed Metadata” ottenete il messaggio di errore &lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;Import-SPMetadataWebServicePartitionData : Cannot bulk load because the file "C:\99f6833d2bac4c53af26b816afca1d55\ECMGroup.dat" could not be opened.&lt;/span&gt;&lt;/b&gt; &lt;/div&gt;
&lt;br /&gt;To work around, instead of keeping file on Application Server, I kept it on SQL Server box and used the network path to the file in command. You have to give read write access to this share as PowerShell creates temporary files while importing TermStore. After this the command worked as expected and we were able to import TermStore succesfully. More info &lt;a href="http://blogs.msdn.com/b/taj/archive/2011/03/20/import-spmetadatawebservicepartitiondata-error-in-multi-server-deployment.aspx"&gt;here&lt;/a&gt;  &lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/8TRTv5QLZcI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/5327991856105276309/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/10/export-e-import-termset.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/5327991856105276309?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/5327991856105276309?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/8TRTv5QLZcI/export-e-import-termset.html" title="Export e Import TermSet" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-6FH-EQPzV-8/TqQZ6Ck4KPI/AAAAAAAAALw/tTAWs5VWomA/s72-c/clip_image002_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/10/export-e-import-termset.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IMSH46fyp7ImA9WhdUEEo.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-837578776710738966</id><published>2011-09-26T14:13:00.000-07:00</published><updated>2011-09-26T14:13:09.017-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-26T14:13:09.017-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="esf" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="social" /><category scheme="http://www.blogger.com/atom/ns#" term="sp2010" /><title>Enhanced Social Feature (ESF) Project – ActivityAggregator</title><content type="html">&lt;span class="Apple-style-span" style="color: #e69138; font-size: large;"&gt;Activity feed 101&lt;/span&gt;&lt;br /&gt;
Avete presente l’elenco delle attività recenti di Facebook ? Una cosa abbastanza simile è stata implementata su SharePoint 2010. Si chiama Activity Feed e lo si può vedere sul My Site nell’area My Newsfeed (è un servizio di SharePoint Server che naturalmente deve essere esplititamente attivato e configurato). L’activity feed di SharePoint non ha tutte le features di Facebook ma in un ambiente di collaboration/enterprise social forse non sono necessarie, ma la mancanza di qualcuna di esse si fa sentire. Infatti&amp;nbsp;la cosa che balza subito all’occhio&amp;nbsp;dopo poche settimane di utilizzo e l’aggiunta di un numero elevati di colleghi, è la quantità di informazioni che presenti sul feed. Si rischia di perdere aggiornamenti e a differenza di Facebook l’activity feed di SharePoint non permette di “navigare nel tempo”.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #e69138; font-size: large;"&gt;Enhance activity feed&lt;/span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
A fonte dell’alto numero di feed generati dalle attività dei colleghi è nessario uno strumento per aggregare le activity e organizzarle in modo più compatto. Ad esempio ogni volta che un collega aggiunge altre persone tra i suoi colleghi viene scritto un feed per notificare dell’avvenuta aggiunta. Se nel corso di un giorno vengono aggiunte a più riprese 10 persone, nel mio feed troverò 10 activity. Stessa cosa vale per gli aggiornamenti del profilo utente, per i cambi di stato, ecc… Tutte queste informazioni ci servono veramente? Non possono essere sintetizzate?     &lt;br /&gt;
Da questi ragionamenti è nato Activity Aggregator, un componente che si basa sulle activity originali tracciate da SharePoint e le aggrega tramite algoritmi personalizzabili. E’ sviluppato con un’architettura open, o meglio a provider, nella quale è sufficiente implementarne di propri, registarli e il gioco è fatto! :)     &lt;br /&gt;
Vai su &lt;a href="http://esf.codeplex.com/"&gt;http://esf.codeplex.com&lt;/a&gt; per maggiori informazioni e per scaricare il codice aggiornato. La versione attuale è una beta ed utilizzabile unicamente come preview della versione finale.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #e69138; font-size: large;"&gt;Implementazione&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
Sono quatto i componenti chiave del ActivityAggregator:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;QueryActivity&lt;/strong&gt; che si occupa di interrogare SharePoint per ottenere il feed della azioni compiute del mio network &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ActivityAggregatorProvider&lt;/strong&gt; usato come pipeline per le trasformazioni del feed. Sviluppando provider propri e configurandoli sul web.config si agisce sulle singole activity del feed. E’ data massima libertà alle trasformazioni: si possono nascondere e trasformare le activity esistenti senza che queste impattino sulle quelle di SharePoint (non viene persistito nulla sul SocialDb). Si tratta quindi di operazioni di trasformazioni effettuate in memoria. Per migliore le performance potrebbe diventare necessario l’inserimento di cache (funzionalità al momento non presente). &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ActivityFormatter &lt;/strong&gt;che ha come scopo quello di modificare la formattazione delle activity trasformate. Per formattazione si intendo ciò che viene visualizzato nell’activity feed (es. testo, immagini, link, ecc…). Tramite l’utilizzo di un file di risorse tutte le formattazioni possono essere gestite in modalità multilingua. &lt;/li&gt;
&lt;li&gt;La webpart &lt;strong&gt;ExtendedActivityAggragatorWebPart&lt;/strong&gt; è quella che ci occupa di visualizzare le social activity, come avviene già per&amp;nbsp; i My NewsFeed con la webpart OOB di SP, a valle della trasformazione e formattazione. &lt;/li&gt;
&lt;/ol&gt;
Le feature &lt;strong&gt;ActivityAggregatorFeature&lt;/strong&gt; installa la webpart sulla WebPart Gallery e in fase di attivazione si occupa di registrare i type mapping degli oggetti di query che vengono gestiti tramite il pattern Service Locator (quella fornito da Microsoft Pattern &amp;amp; Practice Guidance for SharePoint 2010).&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #e69138; font-size: large;"&gt;Activity Aggregator Providers&lt;/span&gt;     &lt;br /&gt;
In questa build sono inclusi alcuni provider di trasformazione delle social activity:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ProfileChangePropertyActivityAggregatorProvider&lt;/strong&gt; che si occupa di visualizzare una sola activity per i change di profilo di tutti gli utenti del mio network nell’arco di un giorno. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LimitChangesUserStatusActivityAggregatorProvider &lt;/strong&gt;visualizza un numero ridotto di cambi di status per ogni utente. Il numero è configurabile tramite web.config &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CollegueAddictionActivityAggregatorProvider&lt;/strong&gt; che aggrega in un unica activity tutte le aggiunte di colleghi avvenute nell’arco di un giorno&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span class="Apple-style-span" style="color: #e69138; font-size: large;"&gt;Risultato finale&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;br /&gt;
Ecco un esempio di activity feed di OOB di SharePoint e del Activity Aggregator di ESF for SharePoint 2010&lt;br /&gt;
&lt;br /&gt;
&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;
&lt;tr&gt;         &lt;td valign="top" width="50%"&gt;&lt;strong&gt;Activity feed di SharePoint 2010&lt;/strong&gt;&lt;/td&gt;          &lt;td valign="top" width="50%"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;       &lt;/tr&gt;
&lt;tr&gt;         &lt;td valign="top" width="200"&gt;&lt;a href="http://lh5.ggpht.com/-RG8SZ4zMzLs/ToDlD4J1EyI/AAAAAAAAALU/NFylsfZV_Sw/s1600-h/image%25255B15%25255D.png"&gt;&lt;img alt="image" border="0" height="612" src="http://lh3.ggpht.com/-oV7lZP0fV2E/ToDlEiYwsbI/AAAAAAAAALY/6CdvCZFoGr4/image_thumb%25255B9%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="412" /&gt;&lt;/a&gt;&lt;/td&gt;          &lt;td valign="top" width="200"&gt;&lt;/td&gt;       &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;strong&gt;Activity Aggregator di ESF for SharePoint 2010&lt;/strong&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://lh3.ggpht.com/-yBxVnEa3ugo/ToDlFGymZ8I/AAAAAAAAALc/6zyzMEYFTaA/s1600-h/image%25255B16%25255D.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img alt="image" border="0" src="http://lh6.ggpht.com/-4Yj4xzBfC6k/ToDlGOu1TrI/AAAAAAAAALg/cVlHmZoLoBE/image_thumb%25255B10%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/0sKf9CT6ous" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/837578776710738966/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/09/enhanced-social-feature-esf-project.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/837578776710738966?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/837578776710738966?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/0sKf9CT6ous/enhanced-social-feature-esf-project.html" title="Enhanced Social Feature (ESF) Project – ActivityAggregator" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-oV7lZP0fV2E/ToDlEiYwsbI/AAAAAAAAALY/6CdvCZFoGr4/s72-c/image_thumb%25255B9%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/09/enhanced-social-feature-esf-project.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4MSH0yeSp7ImA9WhdWFEU.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-6821258536781289906</id><published>2011-09-08T06:19:00.000-07:00</published><updated>2011-09-08T06:19:49.391-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T06:19:49.391-07:00</app:edited><title>Upgrade di SharePoint dalla August CU</title><content type="html">Finalmente quello che volevamo sentir dire da mesi è stato annunciato. &lt;br /&gt;Di cosa parlo? Non certo del rilascio programmato della CU di Agosto. Si certo interessante ma non stepitoso. &lt;br /&gt;Parlo della nuova modalità per l'aggioramento delle CU di SharePoint che Microsoft ha introdotto.&lt;br /&gt;
&lt;br /&gt;
Fino ad poco fa per installare le CU di SharePoint Server, Microsoft aveva dato indicazione di scaricare (il che significa un bel pò di tempo data la dimensione dei pacchetti) e installare sia SharePoint Foundation che SharePoint Server. Più volte ho discusso con colleghi di Avanade e Microsoft se era proprio necessario compiere le due installazioni. Il risultato di queste discussioni portava alla conclusione cha procedura supportata è quella e che comuque il pacchetto di upgrade di SharePoint Server contiene (quasi) sempre tutti i bits.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Ora la "svolta".&amp;nbsp;&lt;/i&gt;Sulle pagine ufficiali degli &lt;a href="http://technet.microsoft.com/en-us/sharepoint/ff800847"&gt;Update di SharePoint&lt;/a&gt; fanno sapere che è stato cambiato approccio e che in soldoni c'è un pacchetto di aggiornamento cumulativo per ogni versione di SharePoint. &lt;br /&gt;Questo appoccio semplificato e indicato da Microsoft come Best Practice è finalmente realtà.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-nln8LUw0AOw/Tmi-upPTwcI/AAAAAAAAALI/-fgcULGAQMM/s1600/SharePointUpgrade.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-nln8LUw0AOw/Tmi-upPTwcI/AAAAAAAAALI/-fgcULGAQMM/s1600/SharePointUpgrade.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/2m-979RYJiI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/6821258536781289906/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/09/upgrade-di-sharepoint-dalla-august-cu.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6821258536781289906?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6821258536781289906?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/2m-979RYJiI/upgrade-di-sharepoint-dalla-august-cu.html" title="Upgrade di SharePoint dalla August CU" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-nln8LUw0AOw/Tmi-upPTwcI/AAAAAAAAALI/-fgcULGAQMM/s72-c/SharePointUpgrade.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/09/upgrade-di-sharepoint-dalla-august-cu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQCRH08cSp7ImA9WhZaEkQ.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-2311487593739601353</id><published>2011-06-28T14:26:00.001-07:00</published><updated>2011-06-28T14:26:05.379-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-28T14:26:05.379-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sp1" /><category scheme="http://www.blogger.com/atom/ns#" term="sp 2010" /><title>SharePoint 2010 SP1</title><content type="html">&lt;p&gt;Non voglio essere uno dei milioni che in questi giorni scriveranno che è uscita la SP1, bla, bla, bla … ma scrivere un post un pò perchè sto trascurando il blog. un pò per appuntarmi una serie di link che saranno utili averli raggruppati e un pò per fare suoceraggio.&lt;/p&gt;  &lt;p&gt;Curiosità sulla timeline della SP1:   &lt;br /&gt;13/5 sul blog di team di SharePoint viene &lt;a href="http://sharepoint.microsoft.com/blog/Pages/BlogPost.aspx?pID=973" target="_blank"&gt;annuciato&lt;/a&gt; l’imminente rilascio della SP1 dando come data fine giugno    &lt;br /&gt;24/6 &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=26623" target="_blank"&gt;pubblicazione&lt;/a&gt; della SP1 sul sito ufficiale Microsoft Download seguito da nessun annuncio    &lt;br /&gt;28/6 esce un &lt;a href="http://sharepoint.microsoft.com/blog/Pages/BlogPost.aspx?pID=984" target="_blank"&gt;post&lt;/a&gt; sul blog di team di SharePoint l’annuncio del rilascio della SP1, viene pubblicato il &lt;a href="http://support.microsoft.com/kb/2460045" target="_blank"&gt;kb&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Questo mi fa pensare che mentre la scorsa settimana gironzolavo, per lavoro si intende :), nel campus Microsoft a Redmond qualcuno stava facendo l’ultima build, test, finalizzazione dei documenti di kb, ecc… (averci avuto la possibilità di metterci le mani sopra!)&lt;/p&gt;  &lt;p&gt;Per questo rilascio di Service Pack il team di prodotto ha creato un &lt;a href="http://download.microsoft.com/download/B/0/D/B0D1540B-6CF6-4674-9C8E-7A45FD91C163/Microsoft%20SharePoint%202010%20and%20Office%20servers%20Service%20Pack%201%20Changes.xlsx" target="_blank"&gt;foglio Excel&lt;/a&gt; con l’elenco dei bug corretti. Per curiosità ho prodotto e riportato qui sotto un grafico che ragguppa le fix per area per vederne la numerosità.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-_OJsA8rD1wc/TgpG6s0Mz8I/AAAAAAAAAKQ/UWdc1BPNhnI/s1600-h/image%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-qRPKUQ6zJHY/TgpG7Ac-pzI/AAAAAAAAAKU/1IYckeZwC7o/image_thumb%25255B2%25255D.png?imgmax=800" width="509" height="367" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Personalmente l’ho già installata sulla mia macchina di sviluppo e incrocio le dita perchè non ho fatto uno snapshot.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/8V58XI-yh7k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/2311487593739601353/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/06/sharepoint-2010-sp1.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/2311487593739601353?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/2311487593739601353?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/8V58XI-yh7k/sharepoint-2010-sp1.html" title="SharePoint 2010 SP1" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-qRPKUQ6zJHY/TgpG7Ac-pzI/AAAAAAAAAKU/1IYckeZwC7o/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/06/sharepoint-2010-sp1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQNRHw5eyp7ImA9WhZUE0Q.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-6244752505408423085</id><published>2011-06-06T13:42:00.001-07:00</published><updated>2011-06-06T13:49:55.223-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-06T13:49:55.223-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="userprofile" /><category scheme="http://www.blogger.com/atom/ns#" term="sp 2010" /><title>User profile Sub-Types - parte I</title><content type="html">&lt;p&gt;Il trend di adozioni di SharePoint nell’ambito Enterprise è in crescita (a dire di Gartner e dalle mole di progetti che stanno arrivando alle aziende specializzate di settore. SharePoint già da qualche versione diventato una piattaforma che include al suo interno una serie di funzionalità che permettono di spaziare in diverse aree di applicazione e di spingersi ad usare il prodotto come piattaforma di sviluppo. Un radicale cambiamento che nell’ultimo periodo sta investendo l’enterprise arriva dal Web 2.0 che pone gli utenti, se non centro, almeno come parte primaria e attiva nei sistemi. Parlare di Enterprise 2.0 e SharePoint 2010 significa parlare di utenti: in particolare di MyProfile e MySite. Sono felice di ammettere che sempre di più le aziende vogliono abbracciare questo modello, da mio punto di vista vincente perchè quello dei dipendenti è un patrimonio da valorizzare.&lt;/p&gt;  &lt;p&gt;Tornando alle azienze e al processo ‘evolutivo’ queste stanno per affacciarsi al mondo del cloud che non necessariamente significa delegare a terzi, in questo caso Microsoft, la completa gestione della farm ma anche di crearsi un proprio “could” dove ospitare le proprie applicazioni facendo sicuramente un cost saving di risorse. Non voglio aprire il capitolo cloud, forse avrei dovuto evitare :)&lt;/p&gt;  &lt;p&gt;Di cosa parliamo allora? Usando SharePoint per ospitare applicazioni o per usare un gergo più vicino all’enteprise “servizi”, come quello di Collaboration, Intranet, Portali, etc…., viene naturale che questi debbano potersi adattare o fruttare i dati del profilo utente per implementare delle logiche di business. Possiamo quindi pensare che il profilo utente condiviso tra le applicazioni sia lo stesso per tutti gli utenti? No, direi proprio di no.&amp;#160; &lt;br /&gt;A partire dalla versione SharePoint 2010 c’è un nuova modalità per gestire tipi diversi di profili e si chiama User Profile SubType. Ad ogni subtype si possono associare proprietà diverse del profilo e il sistema le gestisce ad esempio nella pagina di modifica del profilo (EditProfile.aspx).&lt;/p&gt;  &lt;p&gt;La configurazione avviene dalla Central Admin nella User Profile Service Application    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/-eldP-yCLEEc/Te07iZ7633I/AAAAAAAAAJQ/AzgYpTH5tLQ/s1600-h/image12.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-IUmTGGt3GOI/Te07i5B-mtI/AAAAAAAAAJU/2B9WAta_KAs/image_thumb8.png?imgmax=800" width="654" height="85" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Manage User Sub-types&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-wH4mtMTJtEk/Te07j90IvVI/AAAAAAAAAJ4/ja9PVuYbPxY/s1600-h/image13%25255B1%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-OSojIHvy_Do/Te07kVDHCTI/AAAAAAAAAJ8/EQYVw1dNEAY/image13_thumb.png?imgmax=800" width="653" height="209" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Una volta creati i subtype possono essere create le proprietà per caratterizzare i subtype    &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/-iQa3dQerhZk/Te07n0APNWI/AAAAAAAAAKA/5_FOyFqrw_4/s1600-h/image39%25255B1%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-TBMQM2WFSdI/Te07omoFa_I/AAAAAAAAAKE/UWCXpDNswKc/image39_thumb.png?imgmax=800" width="651" height="234" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Gli utenti possono così essere modificati per farli ricadere nell’appropriato subtype &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-xE44aCUGmfI/Te07tAsOMFI/AAAAAAAAAKI/Ij5C8u30tdM/s1600-h/image23%25255B1%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-fnFpSf_CW_c/Te07v-U57pI/AAAAAAAAAKM/DypgLN1Fv0M/image23_thumb.png?imgmax=800" width="649" height="188" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Il risultato di questa configurazione, ottenuto sfruttando componenti OOB, è apprezzabile dalla pagina di modifica del profilo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-lqnkI7vvSNM/Te07wPfEZUI/AAAAAAAAAJw/Xy9CRcMrVto/s1600-h/image38.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-gr8cjQ61lm8/Te07w1NcwsI/AAAAAAAAAJ0/h4Y6XVF-ptE/image_thumb24.png?imgmax=800" width="600" height="115" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Prossimamente con una nuova puntata sugli User Profile Sub-Types.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e865f98b-d7a6-42aa-abc9-5caf93ff459e" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sharepoint+user+profile" rel="tag"&gt;sharepoint user profile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/sp2010" rel="tag"&gt;sp2010&lt;/a&gt;&lt;/div&gt;  &lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/gf7fZifHsfs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/6244752505408423085/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/06/user-profile-sub-types-parte-i.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6244752505408423085?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6244752505408423085?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/gf7fZifHsfs/user-profile-sub-types-parte-i.html" title="User profile Sub-Types - parte I" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-IUmTGGt3GOI/Te07i5B-mtI/AAAAAAAAAJU/2B9WAta_KAs/s72-c/image_thumb8.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/06/user-profile-sub-types-parte-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UEQH45fyp7ImA9Wx9bGUg.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-2658004176479079628</id><published>2011-02-28T22:00:00.000-08:00</published><updated>2011-02-28T22:00:01.027-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-28T22:00:01.027-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="events" /><title>Speaker alla SharePoint &amp; Office Conference 2011</title><content type="html">&lt;a href="http://www.technicalconferences.it/" title="Non perdere l'evento dell'anno, iscriviti subito!"&gt;&lt;img alt="Microsoft Technical Conferences 2011" src="http://www.technicalconferences.it/Banners/leaderboard_728x90.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Ancora qualche giorno e poi finisce la early bird per la SharePoint Conference 2011. Fino al 4 marzo potete iscrivervi alla conferenza ad un prezzo scontato, salvo esaurimento posti. Successivamente sarà disponibile comunque effettuare l'iscrizione ma senza sconti.&lt;br /&gt;
&lt;br /&gt;
Preparati ad assistere ad un grande evento: ritornano le &lt;b&gt;Microsoft Technical Conferences&lt;/b&gt;!&lt;br /&gt;
In un'unica location potrai seguire tre delle più importanti conferenze tecniche Microsoft in Italia.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Microsoft SharePoint &amp;amp; Office Conference 2011&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Microsoft SQL Server &amp;amp; Business Intelligence Conference 2011&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Microsoft Unified Communications &amp;amp; Collaboration Conference 2011&lt;/b&gt; &lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Per il secondo anno consecutivo sono fiero di essere tra gli speaker dell'evento con una sessione che terrò in tandem con &lt;a href="http://emalvass.blogspot.com/"&gt;Simone Malvassori&lt;/a&gt;. Questa è la sessione, vi aspettiamo numerosi!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Unit test and SharePoint, you can!&lt;/b&gt;&lt;br /&gt;
Entriamo nel mondo degli unit test e in quello di SharePoint per trovare le intersezioni. L'obiettivo di questa sessione è duplice: sensibilizzare gli sviluppatori a scrivere il codice testabile ed evidenziare l'importanza dei test per l'intero ciclo di vita del software. Mettere in piedi processi di testing automatizzati permette di migliorare la qualità dei progetti. Con che sforzi però? Con quali benefici reali? Quali sono le regole d'oro da seguire per evitare il fallimento? Queste sono alcune delle domande alla quali daremo una risposta.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;a href="http://www.sharepointconference.it/" title="Segui la mia sessione alla Microsoft SharePoint &amp;amp; Office Conference 2011"&gt;&lt;img alt="Microsoft SharePoint &amp;amp; Office Conference 2011" src="http://www.technicalconferences.it/Banners/illspeak-2-spoc-medium-rect_300x250.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Scopri di più su&lt;br /&gt;
&lt;a href="http://www.sharepointconference.it/"&gt;http://www.sharepointconference.it&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/uNZeuNQwPGQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/2658004176479079628/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/02/speaker-alla-sharepoint-office.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/2658004176479079628?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/2658004176479079628?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/uNZeuNQwPGQ/speaker-alla-sharepoint-office.html" title="Speaker alla SharePoint &amp; Office Conference 2011" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/02/speaker-alla-sharepoint-office.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMDRnY6fSp7ImA9Wx9bGUw.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-4719950865928522494</id><published>2011-02-28T10:41:00.000-08:00</published><updated>2011-02-28T10:41:17.815-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-28T10:41:17.815-08:00</app:edited><title>Microsoft Community Contributor Award 2011</title><content type="html">Venerdì sera tornando a casa, stanco della giornata e con un senso di pessimismo come da un pò non avevo, leggo una email che mi ha tirato su il morale e dato la svolta alla serata e non solo. &lt;br /&gt;
Microsoft mi ha assegnato il premio Community Contributor 2011. Grazie! Grazie! Grazie!&lt;br /&gt;
Ecco l'estratto della email:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;"Dear Marco, &lt;br /&gt;
&lt;br /&gt;
Congratulations! We’re pleased to inform you that your contributions to Microsoft online technical communities have been recognized with the Microsoft Community Contributor Award.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;....&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;&lt;i&gt;Nestor Portillo&lt;br /&gt;
Director&lt;br /&gt;
Community &amp;amp; Online Support, Microsoft&lt;/i&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Mi ha fatto molto piacere ottenere un &lt;b&gt;riconoscimento &lt;/b&gt;per le tante ore dedicate alla community. Purtroppo è arrivato in un momento nel quale non sto seguendo molto i forum pubblici dato che nel tempo libero sto lavorando sul progetto Enhanced Social Feature for SharePoint 2010 e la scorsa settimana mi hanno consegnato la casa nuova a Settimo Milanese. Girare per mobilifici, dare il colori, attivare le utenze, ecc... e il mio tempo libero si è completamente azzerato. Naturalmente questo è solo un momento, tornerò comunque ad occuparmi anche del forum. &lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-8_zPWV5XT0w/TWvq2EoHaOI/AAAAAAAAAI4/lZtljuJBkqQ/s1600/MCC+Award+2011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="491" src="https://lh3.googleusercontent.com/-8_zPWV5XT0w/TWvq2EoHaOI/AAAAAAAAAI4/lZtljuJBkqQ/s640/MCC+Award+2011.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/ELt1FO4D56A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/4719950865928522494/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/02/microsoft-community-contributor-award.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/4719950865928522494?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/4719950865928522494?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/ELt1FO4D56A/microsoft-community-contributor-award.html" title="Microsoft Community Contributor Award 2011" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/-8_zPWV5XT0w/TWvq2EoHaOI/AAAAAAAAAI4/lZtljuJBkqQ/s72-c/MCC+Award+2011.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/02/microsoft-community-contributor-award.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQARXk7fip7ImA9Wx9bGU8.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-235887122777992806</id><published>2011-01-20T11:35:00.000-08:00</published><updated>2011-02-28T11:12:24.706-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-28T11:12:24.706-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="esf" /><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><title>Enhanced Social Features for SharePoint 2010 - Community project</title><content type="html">E’ da qualche tempo che sto lavorando ad un progetto, che quanto  prima ho intenzione di pubblicare su codeplex, per &lt;b&gt;migliorare ed  estendere le features Social di SharePoint 2010&lt;/b&gt;. L’idea è quella di  mettere a disposizione della community una serie di funzionalità anche  estendibili, non la classica back box (ce ne sono già così parecchie! ).&lt;br /&gt;
&lt;br /&gt;
Per  realizzare questo progetto vorrei fare in modo che l'incubazione e  l’evoluzione delle idee provengano da esigenze segnalate dalla gente. &lt;u&gt;Fare  un progetto social coinvolgendo la community.&lt;/u&gt; (non si può mica fare  il social da soli!). L'importante sarà avere riscontri da usare come  indicatori: ad esempio se il progetto prenderà piede, quante persone  vorranno partecipare attivamente (non intendo solo sviluppatori ma a  tutti i livelli) ma a leggere vari post in giro ci sono parecchie  richieste, segnalazioni e idee. &lt;br /&gt;
Per fare ciò sarebbe interessante  mettere in piedi un sistema in cui ad esempio vengono votate le feature  da realizzare e quella/e che ottiengono il maggior numero di voti passa  al vaglio dei techical lead per essere realmente implementata.&lt;br /&gt;
&lt;br /&gt;
Tipicamente  questo tipo di iniziative fanno difficoltà a trovare riscontro nel  panorama italiano mentre a livello internazione se ne sono già viste  parecchie. Faccio quindi un grosso in bocca al lupo a &lt;b style="color: blue;"&gt;Enhanced Social Features from SharePoint 2010 - Community Project&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Per  il momento sto muovendo autonomamente i primi passi e appena sarò  pronto un primo componente inizierò la divulgazione. Stay tuned!&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/58FQl1zOCA4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/235887122777992806/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/01/enhanced-social-features-for-sharepoint.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/235887122777992806?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/235887122777992806?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/58FQl1zOCA4/enhanced-social-features-for-sharepoint.html" title="Enhanced Social Features for SharePoint 2010 - Community project" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/01/enhanced-social-features-for-sharepoint.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4ERHszfCp7ImA9Wx9QGUQ.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-4248913650485786777</id><published>2011-01-02T11:51:00.001-08:00</published><updated>2011-01-02T11:51:45.584-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-02T11:51:45.584-08:00</app:edited><title>Il mio 2010: bilancio di quest’anno</title><content type="html">&lt;p&gt;E’ ormai diventata un’usanza di molto blogger quella di tirare le somme dell’anno passato e di scrivere nero su bianco le aree su cui si vuole maggiormente focalizzarsi durante il nuovo anno. Personalmente questa era una cosa che facevo su un pezzetto di carta, lo archiviavo in un armadione e l’anno successivo passavo più di mezza giornata per recuperarlo e avere un riscontro. (qualche volta è andato completamente perso) :). Un’anno è davvero molto lungo, gli obiettivi cambiano e in passato mi è capitato anche di non aver fatto tutt’altro rispetto a quello che avevo scritto. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Bilancio 2010&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Social networking&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Creare un &lt;strong&gt;nuovo blog personale&lt;/strong&gt; per aprire una strada in autonomia.        &lt;br /&gt;Nota negativa: volevo parlare anche di argomenti extra lavorativi, come le mie passioni, ma non ci sono riuscito.&lt;/li&gt;      &lt;li&gt;Nel 2010 ho scritto meno rispetto al passato (21 post contro i 30 nel 2009). E’ però &lt;strong&gt;aumentata la qualità dei post&lt;/strong&gt; da punto di vista tecnico dato che ora uso il blog per scrivere dei mini articoli e non più per fare principalmente rilanci ad altri siti/notizie.&lt;/li&gt;      &lt;li&gt;Continuo a usare Twitter come piattaforma social per contatti rapidi e tante cazzatine. Rispetto all’inizio dell’anno scorso ora lo sto usando proprio poco, ma noto che il network creato tendenzialmente è rimasto inalterato. Mi dispiace che uno dei grossi clienti presso il quale la maggior parte del tempo spesso blocchi twitter e che quindi nel tendere abbia un pò perso&amp;#160; l’abitudine a scrivere.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Microsoft SharePoint Public forum&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Dato che il forum italiano di SharePoint mi sembra sia ben coperto da esperti che rispondono alle domande e consigli, mi sono concentrato sul forum inglese in particolare su &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/sharepoint2010general/threads"&gt;SharePoint 2010 - General Questions and Answers&lt;/a&gt; e &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/sharepoint2010programming/threads"&gt;SharePoint 2010 - Using Visual Studio with SharePoint and other programming&lt;/a&gt;. In un’anno di attività ho risposto a 153 domande delle quali segnalate come risposte ben 67, raggiungendo un totale di 1066 punti. Risultati che mi hanno portato ad essere nei &lt;strong&gt;Top 10 Answerers negli ultimi 3 mesi&lt;/strong&gt;. Nonostante abbia citato tutti questi numeri, preferisco puntare sulla qualità delle risposte curandole con suggerimenti e link ad documenti ufficiali, blog o altri thread.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Conferenze SharePoint&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Con grande soddisfazione ho partecipato come &lt;strong&gt;speaker alla Microsoft SharePoint and Office Conference 2010 italiana&lt;/strong&gt;. La sessione presentata in coppia con &lt;a href="http://alberto.casu.it/" target="_blank"&gt;Alberto&lt;/a&gt; aveva come titolo Collaboration &amp;amp; Social Networking (se qualcuno fosse intessato al desk mi contatti alla mia email). E’ la prima esperienza del genere e l’ho trovata formativa oltre che molto divertente.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Public projects&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://mossusermembership.codeplex.com/" target="_blank"&gt;&lt;strong&gt;MOSSUserMembership&lt;/strong&gt;&lt;/a&gt; è sempre più popolare con quasi 1200 download.&amp;#160; &lt;br /&gt;Nota simpatica che da soddisfazione: spesso gli amici mi contattano segnandomi che nelle farm dove vanno a lavorare trovano già installato questa feature.&lt;/li&gt;      &lt;li&gt;L’appena nato &lt;a href="http://wspdocgenerator.codeplex.com/" target="_blank"&gt;&lt;strong&gt;WSPDocGenerator&lt;/strong&gt;&lt;/a&gt;, anche questo pubblicato su CodePlex, fa un pò fatica a prendere piede. Tra me e me dico meglio! Significa che la documentazione viene fatta con cura durante le fasi di progetto. :)&lt;/li&gt;      &lt;li&gt;&lt;a href="http://blog.marcorizzi.com/2010/12/ricercare-oggetti-nel-recycle-bin.html" target="_blank"&gt;&lt;strong&gt;SearchRecycleBin&lt;/strong&gt;&lt;/a&gt; è una feature per ricercare item nel Recycle Bin di SharePoint.         &lt;br /&gt;[Per chi non se ne fosse accorto le funzionalità OOB di SharePoint non permettono la ricerca nel cestino]&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Corporate - Avanade&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;E’ arrivata la tanto attesa e meritata &lt;strong&gt;promozione&lt;/strong&gt;! Tra qualche mese giungerà anche la nuova Open Astra Sport Tourer color azzurrino.&lt;/li&gt;      &lt;li&gt;Fin dal primi giorno del 2010 ho avuto modo di lavorare su SharePoint 2010 sin dalle beta toccando temi come la migrazione di portali collaborativi e my site, la personalizzazione (talvota anche molto spinte) e lo sviluppo con metodologie. Un canale diretto e dedicato con il supporto Microsoft e talvolta con il team di prodotto hanno permesso di comprendere a pieno l’architettura e le funzionalità e avuto la possibilità di dare feedback puntuali.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Personali&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Un anno ricco di soddifazioni a partire dal matrimonio e al viaggio di nozze in Giappone, fino alle decisione di emigrare a Milano (decisione molto combattuta ma necessaria).&lt;/li&gt;      &lt;li&gt;Fare un mezza maratona: fallito! Ho ripreso a correre con un’uscita settimanale. I km sono davvero pochi per ora ma era da tempo che volevo ricominciare.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;In conclusione è stato un buon anno ricco di soddisfazioni personali e lavorative. I progetti seguiti hanno richiesto molte energie che sono state sottratte alla sfera personale ma essendo sempre in trasferta non hanno pesato così tanto come se fossì stato vicino ai miei cari.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Bye bye 2010&lt;/strong&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/ySD7rrV8-c4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/4248913650485786777/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2011/01/il-mio-2010-bilancio-di-questanno.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/4248913650485786777?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/4248913650485786777?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/ySD7rrV8-c4/il-mio-2010-bilancio-di-questanno.html" title="Il mio 2010: bilancio di quest’anno" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2011/01/il-mio-2010-bilancio-di-questanno.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIARXo6cCp7ImA9Wx9QFUs.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-6055917569829915611</id><published>2010-12-28T12:14:00.001-08:00</published><updated>2010-12-28T12:19:04.418-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-28T12:19:04.418-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><title>WSPDocGenerator pubblicato su Codeplex</title><content type="html">&lt;p&gt;Fiato alle trombe … ed ecco rilasciato un tool che semplifica notevolmente la generazione della documentazione dei WSP!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Scenetta &lt;/strong&gt;(magari vi ritroverete in uno dei personaggi)     &lt;br /&gt;&lt;em&gt;I felici sviluppatori terminano il lavoro; hanno in mano la procedura di installazione e una serie di WSP da installare sulla farm.      &lt;br /&gt;“Siamo pronti per il deploy! Ancora poco e poi andiamo a berci una birra tutti inserime!”-dicono scherzosamente, stanchi della settimana.       &lt;br /&gt;Hanno dovuto lavorare fino a tardi quasi tutte le sere dell’ultima settimana per integrare i componenti sviluppati da tutti loro. Il morale è alto, ce l’hanno fatta ormai!       &lt;br /&gt;Il responsabile del deploy manda un email al dipartimento infrastrutturale (quelli che detengono il potere sulle farm ndr). Arriva subito la risposta “cosa contiene il wsp? mi puoi mandare delle documentazione sul contenuto altrimenti non faccio il deploy”. Questo si gira verso il collega che ha curato e gestito lo sviluppo “mi mandi la documentazione che questa volta non c’è il nostro amico ci installa la soluzione.” o “non ti sei ricordato di mandarmi la documentazione dei WSP, fallo alla svelta!”. La risposta di quest’ultimo nell’80% di casi è (talvolta anche con tono stizzito) “documentazione? per consegnare in tempo e fare il maggior numero di test non abbiamo avuto tempo di scrivere la documentazione. Preferisci la qualità o la documentazione ancora prima di rilasciare!”       &lt;br /&gt;Il responsabile seccato non la fa passare liscia ”Se non facciamo un documento non installatano, muovetevi avete ancora poco tempo altrimenti vi passate la nottata a scrivere documentazione e il deploy salta a domani”.       &lt;br /&gt;“&lt;/em&gt;&lt;em&gt;Che facciamo ora?” si chiedono gli sviluppatori. Tra i ragazzi c’è uno che gira un pò sui forum, blog e community SharePoint che dopo aver pigiato un pò di tasti sul suo PC guarda il team e dice “ Rigraziate Marco Rizzi! Ha sviluppato un tool che genera la documentazione automaticamente a partire da un WSP”. Gli sviluppatori scaricano il tool, creano la documentazione e inviano il tutto in farm. Il resto è normale routine.&amp;#160; &lt;br /&gt;Quella sera in birreria ci scappa anche un brindisi a quello strano tipo che ha scritto il tool che ha salvato la serata …. Happy Deploy!&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Project Description&lt;/strong&gt;     &lt;br /&gt;Generate html documentation (msdn like) of WSP extracting content and reading manifest, features and all related information. Usefull to document every WSP and to understand what WSP deploy.     &lt;br /&gt;Usage: &lt;strong&gt;WSPDocGenerator.exe &amp;lt;WSPs folder&amp;gt; &amp;lt;output folder&amp;gt;&lt;/strong&gt;     &lt;br /&gt;Parameters:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;lt;WSPs folder&amp;gt; wsp folder name &lt;/li&gt;    &lt;li&gt;&amp;lt;output folder&amp;gt; folder used to generate documentation and extract WSP &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Output:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In the output folder an html file for every wsp &lt;/li&gt;    &lt;li&gt;In the output folder the html file 'WSP Documentation.html' with all WSPs information &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://wspdocgenerator.codeplex.com"&gt;&lt;strong&gt;http://wspdocgenerator.codeplex.com&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;!-- AddThis Button BEGIN --&gt;&lt;a class="addthis_button" href="http://www.addthis.com/bookmark.php?v=250&amp;amp;username=marcorizzi"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" alt="Bookmark and Share" src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif" width="125" height="16" /&gt;&lt;/a&gt;&lt;script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#username=marcorizzi"&gt;&lt;/script&gt; &lt;!-- AddThis Button END --&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:02c858a1-5b34-421e-a241-cb9d6e23feef" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sharepoint" rel="tag"&gt;sharepoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wsp" rel="tag"&gt;wsp&lt;/a&gt;,&lt;a href="http://technorati.com/tags/documentation" rel="tag"&gt;documentation&lt;/a&gt;&lt;/div&gt;  &lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/2Bhsh9qtWo4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/6055917569829915611/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/12/wspdocgenerator-pubblicato-su-codeplex.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6055917569829915611?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6055917569829915611?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/2Bhsh9qtWo4/wspdocgenerator-pubblicato-su-codeplex.html" title="WSPDocGenerator pubblicato su Codeplex" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/12/wspdocgenerator-pubblicato-su-codeplex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YARXg-eSp7ImA9Wx9RGUg.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-3895956208957156011</id><published>2010-12-21T11:19:00.000-08:00</published><updated>2010-12-21T11:19:04.651-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-21T11:19:04.651-08:00</app:edited><title>Ricercare oggetti nel Recycle Bin</title><content type="html">&lt;a href="http://lh6.ggpht.com/_6KaJUkJfIM8/TQustGLaReI/AAAAAAAAAH8/RPPIwAHfLHk/s1600-h/clip_image001%5B8%5D.png"&gt;&lt;img alt="clip_image001" border="0" height="175" src="http://lh4.ggpht.com/_6KaJUkJfIM8/TQust53tUjI/AAAAAAAAAIA/y7ZVW2uHlmY/clip_image001_thumb%5B5%5D.png?imgmax=800" style="background-image: none; border: 0px none; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="clip_image001" width="625" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Qualche giorno fa rispondendo ad alcune domande sul newsgroup di &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/sharepoint2010general/threads"&gt;SharePoint 2010 - General Questions and Answers&lt;/a&gt; mi sono imbattuto in una &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/sharepoint2010general/thread/91b8ff1e-8210-4369-a541-c4380a6ee7cf"&gt;richiesta&lt;/a&gt; in merito alla possibile di ricercare elementi del cestino (Recyle Bin).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Recycle Bin 101&lt;/b&gt; &lt;br /&gt;
Il Recycle Bin di SharePoint è accessibile sia a livello di ogni site che a livello di site collection e contiene tutti gli item cancellati. Parlare di un solo cestino non è corretto, SharePoint ha due cestini che si chiamano di primo livello o first stage e secondo livello o second stage. &lt;br /&gt;
Perchè due cestini? Una risposta tipo è: " ci sono due cestini perchè conosciamo i nostri polli (utenti ndr)" :)&lt;br /&gt;
Spiegazioni: gli utenti con la stessa velocità con il quale inseriscono dati sulle liste attrettanto rapidamente li cancellano (se ne hanno i permessi naturalmente). I cestini servono quindi ad evitare che i dati cancellati vengano effettivamente eliminati, parcheggiandoli invece in un'area temporanea dalla quale è possibile ripristinarli o cancellarli definitivamente. &lt;br /&gt;
I dati cancellati dopo un certo periodo di tempo, la configurazione di default è 30 giorni, vengono spostati dal cestino di primo livello a quello di secondo dove permangono ancora per un certo periodo di tempo. &lt;br /&gt;
Mentre al cestino di primo livello posso accedere gli utenti membri della site collection che hanno permessi di Contribute, Design o Full Control, in quello di secondo livello posso accedere solo i site collection administrators.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Problema&lt;/b&gt; &lt;br /&gt;
Facciamo un passo indietro tornando alla richiesta di ricercare item nel cestino. &lt;br /&gt;
Avere centinaia, se non migliaia di elementi nel cestino e richiede avere funzionalità avanzate per permettono di ricercare i dati per restorarli. I dati contenuti nel cestino possono essere ordinati ma non è stata inserita nessuna funzionalità di ricerca sulla user interface di SharePoint. Come fare?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Soluzione&lt;/b&gt; &lt;br /&gt;
L'object model di SharePoint la risposta.    &lt;br /&gt;
Il cestino non una lista e quindi non è possibile interrogarla tramite CAML query. Ci sono una serie di classi quali ad esempio SPRecycleBinQuery, SPRecycleBinItemCollectionPosition, SPRecycleBinItemCollection, SPRecycleBinItem che permettono di interagire con il cestino. Attenzione però non facciamoci trarre in inganno dal nomi pensando che la classe SPRecycleBinQuery possa filtare i dati in qualche meta linguaggo. Questa permette di settare parametri della ricerca (ordinamenti, livello di stage, numero di elemente per pagina, ecc...) ma non di filtrare i contenuti.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: csharp"&gt;private SPRecycleBinQuery CreateQuery(SPRecycleBinItemCollectionPosition page, int rowlimit)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPRecycleBinQuery query = new SPRecycleBinQuery();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.RowLimit = rowlimit;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.ItemState = SPRecycleBinItemState.FirstStageRecycleBin;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.OrderBy = SPRecycleBinOrderBy.Default;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set right page
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (page == null)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.ItemCollectionPosition = SPRecycleBinItemCollectionPosition.FirstPage;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; query.ItemCollectionPosition = page;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return query;
&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;
Un'altra particolarità dell'oggetto SPRecycleBinQuery è che restituisce i dati paginati. Per ottenere il set completo di tutti gli dati contenuti nel calendario risultati occorre quindi interrogarlo più volte, pagina per pagina, passandogli un'oggetto di tipo SPRecycleBinItemCollectionPosition che contiene le informazioni relative alla paginazione.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="brush: csharp"&gt;public void GetRecycleBinItems
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Query recycle bin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPSite site = SPContext.Current.Site;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPRecycleBinItemCollectionPosition page = null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPRecycleBinQuery query = CreateQuery(page, PageRows);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPRecycleBinItemCollection recycleitems = site.GetRecycleBinItems(query);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FilterRecycleBinItems(recycleitems);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; page = recycleitems.ItemCollectionPosition;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (page != null);
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Per filtrare i dati occorrerà quindi lavorare i risultati delle ricerca decidendo se includere o escludere ogni singolo risultato della ricerca.&lt;br /&gt;
E' chiaro che in questo esempio di codice non sono state considerate le performance. Per velocizzare le operazioni si potrebbero inserire degli algoritmi di ricerca avanzata. Un punto di partenza potrebbe essere fare una ricerca binaria facendosi restituire dal SharePoint un'array ordinato sul campo da usare come filtro.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Downloads&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://cid-af3009a530706492.office.live.com/self.aspx/Pubblica/SearchRecycleBin.wsp"&gt;WSP&lt;/a&gt; | &lt;a href="http://cid-af3009a530706492.office.live.com/self.aspx/Pubblica/SearchRecycleBinWebPart-SourceCode.zip"&gt;Source Code&lt;/a&gt;&lt;br /&gt;
&lt;br/&gt;&lt;br /&gt;
&lt;!-- AddThis Button BEGIN --&gt;&lt;br /&gt;
&lt;div class='addthis_toolbox addthis_default_style' expr:addthis:title='data:post.title' expr:addthis:url='data:post.url'&gt;&lt;a class='addthis_button_facebook_like' fb:like:layout='button_count'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a class='addthis_button_tweet'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a class='addthis_counter addthis_pill_style'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;script type="text/javascript"&gt;var addthis_config = {"data_track_clickback":true};&lt;/script&gt;&lt;br /&gt;
&lt;script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#username=marcorizzi"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;!-- AddThis Button END --&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/anM33vYepws" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/3895956208957156011/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/12/ricercare-oggetti-nel-recycle-bin.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/3895956208957156011?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/3895956208957156011?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/anM33vYepws/ricercare-oggetti-nel-recycle-bin.html" title="Ricercare oggetti nel Recycle Bin" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_6KaJUkJfIM8/TQust53tUjI/AAAAAAAAAIA/y7ZVW2uHlmY/s72-c/clip_image001_thumb%5B5%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/12/ricercare-oggetti-nel-recycle-bin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQNRHs5fip7ImA9Wx9bGU8.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-8307200294436940009</id><published>2010-12-07T02:30:00.000-08:00</published><updated>2011-02-28T11:13:15.526-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-28T11:13:15.526-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="userprofile" /><title>Nascondere alcune voci di Activity I'm following dalla Edit User profile page</title><content type="html">&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Problema&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Come nascondere dalla pagina edit user profile delle voci contenute nell'elenco delle Activity I'm following.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Ad esempio in scenari in cui sul profilo utente viene nascosto o eliminata la proprietà &lt;span style="font-style: italic;"&gt;Birthday&lt;/span&gt; è logico anche nascondere dell'elenco delle Activity I'm following la voce &lt;span style="font-style: italic;"&gt;Upcoming birthday e Birthday&lt;/span&gt;. Analogamente se non vengono utilizzate le &lt;span style="font-style: italic;"&gt;membership&lt;/span&gt; ha senso eliminare la voce&lt;span style="font-style: italic;"&gt; New Membership&lt;/span&gt;.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;span style="font-weight: bold;"&gt;Soluzione&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Sia agendo sulla configurazione di SharePoint che programmaticamente sfuttando l'object model di SharePoint non è possibile agire sul questo elenco perchè non è una proprietà del profilo (a differenza di altre quali name, birthdate, ask me about, ecc...)&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Il suggerimento è di lavorare direttamente sulla UI tramite Jquery per nascondere le voci e disattivare le notifiche. Ad ogni salvataggio i controlli sulla UI verranno nascosti e per scrupolo sarà gestito lo stato del controllo in modo da disattivare anche la notifica.&amp;nbsp; Per mettere fuori gioco le notifica di un evento basterà impostare, sempre via Jquery, il checkbox del controllo a &lt;span style="font-style: italic;"&gt;unchecked&lt;/span&gt;.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Come identificare i controlli da nascondere dato che hanno degli ID poco parlanti? &lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Partiamo da un esempio: il controllo associato all'evento compleanno ha come ID ctl00_PlaceHolderMain_ProfileEditorEdit_2, quello associato all'evento assegnazione di una nuova membership è ctl00_PlaceHolderMain_ProfileEditorEdit_10.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Chiaramente il nome del controllo sfrutta una naming convenction dove la prima parte è uguale per tutti (&lt;span style="font-weight: bold;"&gt;ctl00_PlaceHolderMain_ProfileEditorEdit_&lt;/span&gt;) , mentre la seconda ha un numero che rimane invariato ad ogni caricamento controllo per controllo.&amp;nbsp; Facendo qualche indagine (objectmodel + reflector + spluciare il db) ho trovato che questo numero è l&lt;span style="text-decoration: underline;"&gt;'identificativo univoco del evento&lt;/span&gt; ed è contenuto nella tavola &lt;span style="font-style: italic;"&gt;EventType&lt;/span&gt; dello &lt;span style="font-style: italic;"&gt;UserProfile db&lt;/span&gt;.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Possiamo quindi affermare di avere un buon margine di probabilità che questi identificativi non cambieranno nel tempo (disclaimer: farei comunque dei test ad ogni installazione di CU e SP :-) ).&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Completata l'analisi ho scritto questa funziona Jquery che nasconde l'activity type della UI della pagine edit user profile&amp;nbsp; (/_layouts/EditProfile.aspx). &lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;Di seguito ho riportato lo snippet completo per nascondere alcune voci.&lt;/div&gt;&lt;div style="font-family: Calibri; font-size: 11pt; margin: 0in;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;pre class="brush: js"&gt;&amp;lt;script type="text/javascript" src="/_layouts/UGN/jquery-1.4.2.min.js" /&amp;gt;
&amp;lt;script type="text/javascript"&amp;gt;

function HideActivityType(activityControl) {
$("#" + activityControl).attr('checked', false);
$("#" + activityControl).hide();
$("label[for='" + activityControl + "']").hide();
$("label[for='" + activityControl + "']").next().hide();
}

$(document).ready(function () {
// Edit profile page
var birthday = "ctl00_PlaceHolderMain_ProfileEditorEdit_2";
var newMembership = "ctl00_PlaceHolderMain_ProfileEditorEdit_10";

HideActivityType(birthday );
HideActivityType(newMembership );

});
&amp;lt;/script&amp;gt;
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/COUGJqZEdOM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/8307200294436940009/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/12/nascondere-alcune-voci-di-activity-im.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/8307200294436940009?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/8307200294436940009?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/COUGJqZEdOM/nascondere-alcune-voci-di-activity-im.html" title="Nascondere alcune voci di Activity I'm following dalla Edit User profile page" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/12/nascondere-alcune-voci-di-activity-im.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8FSHc9fSp7ImA9Wx9TFkQ.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-5288048358580793087</id><published>2010-11-16T10:00:00.000-08:00</published><updated>2010-11-25T06:53:39.965-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-25T06:53:39.965-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="virtualization" /><title>Crash delle VM VBox con HD .vdi importati e creati con versioni meno recenti</title><content type="html">Questo pomeriggio mentre sorseggiavo una squisito thè al gusto mirtillo preparato rigorosamente tenedo in infusione la bustina per non più di 3 minuti ed evitando di contaminare il gusto con lo zucchero ... ok ok arrivo al sodo. ;)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Con VirtualBox 3.2.10 quando si creano nuove macchine virtuali importando HD .vdi generati con versioni precedente di Vbox si può incorrere nel problema del classico blue screen.&lt;/b&gt;&lt;br /&gt;
Windows parte in recovery mode dopo pochi secondi dal boot è non c’è modo di fare partire il SO.&lt;br /&gt;
Confrontando la configurazione della VM appena creata con altre fatte con precedenti versione di Vbox ho scoperto che l’HD sulla nuova VM viene configurato come SATA mentre sulle altre come IDE. &lt;strike&gt;Non trovando il modo di riconfigurare da UI le impostazioni relative al HD&lt;/strike&gt; e ho dovuto mettere mano direttamente al file xml della VM (ricordarsi di fare un backup del file e aver chiuso il processo VirtualBox.exe).&lt;br /&gt;
Le configurazioni delle VM stanno sotto C:\Users\&lt;username&gt;\.VirtualBox\Machines (ci trovere anche le configurazioni di VM cancellate) in folder che corrisponde al nome dalla VM. &lt;br /&gt;
Occorre quindi modificare il file, salvarlo, fare ripartire Vbox e la VM questa volta andrà su senza problemi.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: red;"&gt; Esempio di XML di VM non funzionante&lt;/span&gt;&lt;/username&gt;&lt;br /&gt;
&lt;username&gt;&amp;lt;StorageControllers&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;AttachedDevice passthrough="false" type="DVD" port="1" device="0"/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/StorageController&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;StorageController name="SATA Controller" type="AHCI" PortCount="1" useHostIOCache="false" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;AttachedDevice type="HardDisk" port="0" device="0"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Image uuid="{6359812f-538b-41cd-a019-31f4dcf11aa1}"/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/AttachedDevice&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/StorageController&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/StorageControllers&amp;amp;gt&lt;/username&gt;&lt;br /&gt;
&lt;username&gt; &lt;/username&gt;&lt;br /&gt;
&lt;div style="color: blue;"&gt;Esempio di XML di VM funzionante&lt;/div&gt;&amp;lt;StorageControllers&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;StorageController name="IDE Controller" type="PIIX4" PortCount="2" useHostIOCache="true"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;AttachedDevice passthrough="false" type="DVD" port="1" device="0"/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;AttachedDevice type="HardDisk" port="0" device="0"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Image uuid="{6359812f-538b-41cd-a019-31f4dcf11aa1}"/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/AttachedDevice&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/StorageController&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/StorageControllers&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PS: per fortuna che poi il thè si è raffreddato e sono riuscito a berlo&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/ckjQ--OZPXw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/5288048358580793087/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/11/crash-delle-vm-vbox-con-hd-vdi.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/5288048358580793087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/5288048358580793087?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/ckjQ--OZPXw/crash-delle-vm-vbox-con-hd-vdi.html" title="Crash delle VM VBox con HD .vdi importati e creati con versioni meno recenti" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/11/crash-delle-vm-vbox-con-hd-vdi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQGRH0-fCp7ImA9Wx5UGU4.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-3973343103091337869</id><published>2010-10-24T08:31:00.000-07:00</published><updated>2010-10-24T08:32:05.354-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-24T08:32:05.354-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="powershell" /><title>Estrarre il contenuto di un WSP via PowerShell</title><content type="html">Lavorando per un progettino che penso nel giro di qualche settimana verrà pubblicato su CodePlex (per ora non posso dire di più) avevo la necessità di estrarre il contenuto di un WSP su file system. Come sappiamo i WSP sono dei CAB rinominati e l'estrazione del contenuto non è cosi semplice se effettuata tramite C# o VB.NET forse ancora meno com PowerShell. Queste almeno erano le sensazioni che avevo prima di approcciare il problema. &lt;br /&gt;
Ho fatto qualche ricerca ottenendo questi risultati: &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;molti suggerivano di farlo a mano da file system&lt;br /&gt;
[grazie ottimo suggerimento! :X]&lt;/li&gt;
&lt;li&gt;lavorare direttamente in C++ o di sfruttare l'&lt;a href="http://support.microsoft.com/kb/310618"&gt;SDK&lt;/a&gt; per interagire con questo formato. [soluzione un pò lunga, preferirei trovare qualcosa di più veloce]&lt;/li&gt;
&lt;li&gt;alcuni hanno realizzato delle librerie managed da usare come facilitatori vedi&amp;nbsp;&lt;a href="http://www.codeproject.com/KB/files/CABCompressExtract.aspx"&gt;http://www.codeproject.com/KB/files/CABCompressExtract.aspx&lt;/a&gt;&lt;br /&gt;
[interessante esempio, ma serve portare dentro tutta sta libreria per solamente estrarre dei file da un CAB? Magari no]&lt;/li&gt;
&lt;li&gt;creare un progetto VS e aggiungere una reference a Shell Automation COM component. Come suggerito sul questo thread&amp;nbsp;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/58d9cf34-9a43-4d58-96c7-44bff69ca5d4"&gt;http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/58d9cf34-9a43-4d58-96c7-44bff69ca5d4&lt;/a&gt;&lt;br /&gt;
[devo comunque compilare con VS. Tra l'altro lo snippet segnalato non espande il CAB tenendo in considerazione la struttura folder/subfolder originaria)&lt;/li&gt;
&lt;li&gt;usare un powershell che si occupa di estrarre il contenuto del CAB su un path generando la struttura a subfolder in esso contenuta. Ho trovato lo snippet powershell sul KB &lt;a href="http://support.microsoft.com/kb/2292741"&gt;2292741&lt;/a&gt;&amp;nbsp;"How to manually update scan engines in Microsoft Forefront Protection for Exchange Server or Microsoft Forefront Protection for SharePoint" (non fatevi inflenzare dal titolo del KB :-)&lt;br /&gt;
[finalmente! era quello che stavo cercando! tempo risparmiato: un'enormità!]&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Per semplicità riporto la funzione PowerShell che si occupa di estrarre il contenuto di un CAB (WSP rinominato) su file system.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;# Use the Shell.Application COM object to extract the&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;# contents of the sourceCabPath and put the contents into&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;# the destinationDirectory. Support is included for cab&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;# files with sub directory hierarchies.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;function ExtractCab($sourceCabPath, $destinationDirectory)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;# Determine if we can call the expand.exe utility&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;# if so use it, otherwise, use the Shell.Application&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;# COM object to perform the expansion of the CAB &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;amp; "expand.exe"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if($?)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;amp; "expand.exe" "-R" $sourceCabPath "-F:*" $destinationDirectory&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$shell = new-object -comobject $ShellProgId&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(!$?)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$(throw "unable to create $ShellProgId object")&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$source = $shell.Namespace($sourceCabPath).items()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$destination = $shell.Namespace($destinationDirectory)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$flags = $DoNotDisplayProgress + $YesAll + $NoConfirmDirectory + $NoUI&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$itemCount = $source.Count&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$cabNameLength = $sourceCabPath.Length&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$cachedDestDir = "" &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relativeDest = ""&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Process each item in the cab. Determine if the destination&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# is a sub directory and create if necessary.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for($i=0; $i -lt $itemCount; $i++)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$lastPathIndex = $source.item($i).Path.LastIndexOf("\");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# If the file inside the zip file should be extracted&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# to a subfolder, then we need to reset the destination&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ($lastPathIndex -gt $cabNameLength)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relativePath = $source.item($i).Path.SubString(($cabNameLength + 1), ($lastPathIndex - $cabNameLength))&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relativeDestDir = $destinationDirectory + $relativePath&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if ($relativeDestDir -ne $cachedDestDir)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relativeDest = $shell.Namespace($relativeDestDir)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$cachedDestDir = $relativeDestDir&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$relativeDest.CopyHere($source.item($i), $flags)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$destination.CopyHere($source.item($i), $flags)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/mIvCtC-_lSo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/3973343103091337869/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/10/estrarre-il-contenuto-di-un-wsp-via.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/3973343103091337869?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/3973343103091337869?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/mIvCtC-_lSo/estrarre-il-contenuto-di-un-wsp-via.html" title="Estrarre il contenuto di un WSP via PowerShell" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/10/estrarre-il-contenuto-di-un-wsp-via.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4HSX07fyp7ImA9Wx5UFkU.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-229391806777725931</id><published>2010-10-21T11:48:00.000-07:00</published><updated>2010-10-21T11:48:58.307-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-21T11:48:58.307-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="best practices" /><title>Aggiornare programmaticamente un campo lookup multi value</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Tahoma, Arial, Helvetica; font-size: 13px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;
Capita spesso di imbattersi in un problema che riguarda la scrittura di valori in un field di tipo lookup multi value. In particolare se cerca di &amp;nbsp;valorizzare la collezione del multi value un pò alla volta senza ogni volta&amp;nbsp;salvare&amp;nbsp;l'item, più o meno&amp;nbsp;come riportato qui sotto, si incapperà nella exception&amp;nbsp;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Unable to cast object of type 'System.String' to type  'Microsoft.SharePoint.SPFieldLookupValueCollection'.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SPListItem item = getItem();&lt;br /&gt;
string fieldName = "LookupMultiValueField";&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;//Code block 1&lt;br /&gt;
SPFieldLookupValueCollection fieldLookupValues = (SPFieldLookupValueCollection)item[fieldName ]; // ok&lt;br /&gt;
fieldLookupValues.Add(new SPFieldLookupValue(1, "value1"));&lt;br /&gt;
item[fieldName ] = fieldLookupValues;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;//Code block 2&lt;br /&gt;
fieldLookupValues = SPFieldLookupValueCollection)item[fieldName]; // Exception&lt;br /&gt;
item.Update();&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
Nel primo blocco di codice viene letto un field, settato il primo valore della collection e successivamente salvata la collection sul item.&amp;nbsp;Il secondo blocco genera la exception che segnalavo prima.&amp;nbsp;Questo perchè una volta modificato o inserito un valore su field&amp;nbsp;lookup multi value&amp;nbsp;la sua tipizzazione torna ad essere string (che di fatto è come viene gestito internamente). In pratico è&amp;nbsp;l'oggetto SPListItem che si occupa di mappare la stringa &lt;i&gt;1;#value1;2;#value2&lt;/i&gt;&amp;nbsp;di un oggetto field lookup multi value tipizzato a SPFieldLookupValueCollection sia in fase di inizializzazione che successivamente ad un update.&lt;br /&gt;
&lt;br /&gt;
Per risolvere il problema occorre quindi eseguire il metodo di Update del SPListItem dopo aver inserito/aggiunto un valore alla collection. Il codice diventa:&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;SPListItem item = getItem();&lt;br /&gt;
string fieldName = "LookupMultiValueField";&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;//Code block 1&lt;br /&gt;
SPFieldLookupValueCollection fieldLookupValues = (SPFieldLookupValueCollection)item[fieldName]; // ok&lt;br /&gt;
fieldLookupValues.Add(new SPFieldLookupValue(1, "value1"));&lt;br /&gt;
item[fieldName] = fieldLookupValues;&lt;br /&gt;
item.Update();&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;//Code block 2&lt;br /&gt;
fieldLookupValues = (SPFieldLookupValueCollection)item[fieldName]; // ok&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;fieldLookupValues.Add(new SPFieldLookupValue(2, "value2"));&lt;/span&gt;&lt;/span&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;item[fieldName] = fieldLookupValues;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;item.Update();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Come Best Practice consiglio di lavorare sempre con un oggetto tipizzato&amp;nbsp;SPFieldLookupValueCollection &lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;evitando nel modo più esclusivo di comporsi stringhe che seguono la sintassi dei campi di lookup&lt;/span&gt;.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/7Wo_MBSgmxM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/229391806777725931/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/10/aggiornare-programmaticamente-un-campo.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/229391806777725931?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/229391806777725931?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/7Wo_MBSgmxM/aggiornare-programmaticamente-un-campo.html" title="Aggiornare programmaticamente un campo lookup multi value" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/10/aggiornare-programmaticamente-un-campo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMARHo_eyp7ImA9Wx9bGU8.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-8764382641388813192</id><published>2010-10-12T02:09:00.000-07:00</published><updated>2011-02-28T11:14:05.443-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-28T11:14:05.443-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="social" /><category scheme="http://www.blogger.com/atom/ns#" term="pattern" /><title>Social Patterns and Interfaces</title><content type="html">&lt;p$1&gt;&lt;p$1&gt;Segnalo un'interessante libro dal titolo &lt;b&gt;Designing Social Interfaces&lt;/b&gt; scritto da &lt;b&gt;Christian Crumlish&lt;/b&gt; (curatore della Yahoo! pattern library e evangelist Yahoo! Developer Network)&amp;nbsp;e &lt;b&gt;Erin Malone&lt;/b&gt; (esperta di user design, ex dipendete Yahoo! che ha lavorato nel team Managing experience design).&lt;/p$1&gt;&lt;/p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;/p$1&gt;&lt;p$1&gt;&lt;/p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;p$1&gt;Il libro&amp;nbsp;non&amp;nbsp;descrive solamente tematiche di user experince ma definisce anche una serie di linee guida, loro li chiamano pattern nel libro&amp;nbsp;(anche se personalmente trovo talvolta un pò forzato questo termine), per la realizzazione di funzionalità core dei social network. Vengono trattate le&amp;nbsp;diverse aree social a partire dalla parte dedicata alla persone (Engagement, Identity, Presence, Reputation) per poi passare ai servizi e la parte core delle iterazioni, ecc...&lt;br /&gt;
&lt;p$1&gt;Molto interessante anche il sito del libro nel quale si possono trovare per ogni pattern degli esempi reali di utilizzo e link a siti/blog che trattano l'argomento.&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;b&gt;&lt;br /&gt;
Abstract&lt;/b&gt;&lt;br /&gt;
&lt;p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;p$1&gt;&lt;i&gt;From the creators of Yahoo!’s Design Pattern Library, Designing Social Interfaces provides you with more than 100 patterns, principles, and best practices, along with salient advice for many of the common challenges you’ll face when starting a social website. Designing sites that foster user interaction and community-building is a valuable skill for web developers and designers today, but it’s not that easy to understand the nuances of the social web. Now you have help.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;Christian Crumlish and Erin Malone share hard-won insights into what works, what doesn’t, and why. You’ll learn how to balance opposing factions and grow healthy online communities by co-creating them with your users.&lt;/i&gt;&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;- Understand the overarching principles you need to consider for every website you create&lt;/i&gt;&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;- Learn basic design patterns for adding social components to an existing site&lt;/i&gt;&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;- Rein in misbehaving users on an active community site&lt;/i&gt;&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;- Build a social experience around a product or service and invite people to join&lt;/i&gt;&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;- Develop a social utility without having to build an entirely new infrastructure&lt;/i&gt;&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;- Enable users of your site’s content to interact with one another&lt;/i&gt;&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;- Offer your members the opportunity to connect in the real world&lt;/i&gt;&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;- Learn to recognize and avoid antipatterns: emergent bad practices in the social network and social media space&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p$1&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p$1&gt;&lt;b&gt;Riferimenti&lt;/b&gt;&lt;br /&gt;
&lt;p$1&gt;Sito del libro 'Designing Social Interfaces'&lt;a href="http://www.designingsocialinterfaces.com/"&gt;&amp;nbsp;http://www.designingsocialinterfaces.com&lt;/a&gt;&lt;br /&gt;
&lt;p$1&gt;Yahoo! Social Patterns&amp;nbsp;&lt;a href="http://developer.yahoo.com/ypatterns/social/"&gt;http://developer.yahoo.com/ypatterns/social/&lt;/a&gt;&lt;br /&gt;
&lt;p$1&gt;Social Patterns &amp;amp; Best Practices&amp;nbsp;&lt;a href="http://designingsocialinterfaces.com/patterns/Main_Page"&gt;http://designingsocialinterfaces.com/patterns/Main_Page&lt;/a&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;/p$1&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/rMiNxIRMlXg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/8764382641388813192/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/10/social-patterns-and-interfaces.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/8764382641388813192?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/8764382641388813192?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/rMiNxIRMlXg/social-patterns-and-interfaces.html" title="Social Patterns and Interfaces" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/10/social-patterns-and-interfaces.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ICQXk9fyp7ImA9Wx5VEk0.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-9196609892737045659</id><published>2010-10-04T07:12:00.000-07:00</published><updated>2010-10-04T07:12:40.767-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-04T07:12:40.767-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="migration" /><category scheme="http://www.blogger.com/atom/ns#" term="sp 2010" /><title>DocumentTemplate sulle library nuove e su quelle migrate</title><content type="html">&lt;strong&gt;Problema&lt;/strong&gt;&lt;br /&gt;
Dopo la migrazione da SharePoint 2007 a 2010 e un pò run-the-system, gli utenti si accorgono che sulle document library migrate si riescono a creare&amp;nbsp;direttamente dalla UI di SharePoint nuovi documenti con Office 2003 e versioni successive&amp;nbsp;mentre sulle nuove document library si possono creare documenti solo con Office 2007 e versioni successive. &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Soluzione&lt;/strong&gt;&lt;br /&gt;
Adottando una strategià di migrazione da SharePoint 2007 al 2010&amp;nbsp;di tipo &lt;a href="http://technet.microsoft.com/en-us/library/cc263299.aspx"&gt;detach e attach del content database&lt;/a&gt;&amp;nbsp;ci si trova&amp;nbsp;in una situazione in cui sulle document library migrate è presente il template di documento originario, per intenderci quello che era stato impostato su SharePoint 2007 dove il template di default è&amp;nbsp;&lt;em&gt;Forms/Document/template.doc&lt;/em&gt; mentre sulle document library create sul nuovo il template di default è &lt;em&gt;Forms/template.dotx&lt;/em&gt;&lt;br /&gt;
Nonostate esista un &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?familyid=941b3470-3ae9-4aee-8f43-c6bb74cd1466&amp;amp;displaylang=en"&gt;Office Converter Pack per Office 2003&lt;/a&gt; che rende possibile l'apertura dei documenti docx purtroppo &lt;strong&gt;il formato dotx non è gestito&lt;/strong&gt; rendendo quindi impossibile l'apertura di template di documenti dotx su Office 2003.&lt;br /&gt;
&lt;br /&gt;
Di fatto&lt;strong&gt; il template di lista document library OOB&amp;nbsp;di SharePoint 2010 non permette di creare un nuovo documento dalla UI tramite il bottone New document sulla ribbon se il client ha installato Office 2003.&lt;/strong&gt; Per dare rendere possibile la creazione di documenti con Office 2003 direttamente dai link su SharePoint 2010 occorre modificare il template di default. Come?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Creare una nuova list definition chiamandola ad esempio 'Office 2003 document library' che eredita lo schema di una lista di tipo document library OOB&amp;nbsp;e sostituire il template dotx con uno in formato&amp;nbsp;dot. In questo modo si darà la possibilità agli utenti&amp;nbsp;di scegliere se usare una lista con template di default per Office 2003 e versioni successive (custom)&amp;nbsp;o Office 2007 e versioni successive (OOB)&lt;/li&gt;
&lt;li&gt;Modificare la list definition di default di una lista document library OOB di SharePoint 2010 aggiungendo un nuovo template dot per dare la possibilità di scelta (magari facendo attenzione&amp;nbsp;a quale&amp;nbsp;scegliere&amp;nbsp;come&amp;nbsp;default)&amp;nbsp;o anche semplicemente sistituendo quello esistente. Questa soluzione può essere implementata con feature che aggiunge un event receiver sui siti in cui si vuole avere questo comportamento. L'event receiver&amp;nbsp;dovrà gestire l'evento di&amp;nbsp;list creation e programmaticamente cambiare il template.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/xvk3o75yZzU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/9196609892737045659/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/10/documenttemplate-sulle-library-nuove-e.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/9196609892737045659?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/9196609892737045659?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/xvk3o75yZzU/documenttemplate-sulle-library-nuove-e.html" title="DocumentTemplate sulle library nuove e su quelle migrate" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/10/documenttemplate-sulle-library-nuove-e.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cERX48eCp7ImA9Wx5QFko.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-491364660911755915</id><published>2010-09-05T01:22:00.000-07:00</published><updated>2010-09-05T01:23:24.070-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-05T01:23:24.070-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="variations" /><category scheme="http://www.blogger.com/atom/ns#" term="sp 2007" /><title>SharePoint 2007 Variations unleashed</title><content type="html">E' stato appena&amp;nbsp;pubblicato sulla sito della&amp;nbsp;SharePointCommunity italiana (&lt;a href="http://www.sharepointcommunity.it/"&gt;http://www.sharepointcommunity.it/&lt;/a&gt;) un mio &lt;a href="http://www.sharepointcommunity.it/documents/WhitePapers/Forms/DispForm.aspx?ID=3"&gt;&lt;span id="goog_982154484"&gt;&lt;/span&gt;articolo&lt;/a&gt;&amp;nbsp;che &amp;nbsp;descrive a tutto tondo il funzionamento e gli internal&amp;nbsp;delle variations di SharePoint 2007 (date le 22 pagine effettivamente più che essere un aticolo è un &lt;u&gt;whitepaper&lt;/u&gt;).&lt;br /&gt;
&lt;br /&gt;
Titolo: &lt;strong&gt;SharePoint 2007 Variations unleashed&lt;/strong&gt;&lt;br /&gt;
Abstract:&lt;br /&gt;
" &lt;em&gt;Per realizzare portali WCM (Web Content Manager) multilingua e multidevice, Sharepoint mette a disposizione una serie di funzionalità per gestire e rendere fruibili i contenuti sia in diverse lingue che tipologie di renderizzazione.&lt;/em&gt; "&lt;br /&gt;
Url completo: &lt;a href="http://www.sharepointcommunity.it/documents/WhitePapers/Forms/DispForm.aspx?ID=3"&gt;http://www.sharepointcommunity.it/documents/WhitePapers/Forms/DispForm.aspx?ID=3&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a class="addthis_button" href="http://www.addthis.com/bookmark.php?v=250&amp;amp;username=marcorizzi"&gt;&lt;img alt="Bookmark and Share" height="16" src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" width="125" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/WupH2yCA7CI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/491364660911755915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/09/sharepoint-2007-variations-unleashed.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/491364660911755915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/491364660911755915?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/WupH2yCA7CI/sharepoint-2007-variations-unleashed.html" title="SharePoint 2007 Variations unleashed" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/09/sharepoint-2007-variations-unleashed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMESXk6eyp7ImA9Wx9bGU8.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-1763275283909168146</id><published>2010-08-24T10:09:00.000-07:00</published><updated>2011-02-28T11:13:28.713-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-28T11:13:28.713-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="userprofile" /><title>Come nascondere Activity Type sul edit del profilo utente</title><content type="html">&lt;b&gt;Cosa sono le activity type?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Era un tema che avevo già affontato durante la mia sessione alla SharePoint Conference Italiana e che riprendo brevemente per che la fosse persa. Su SharePoint 2010 è presente una nuova funzionalità che permette agli utenti di essere notificati via feed su una serie di eventi e azioni che avvengono nel network. Alcune di questi sono legati ad azioni generate direttamente dagli utenti stessi (tipo il cambio dello stato, la scrittura di un post, il rating di un documento, ecc..) altre invece sono di sistema (ad esempio l’avvicinarsi del complenno, il giorno stesso del compleanno, le membership, ecc...).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_6KaJUkJfIM8/THP46YFWgYI/AAAAAAAAAGs/b8fliCn89A0/s1600/HideActivityType1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="331" ox="true" src="http://1.bp.blogspot.com/_6KaJUkJfIM8/THP46YFWgYI/AAAAAAAAAGs/b8fliCn89A0/s640/HideActivityType1.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;La domanda è si possono scegliere quali activity fare visualizzare gli utenti ?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Facciamo l’esempio di un’azienda che non gestisce su sharepoint il campo manager. Avere un activity type che notifica il cambio del manager è inopportuno e quindi se ne ritiene opportuno disattivare questo feed.&lt;br /&gt;
&lt;br /&gt;
Verificata con Microsoft l’assenza di metodi nel object model di SharePoint per nascondere delle activity type del profilo utente ho scoperto che sul database (don’t try this at home ) User Profile Service Application_ProfileDB c’è la tabella ActivityType che contiene l’elenco di tutte le activity type (finalmente i nomi delle tabelle sono autoesplicativi!). Questa tabella ha un campo ActivityTypeName che contiene il nome interno delle activity. Se il nome dell’activity inzia con INTERNAL_ questo type non verrà visualizzato sulla UI (editprofile.aspx).&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_6KaJUkJfIM8/THP5SOg1vUI/AAAAAAAAAG0/4l0OHcXfjS0/s1600/HideActivityType2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" ox="true" src="http://3.bp.blogspot.com/_6KaJUkJfIM8/THP5SOg1vUI/AAAAAAAAAG0/4l0OHcXfjS0/s400/HideActivityType2.jpg" width="337" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Possiamo quindi modifica il contenuto di questa tabella andando cambiare il nome delle activity che vogliamo nascondere? Chiaramente NON è supportato.&lt;br /&gt;
&lt;br /&gt;
Altenativamente &lt;b&gt;si può agire sulla UI tramite JQuery per nascondere i controlli&lt;/b&gt;. Con JQuery è abbastanza semplice fare questo genere di ‘magheggi’. Ecco quindi la soluzione.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Prerequisito&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Scaricare l’ultima versione di &lt;a href="http://www.jquery.com/"&gt;JQuery&lt;/a&gt; e relizzare un feature a livello di farm che permette di deployare i javascript (consiglio sia in installare il javascript nimizzato che quello in versione debug)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Soluzione&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
1) Identificare univocamente quali activity type si intende nascondere della pagina editprofile.aspx. Per fare ciò è necessario navigare sul sorgente della pagina (tramite view source del browser) e prendere i nomi/id degli controlli da nascondere. Per controllo che si occupa del activity type Change Manager s è il ctl00_PlaceHolderMain_ProfileEditorEdit_8. La cosa importante di questo nome è ProfileEditorEdit che identifica tutta l’area dei controlli della sezione Activity I’m following e il numero 8 che corrisponde all’ID del activity type nel database di cui facevo riferimento poco fa. Possiamo quindi essere certi avere un buon margine che questo identificativo non cambierà nel tempo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_6KaJUkJfIM8/THP5YKdc4JI/AAAAAAAAAG8/DV8xWSq8MJI/s1600/HideActivityType3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="134" ox="true" src="http://2.bp.blogspot.com/_6KaJUkJfIM8/THP5YKdc4JI/AAAAAAAAAG8/DV8xWSq8MJI/s640/HideActivityType3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
2) Modificare la master page inserendo la direttiva per l’inclusione di Jquery &lt;br /&gt;
&lt;br /&gt;
&lt;script src="/_layouts/UGN/jquery-1.4.2.min.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
e la funzione che si occupa di nascondere e deselezionare il checkbox&lt;br /&gt;
&lt;br /&gt;
1.&amp;nbsp; function HideActivityType(activityControl) {&lt;br /&gt;
2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$("#" + activityControl).attr('checked', false);&lt;br /&gt;
3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#" + activityControl).hide();&lt;br /&gt;
4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("label[for='" + activityControl + "']").hide();&lt;br /&gt;
5.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("label[for='" + activityControl + "']").next().hide();&lt;br /&gt;
6.&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
La riga numero 2 prende il controllo checkbox e lo disabilita, le due righe successive si occupano di nascondere il controllo checkbox e della label ad esso associata. La riga 4 parte dal controllo label per navigare sul successivo controllo che è quello messo allo scopo per andare a capo (BR) e lo nasconde.&lt;br /&gt;
&lt;br /&gt;
3) Inserire la parte Jquery che va a localizzare i controlli per nasconderli&lt;br /&gt;
&lt;br /&gt;
1. $(document).ready(function () {&lt;br /&gt;
2.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Edit profile page&lt;br /&gt;
3.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var managerChange = "ctl00_PlaceHolderMain_ProfileEditorEdit_8";&lt;br /&gt;
4.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HideActivityType(managerChange);&lt;br /&gt;
5. });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a class="addthis_button" href="http://www.addthis.com/bookmark.php?v=250&amp;amp;username=marcorizzi"&gt;&lt;img alt="Bookmark and Share" height="16" src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif" style="border-width: 0px;" width="125" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/JqoZoZbgl40" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/1763275283909168146/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/08/come-nascondere-activity-type-sul-edit.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/1763275283909168146?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/1763275283909168146?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/JqoZoZbgl40/come-nascondere-activity-type-sul-edit.html" title="Come nascondere Activity Type sul edit del profilo utente" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_6KaJUkJfIM8/THP46YFWgYI/AAAAAAAAAGs/b8fliCn89A0/s72-c/HideActivityType1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/08/come-nascondere-activity-type-sul-edit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQHQnc-fSp7ImA9Wx5SEEQ.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-4246622718140158046</id><published>2010-08-06T05:38:00.000-07:00</published><updated>2010-08-06T05:38:53.955-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-06T05:38:53.955-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><title>Parodia dell'IPad</title><content type="html">&lt;span style="font-family: Verdana, sans-serif;"&gt;Ancora qualche giorno e poi iniziano le meritate vacanze, vi lascio un paio di esilaranti parodie di uno degli oggetti più desiderati dell'ultimo periodo.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;Buon divertimentoe e buone ferie!&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;object height="385" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8005EiEeFuI&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8005EiEeFuI&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;object height="385" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/AyPxJLf83RA&amp;amp;hl=en_US&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/AyPxJLf83RA&amp;amp;hl=en_US&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/ssKSVwELABA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/4246622718140158046/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/08/parodia-dellipad.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/4246622718140158046?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/4246622718140158046?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/ssKSVwELABA/parodia-dellipad.html" title="Parodia dell'IPad" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/08/parodia-dellipad.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYBQ349eip7ImA9Wx5TE0g.&quot;"><id>tag:blogger.com,1999:blog-3416485537983416846.post-6661697391760376668</id><published>2010-07-28T14:23:00.000-07:00</published><updated>2010-07-28T14:39:12.062-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-28T14:39:12.062-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cumulative update" /><category scheme="http://www.blogger.com/atom/ns#" term="sp 2010" /><title>Cumulative Update SharePoint 2010</title><content type="html">&lt;span style="font-family: Verdana, sans-serif;"&gt;Come da &lt;/span&gt;&lt;a href="http://blogs.technet.com/b/stefan_gossner/archive/2010/07/22/the-first-cumulative-update-for-sharepoint-2010-family-has-been-released.aspx"&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;annuncio&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt; di qualche giorno fa di &lt;/span&gt;&lt;a href="http://blogs.technet.com/b/stefan_gossner"&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;Stefan Goßner&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;sul suo blog è stata rilasciata la prima cumulative update per SharePoint Foundation 2010 e SharePoint Server 2010. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;La notizia di per se è già stata ampiamente diffusa su tutti i canali (blog, twitter, forum e anche su facebook) ma la cosa interessante è che tra le fix contenute nel &lt;/span&gt;&lt;a href="http://support.microsoft.com/kb/983497"&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;KB983497&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;nbsp;c'è anche questa che ho provveduto personalmente a segnalare a Microsoft:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;span style="font-family: Times, &amp;quot;Times New Roman&amp;quot;, serif; font-size: large;"&gt;"You clear an activity that you follow in your edit profile screen. However, this action cannot be undone."&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Verdana, sans-serif;"&gt;Qualche settimana fa ci era stata inviata la fix privata da testare&amp;nbsp;sul nostro&amp;nbsp;ambiente di sviluppo per&amp;nbsp;verificare che fosse risolta,&amp;nbsp;in attesa dell'uscite pubblica della CU. &lt;br /&gt;
Spero nei mesi a seguire di avere una serie di sorprese come questa dato il numero (circa 25) e la complessità/importanza di esse&amp;nbsp;che vertono in particolare sull'area social. Per alcune issue la previsione per la fix è SP1 ma la speranza ...&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a class="addthis_button" href="http://www.addthis.com/bookmark.php?v=250&amp;amp;username=marcorizzi"&gt;&lt;img alt="Bookmark and Share" height="16" src="http://s7.addthis.com/static/btn/v2/lg-share-en.gif" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px;" width="125" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/marcorizzi/personal/~4/NzIv3N3D4yU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.marcorizzi.com/feeds/6661697391760376668/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.marcorizzi.com/2010/07/cumulative-update-sharepoint-2010.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6661697391760376668?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3416485537983416846/posts/default/6661697391760376668?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/marcorizzi/personal/~3/NzIv3N3D4yU/cumulative-update-sharepoint-2010.html" title="Cumulative Update SharePoint 2010" /><author><name>Marco Rizzi</name><uri>https://plus.google.com/108523401580982530720</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x0hoG-Mc-Ig/AAAAAAAAAAI/AAAAAAAAAAA/RdUvtdUVdcE/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.marcorizzi.com/2010/07/cumulative-update-sharepoint-2010.html</feedburner:origLink></entry></feed>
