<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>SharePoint 2010</title>
        <link>http://blogs.ugidotnet.org/spboss/category/SharePoint 2010.aspx</link>
        <description>SharePoint 2010</description>
        <language>it</language>
        <copyright>Stefano Paterno</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>User Profile vs User Information List + Performance Test</title>
            <link>http://blogs.ugidotnet.org/spboss/archive/2012/02/21/user-profile-vs-user-information-list-performance-test.aspx</link>
            <description>&lt;p&gt;Analizzando un aspetto interessante, sempre in ambito di sviluppi custom, inerente l'accesso alle informazioni personali degli utenti (DisplayName, Account Name, Picture, ecc.) ho messo a confronto l'uso del servizio User Profile e l'uso dell'oggetto SiteUserInfoList, vediamo il codice:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Utilizzo del servizio User Profile&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;SPServiceContext context = SPServiceContext.GetContext(site);   &lt;br /&gt;            UserProfileManager objUserProfileManager = new UserProfileManager(context);    &lt;br /&gt;            UserProfile profile = objUserProfileManager.GetUserProfile(LoginName);&lt;/p&gt;  &lt;p&gt;            string Title1 = profile.DisplayName;&lt;/p&gt;  &lt;p&gt;&lt;code /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Utilizzo dell'oggetto SiteUserInfoList&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;SPUser userinweb = web.EnsureUser(LoginName);   &lt;br /&gt;            &lt;/p&gt;  &lt;p&gt;string Query = "&amp;lt;Where&amp;gt;&amp;lt;Eq&amp;gt;&amp;lt;FieldRef Name='ID' /&amp;gt;&amp;lt;Value Type='Counter'&amp;gt;" + userinweb.ID + "&amp;lt;/Value&amp;gt;&amp;lt;/Eq&amp;gt;&amp;lt;/Where&amp;gt;";   &lt;br /&gt;            string ViewFields = "&amp;lt;FieldRef Name='Title' Nullable='TRUE' /&amp;gt;&amp;lt;FieldRef Name='Picture' Nullable='TRUE' /&amp;gt;";&lt;/p&gt;  &lt;p&gt;            SPQuery _query = new SPQuery();   &lt;br /&gt;            _query.ViewFields = ViewFields;    &lt;br /&gt;            _query.Query = Query;&lt;/p&gt;  &lt;p&gt;            SPListItem userItem = web.SiteUserInfoList.GetItems(_query)[0];&lt;/p&gt;  &lt;p&gt;            string Title2 = userItem["Title"].ToString();&lt;/p&gt;  &lt;p&gt;Come si può notare, nel secondo caso, ho preferito utilizzare una CAML Query e quindi prendere il risulato con l'oggetto GetItems invece di usare il GetItemsById(userinweb.ID) perchè a livello di performance è più vantaggioso (strano ma vero) il primo metodo invece del secondo.&lt;/p&gt;  &lt;p&gt;Ho chiamato questi due metodi, con un ciclo, per 100 volte e il risultato è stato: vince 7 a 0 l'oggetto SiteUserInfoList, a titolo di esempio i tempi che ho preso:&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://www.stefanopaterno.com/image.axd?picture=2012%2f2%2fTempi+UserProfile+e+SiteUserInfoList.PNG" /&gt;&lt;/p&gt;  &lt;p&gt;In questo link che ho trovato sulla rete si possono vedere tutti i campi che potranno essere interrogati per il SiteUserInfoList: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/1c90abd0-54d7-482b-b16c-4c323bfbbd2c/"&gt;http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/1c90abd0-54d7-482b-b16c-4c323bfbbd2c/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Il test l'ho eseguito in locale con un Notebook con processore i7, SSD e 8Gb di Ram, ma l'ho provato anche su una farm composta da 30 server (tipo NASA) e il risultato è stato che per la SiteUserInfoList la differenza tra il tempo finale e quello iniziale è pari a 0, mentre per il servizio User Profile rimane in termine di millesimi un leggero attimo di latenza.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/spboss/aggbug/100789.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stefano Paterno</dc:creator>
            <guid>http://blogs.ugidotnet.org/spboss/archive/2012/02/21/user-profile-vs-user-information-list-performance-test.aspx</guid>
            <pubDate>Tue, 21 Feb 2012 15:52:43 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/spboss/archive/2012/02/21/user-profile-vs-user-information-list-performance-test.aspx#feedback</comments>
            <slash:comments>2446</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/spboss/comments/commentRss/100789.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/spboss/services/trackbacks/100789.aspx</trackback:ping>
        </item>
        <item>
            <title>Social Comments e Security Trimming</title>
            <link>http://blogs.ugidotnet.org/spboss/archive/2012/02/07/social-comments-e-security-trimming.aspx</link>
            <description>&lt;p&gt;Eccomi qui a scrivere un bel post sui Commenti di SharePoint, che mi ha fatto tribolare per un pò ma che alla fine sono riuscito a svangarla (direi come al solito :P).&lt;/p&gt;  &lt;p&gt;In un ambiente enterprise dove la security trimming è attivata potremmo avere qualche difficoltà con alcuni oggetti "social" di SharePoint, in particolare io mi sono scontrato con il metodo GetComments dell'oggetto SocialCommentManager, perchè? Perchè avevo la necessità di far visualizzare a livello pubblico i commenti inseriti su una determinata Uri dagli utenti della intranet che sto sviluppando. Il risultato era che sul mio ambiente di sviluppo, come al solito, tutto fila liscio, mentre una volta fatto il deploy dal cliente...succedeva che ogni utente vedeva i propri commenti :( azz!&lt;/p&gt;  &lt;p&gt;Il seguente snippet riporta il modo con cui richiamavo il metodo GetComments:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;SPWeb web = SPContext.Current.Web;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;SPServiceContext context = SPServiceContext.Current;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;Uri uri = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;Uri(web.Url + pageUrl);&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;SocialCommentManager cm = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;SocialCommentManager(context);&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;SocialComment[] commenti = cm.GetComments(uri);&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Ma non finisce qui, dopo che ho certificato che il codice era giusto ma il risultato atteso non era esatto, provo con il web service di SharePoint e quindi altro snippet:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;SocialDataService sds = &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;SocialDataService();&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;Microsoft.Office.Server.SocialData.SocialDataService.SocialCommentDetail[] comments = sds.GetCommentsOnUrl(&lt;/code&gt;&lt;code&gt;string&lt;/code&gt;&lt;code&gt;.Concat(SPContext.Current.Site.Url, pageUrl), &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;, &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;, &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;Niente, sempre lo stesso risultato :(&lt;/p&gt;  &lt;p&gt;Bene, disassembliamo e vediamo che cosa fanno i metodi e faccio una scoperta che mi lascia stupefatto. C'è un bel metodo INTERNAL ..... GetComments che accetta un parametro bool &lt;strong&gt;needSecurityTrim&lt;/strong&gt; e ora?&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://www.stefanopaterno.com/image.axd?picture=2012%2f2%2fSocialComments.PNG" width="900" /&gt;&lt;/p&gt;  &lt;p&gt;Sia lodata la Reflection, con l'ultimo snippet potrete avere la soluzione ai vostri problemi, senza dover ricorrere a disabilitare il Security Trimming via PowerShell:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;var type = &lt;/code&gt;&lt;code&gt;typeof&lt;/code&gt;&lt;code&gt;(SocialCommentManager);&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;var methods = type.GetMethods(System.Reflection.BindingFlags.DeclaredOnly | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;var method = methods.FirstOrDefault(m =&amp;gt; m.ToString() == &lt;/code&gt;&lt;code&gt;"Microsoft.Office.Server.SocialData.SocialComment[] GetComments(System.Uri, Int32, Int32, System.DateTime, Boolean)"&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;if&lt;/code&gt; &lt;code&gt;(method == &lt;/code&gt;&lt;code&gt;null&lt;/code&gt;&lt;code&gt;) &lt;/code&gt;&lt;code&gt;throw&lt;/code&gt; &lt;code&gt;new&lt;/code&gt; &lt;code&gt;MissingMethodException(&lt;/code&gt;&lt;code&gt;"Social GetComment method not found."&lt;/code&gt;&lt;code&gt;);&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;var comments = method.Invoke(cm, &lt;/code&gt;&lt;code&gt;new&lt;/code&gt; &lt;code&gt;object&lt;/code&gt;&lt;code&gt;[] { uri, 10000, 0, DateTime.MinValue, &lt;/code&gt;&lt;code&gt;false&lt;/code&gt; &lt;code&gt;}) &lt;/code&gt;&lt;code&gt;as&lt;/code&gt; &lt;code&gt;SocialComment[];&lt;/code&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/spboss/aggbug/100756.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stefano Paterno</dc:creator>
            <guid>http://blogs.ugidotnet.org/spboss/archive/2012/02/07/social-comments-e-security-trimming.aspx</guid>
            <pubDate>Tue, 07 Feb 2012 23:24:01 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/spboss/archive/2012/02/07/social-comments-e-security-trimming.aspx#feedback</comments>
            <slash:comments>144</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/spboss/comments/commentRss/100756.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/spboss/services/trackbacks/100756.aspx</trackback:ping>
        </item>
        <item>
            <title>Error occurred in deployment step &amp;lsquo;Activate Features&amp;rsquo;: The field with Id {field guid} defined in feature {feature guid} was found in the current site collection or in a subsite</title>
            <link>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/error-occurred-in-deployment-step-lsquoactivate-featuresrsquo-the-field-with.aspx</link>
            <description>&lt;p&gt;Come risolvere questo errore?&lt;/p&gt;  &lt;p&gt;Nel link &lt;a href="http://tchmiel.wordpress.com/2010/08/09/activate-feature-error-custom-content-types-when-debugging-from-visual-studio-2010/"&gt;http://tchmiel.wordpress.com/2010/08/09/activate-feature-error-custom-content-types-when-debugging-from-visual-studio-2010/&lt;/a&gt; si possono trovare le istruzioni necessarie per far si che in fase di deploy non compaia l'errore in oggetto.&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/spboss/aggbug/100383.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stefano Paterno</dc:creator>
            <guid>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/error-occurred-in-deployment-step-lsquoactivate-featuresrsquo-the-field-with.aspx</guid>
            <pubDate>Thu, 22 Sep 2011 17:14:36 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/error-occurred-in-deployment-step-lsquoactivate-featuresrsquo-the-field-with.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/spboss/comments/commentRss/100383.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/spboss/services/trackbacks/100383.aspx</trackback:ping>
        </item>
        <item>
            <title>Abilitare la Developer Dashboard</title>
            <link>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/abilitare-la-developer-dashboard.aspx</link>
            <description>&lt;p&gt;Al fine di monitorare le performance del vostro lavoro su SharePoint dovrete necessariamente abilitare la Developer Dashboard, attraverso questo si potranno visualizzare tutte le attività inerenti l'elaborazione di pagina, oggetti, tempi di elaborazione e di output, niente male eh...&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://www.stefanopaterno.com/image.axd?picture=2011%2f8%2fDeveloperDashboard+part1.png" /&gt;&lt;/p&gt;  &lt;p&gt;Per prima cosa bisognerà aprire la console di SharePoint 2010 Management Shell:&lt;/p&gt;  &lt;p&gt;&lt;img alt="" src="http://www.stefanopaterno.com/image.axd?picture=2011%2f8%2fDeveloperDashboard+part3.png" /&gt;&lt;/p&gt;    &lt;p&gt;e incollare i seguenti comandi:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;$svc=[Microsoft.SharePoint.Administration.SPWebService]::ContentService
$ddsetting=$svc.DeveloperDashboardSettings
$ddsetting.DisplayLevel=[Microsoft.SharePoint.Administration.SPDeveloperDashboardLevel]::OnDemand
$ddsetting.&lt;span class="kwrd"&gt;Update&lt;/span&gt;()&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;il risultato sarà:&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="http://www.stefanopaterno.com/image.axd?picture=2011%2f8%2fDeveloperDashboard+part2.png" width="800" height="600" /&gt;&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/spboss/aggbug/100382.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stefano Paterno</dc:creator>
            <guid>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/abilitare-la-developer-dashboard.aspx</guid>
            <pubDate>Thu, 22 Sep 2011 17:13:47 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/abilitare-la-developer-dashboard.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/spboss/comments/commentRss/100382.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/spboss/services/trackbacks/100382.aspx</trackback:ping>
        </item>
        <item>
            <title>Attivazione di una Web Feature con Object Model</title>
            <link>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/attivazione-di-una-web-feature-con-object-model.aspx</link>
            <description>&lt;p&gt;Per attivare una feature, che sia di SharePoint o creata dallo sviluppatore, attraverso object model basterà aprire il web nel quale si desidera l'attivazione e utilizzare il metodo &lt;strong&gt;Add&lt;/strong&gt; dell'oggetto Features della variabile Web:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (SPSite site = &lt;span class="kwrd"&gt;new&lt;/span&gt; SPSite(&lt;span class="str"&gt;"http://sito:8080"&lt;/span&gt;)){
         &lt;span class="kwrd"&gt;using&lt;/span&gt; (SPWeb web = site.OpenWeb()){
                    web.Features.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; Guid(&lt;span class="str"&gt;"232f367b-33af-4fba-b560-e8a5e56e7ad7"&lt;/span&gt;), &lt;span class="kwrd"&gt;true&lt;/span&gt;);
          }
}&lt;/pre&gt;&lt;img src="http://blogs.ugidotnet.org/spboss/aggbug/100381.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stefano Paterno</dc:creator>
            <guid>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/attivazione-di-una-web-feature-con-object-model.aspx</guid>
            <pubDate>Thu, 22 Sep 2011 17:10:43 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/attivazione-di-una-web-feature-con-object-model.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/spboss/comments/commentRss/100381.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/spboss/services/trackbacks/100381.aspx</trackback:ping>
        </item>
        <item>
            <title>Pillole di SharePoint Management Shell</title>
            <link>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/pillole-di-sharepoint-management-shell.aspx</link>
            <description>&lt;p&gt;Visto che lo sto utilizzando molto in questo periodo e come al solito mi dimentico le basi :( me lo posto sul blog come reminder :D&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Install Solution&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;stsadm -o addsolution -filename &lt;/em&gt;&lt;em&gt;[percorso del file wsp]&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Upgrade Solution&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;stsadm -o upgradesolution -name [nome del package] -filename [percorso del file wsp] -immediate -allowgacdeployment&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Install Feature *&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;stsadm -o installfeature -filename [feature name].Feature.xml&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;* Nota per l'installazione della feature: il file Feature.xml si trova nel percorso "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES"&lt;/p&gt;&lt;img src="http://blogs.ugidotnet.org/spboss/aggbug/100375.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Stefano Paterno</dc:creator>
            <guid>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/pillole-di-sharepoint-management-shell.aspx</guid>
            <pubDate>Thu, 22 Sep 2011 16:41:40 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/spboss/archive/2011/09/22/pillole-di-sharepoint-management-shell.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/spboss/comments/commentRss/100375.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/spboss/services/trackbacks/100375.aspx</trackback:ping>
        </item>
    </channel>
</rss>