<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Yvan's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/yvan_duhamel/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/feed.xml</link>
    <description>Some feedback on what I learn in my daily job as an escalation engineer at Microsoft</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:35:58 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Thread safety in custom claims providers</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/thread-safety-in-custom-claims-providers</link>
      <pubDate>Wed, 21 May 2014 07:29:53 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2014/05/21/thread-safety-in-custom-claims-providers/</guid>
      <description><![CDATA[Hello,   I'm the author of open source claims provider LDAPCP (https://ldapcp.codeplex.com/) and I...]]></description>
      <content:encoded><![CDATA[<p>Hello, </p>  <p>I'm the author of open source claims provider LDAPCP (<a href="https://ldapcp.codeplex.com/" target="_blank">https://ldapcp.codeplex.com/</a>) and I recently discovered a very important design constraint that causes serious issues if ignored:     <br />Claims providers are mostly called by static class <a href="https://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.administration.claims.spclaimprovideroperations(v=office.15).aspx" target="_blank">SPClaimProviderOperations</a> (actually I think it's the only class that can call them).     <br />This class and its methods are static, which implies that every thread will share the same instance of the claims provider class.     <br />As a consequence, the claims provider itself must absolutely be thread safe, and its critical variables (the ones that store results) must be unique to the current thread, otherwise a thread may alter the result of another thread, and a user might get permissions/claims of another user.</p>  <p>To ensure thread safety, you need <a href="https://msdn.microsoft.com/en-us/library/c5kehkcz.aspx" target="_blank">locks</a>.     <br />Regarding uniqueness of variables, since 1 instance of the claims provider is shared with multiple threads, variables of the class are also shared (they are allocated in the managed heap).     <br />To illustrate this point, I created this small console application that simulates how SPClaimProviderOperations calls custom claims providers:</p>  <div id="codeSnippetWrapper">   <pre id="codeSnippet" style="border-top-style: none; overflow: visible; font-size: 8pt; font-family: &#39;Courier New&#39;, courier, monospace; width: 100%; border-bottom-style: none; color: black; padding-bottom: 0px; direction: ltr; text-align: left; padding-top: 0px; border-right-style: none; padding-left: 0px; margin: 0em; border-left-style: none; line-height: 12pt; padding-right: 0px; background-color: #f4f4f4"><span style="color: #0000ff">using</span> System;<br /><span style="color: #0000ff">using</span> System.Collections.ObjectModel;<br /><span style="color: #0000ff">using</span> System.Threading;<br /><br /><span style="color: #0000ff">namespace</span> LDAPCP_2013_Console<br />{<br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">class</span> Program<br />    {<br />        <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> Main(<span style="color: #0000ff">string</span>[] args)<br />        {<br />            <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; 5; i++)<br />            {<br />                Thread oThread = <span style="color: #0000ff">new</span> Thread(<span style="color: #0000ff">new</span> ThreadStart(FakeSPClaimProviderOperations.CallFillResolve));<br />                oThread.Start();<br />            }<br />            Console.ReadLine();<br />        }<br />    }<br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">class</span> FakeSPClaimProviderOperations<br />    {<br />        <span style="color: #0000ff">static</span> FakeCustomClaimProvider cp;<br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> CallFillResolve()<br />        {<br />            <span style="color: #0000ff">if</span> (cp == <span style="color: #0000ff">null</span>) cp = <span style="color: #0000ff">new</span> FakeCustomClaimProvider();<br />            cp.FillResolve();<br />        }<br />    }<br /><br />    <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> FakeCustomClaimProvider<br />    {<br />        <span style="color: #008000">// Collection shared by every thread</span><br />        Collection&lt;String&gt; MyCollectionClass = <span style="color: #0000ff">new</span> Collection&lt;<span style="color: #0000ff">string</span>&gt;();<br /><br />        <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> FillResolve()<br />        {<br />            <span style="color: #008000">// Collection unique to current thread</span><br />            Collection&lt;String&gt; MyCollectionMethod = <span style="color: #0000ff">new</span> Collection&lt;<span style="color: #0000ff">string</span>&gt;();<br /><br />            MyCollectionMethod.Add(<span style="color: #006080">&quot;item1&quot;</span>);<br />            MyCollectionClass.Add(<span style="color: #006080">&quot;item1&quot;</span>);<br /><br />            Console.WriteLine(String.Format(<span style="color: #006080">&quot;MyCollectionMethod has {0} items.&quot;</span>, MyCollectionMethod.Count.ToString()));<br />            Console.WriteLine(String.Format(<span style="color: #006080">&quot;MyCollectionClass has {0} items.\r\n&quot;</span>, MyCollectionClass.Count.ToString()));<br />        }<br />    }<br />}<br /></pre>

  <br /></div>

<p>Output: 
  <br />MyCollectionMethod has 1 items. 

  <br />MyCollectionClass has 1 items. </p>

<p>MyCollectionMethod has 1 items. 
  <br />MyCollectionClass has 2 items. </p>

<p>MyCollectionMethod has 1 items. 
  <br />MyCollectionClass has 3 items. </p>

<p>MyCollectionMethod has 1 items. 
  <br />MyCollectionClass has 4 items. </p>

<p>MyCollectionMethod has 1 items. 
  <br />MyCollectionClass has 5 items.</p>

<p>To conclude, ensuring thread safety and isolation of variables is absolutely essential in custom claims providers, otherwise random permissions issues may occur and they are very difficult to track down. 
  </p>]]></content:encoded>
    </item>
    <item>
      <title>How to implement Active Directory resolution with SAML authentication in SharePoint 2010?</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/how-to-implement-active-directory-resolution-with-saml-authentication-in-sharepoint-2010</link>
      <pubDate>Wed, 28 Mar 2012 05:11:13 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2012/03/28/how-to-implement-active-directory-resolution-with-saml-authentication-in-sharepoint-2010/</guid>
      <description><![CDATA[If you configured SharePoint web application in claims mode with federated authentication (with an...]]></description>
      <content:encoded><![CDATA[<p>If you configured SharePoint web application in claims mode with federated authentication (with an external STS such as ADFS), you certainly remarked that OOB SharePoint does not offer any search or resolution against Active Directory. And you certainly thought it would be really nice to have it.</p>  <p>Well, there are good reasons to explain this: since users authenticate in an external STS, SharePoint cannot assume if the users authenticated within the organization, or outside, and it also doesn’t know if users authenticated in a LDAP or in a totally different login system such as a SQL DB.</p>  <p>Fortunately, SharePoint gives the possibility for developers to&#160; create a claim provider that implements this, and I recently published mine on codeplex: <a href="https://ldapcp.codeplex.com/" target="_blank">https://ldapcp.codeplex.com/</a>. It integrates easily with existing environments, does not mess up anything and is available for free with the source code!</p>]]></content:encoded>
    </item>
    <item>
      <title>Supply XML parameters in a SOAP Service Connection with SharePoint Designer 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/supply-xml-parameters-in-a-soap-service-connection-with-sharepoint-designer-2010</link>
      <pubDate>Mon, 29 Nov 2010 04:53:37 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2010/11/29/supply-xml-parameters-in-a-soap-service-connection-with-sharepoint-designer-2010/</guid>
      <description><![CDATA[SharePoint Designers allows to create a data source based on a web service, and then use this data...]]></description>
      <content:encoded><![CDATA[<p>SharePoint Designers allows to create a data source based on a web service, and then use this data source in a page.</p>  <p>Let’s say you want to display search results in a page. To do so you can use the QueryEx method of the search.asmx web service. This method takes 1 parameter, queryXml, which is an XML representation of a query.</p>  <p>To create the datasource, you click on Data Sources &gt; SOAP Service Connection (in the ribbon). This window appears:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/14/51/metablogapi/7558.Create-Datasource_518A16C2.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-14-51-metablogapi/7558.Create_2D00_Datasource_5F00_518A16C2.jpg"><img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Create Datasource" border="0" alt="Create Datasource" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/14/51/metablogapi/8055.Create-Datasource_thumb_62419BA3.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-14-51-metablogapi/8055.Create_2D00_Datasource_5F00_thumb_5F00_62419BA3.jpg" width="757" height="523" /></a></p>  <p>&#160;</p>  <p>In the Service description location field, type the URL of the search web service. For example: <a title="https://yvandev10:6000/_vti_bin/search.asmx?WSDL" href="https://yvandev10:6000/_vti_bin/search.asmx?WSDL">https://yvandev10:6000/_vti_bin/search.asmx?WSDL</a> and click “Connect Now”.</p>  <p>In the parameters, queryXml attribute appears so you can set its value by clicking on “Modify”.</p>  <p>Normally, queryXml looks like the following:</p>  <p>&lt;QueryPacket xmlns=&quot;urn:Microsoft.Search.Query&quot; Revision=&quot;1000&quot;&gt;    <br />&lt;Query domain=&quot;QDomain&quot;&gt;     <br />&lt;SupportedFormats&gt;     <br />&lt;Format&gt;urn:Microsoft.Search.Response.Document.Document&lt;/Format&gt;     <br />&lt;/SupportedFormats&gt;     <br />&lt;Context&gt;     <br />&lt;QueryText language=&quot;en-US&quot; type=&quot;MSSQLFT&quot;&gt;SELECT Title, Path, Description, Write, Rank, Size FROM Scope() WHERE CONTAINS(Description, 'SharePoint') AND &quot;Scope&quot; = 'All Sites'&lt;/QueryText&gt;     <br />&lt;/Context&gt;     <br />&lt;Range&gt;&lt;StartAt&gt;1&lt;/StartAt&gt;&lt;Count&gt;20&lt;/Count&gt;&lt;/Range&gt;     <br />&lt;EnableStemming&gt;false&lt;/EnableStemming&gt;     <br />&lt;TrimDuplicates&gt;true&lt;/TrimDuplicates&gt;     <br />&lt;IgnoreAllNoiseQuery&gt;true&lt;/IgnoreAllNoiseQuery&gt;     <br />&lt;ImplicitAndBehavior&gt;true&lt;/ImplicitAndBehavior&gt;     <br />&lt;IncludeRelevanceResults&gt;true&lt;/IncludeRelevanceResults&gt;     <br />&lt;IncludeSpecialTermResults&gt;true&lt;/IncludeSpecialTermResults&gt;     <br />&lt;IncludeHighConfidenceResults&gt;true&lt;/IncludeHighConfidenceResults&gt;     <br />&lt;/Query&gt;     <br />&lt;/QueryPacket&gt;     <br /></p>  <p>&#160;</p>  <p>But there is a trick to use it in SharePoint Designer: you have to encode XML special character, and put the whole query in 1 line. So it results in the following:</p>  <p>&amp;lt;QueryPacket xmlns=&amp;quot;urn:Microsoft.Search.Query&amp;quot; Revision=&amp;quot;1000&amp;quot;&amp;gt; &amp;lt;Query domain=&amp;quot;QDomain&amp;quot;&amp;gt; &amp;lt;SupportedFormats&amp;gt; &amp;lt;Format&amp;gt;urn:Microsoft.Search.Response.Document.Document&amp;lt;/Format&amp;gt; &amp;lt;/SupportedFormats&amp;gt; &amp;lt;Context&amp;gt; &amp;lt;QueryText language=&amp;quot;en-US&amp;quot; type=&amp;quot;MSSQLFT&amp;quot;&amp;gt;SELECT Title, Path, Description, Write, Rank, Size FROM Scope() WHERE CONTAINS(Description, 'SharePoint') AND &amp;quot;Scope&amp;quot; = 'All Sites'&amp;lt;/QueryText&amp;gt; &amp;lt;/Context&amp;gt; &amp;lt;Range&amp;gt;&amp;lt;StartAt&amp;gt;1&amp;lt;/StartAt&amp;gt;&amp;lt;Count&amp;gt;20&amp;lt;/Count&amp;gt;&amp;lt;/Range&amp;gt; &amp;lt;EnableStemming&amp;gt;false&amp;lt;/EnableStemming&amp;gt; &amp;lt;TrimDuplicates&amp;gt;true&amp;lt;/TrimDuplicates&amp;gt; &amp;lt;IgnoreAllNoiseQuery&amp;gt;true&amp;lt;/IgnoreAllNoiseQuery&amp;gt; &amp;lt;ImplicitAndBehavior&amp;gt;true&amp;lt;/ImplicitAndBehavior&amp;gt; &amp;lt;IncludeRelevanceResults&amp;gt;true&amp;lt;/IncludeRelevanceResults&amp;gt; &amp;lt;IncludeSpecialTermResults&amp;gt;true&amp;lt;/IncludeSpecialTermResults&amp;gt; &amp;lt;IncludeHighConfidenceResults&amp;gt;true&amp;lt;/IncludeHighConfidenceResults&amp;gt; &amp;lt;/Query&amp;gt; &amp;lt;/QueryPacket&amp;gt; </p>  <p>that you can type in the queryXml value:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/14/51/metablogapi/1614.Edit-Datasource_205AB655.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-14-51-metablogapi/1614.Edit_2D00_Datasource_5F00_205AB655.jpg"><img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Edit Datasource" border="0" alt="Edit Datasource" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/14/51/metablogapi/6087.Edit-Datasource_thumb_70BC97C8.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-14-51-metablogapi/6087.Edit_2D00_Datasource_5F00_thumb_5F00_70BC97C8.jpg" width="482" height="575" /></a></p>  <p>&#160;</p>  <p>A list of special characters and their encoded value can be found in this article: <a title="https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references" href="https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references">https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references</a>.     <br /><a title="Notepad++" href="https://notepad-plus-plus.org/" target="_blank">Notepad++</a> is a good tool to encode string quickly: select the string &gt; TextFX &gt; TextFX Convert &gt; Encore HTML (&amp;&lt;&gt;”).</p>  <p>Finally, you can use the data source in a page through a DataView control. If connection to web service was successful</p>  <ul>   <li>you’ll see the DataSource properties in the properties tab </li>    <li>With Fiddler, while you add the DataView control, a bunch of calls to /_vti_bin/webpartpages.asmx, all resulting in a HTTP 200 (perhaps HTTP 401 before – expected) responses. </li> </ul>  <p>If you get an HTTP 500 response instead, the queryXml value is likely not set correctly.</p>]]></content:encoded>
    </item>
    <item>
      <title>You get a System.Security.SecurityException when you try to start the User Profile Synchronization Service</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/you-get-a-system-security-securityexception-when-you-try-to-start-the-user-profile-synchronization-service</link>
      <pubDate>Tue, 29 Jun 2010 08:35:57 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2010/06/29/you-get-a-system-security-securityexception-when-you-try-to-start-the-user-profile-synchronization-service/</guid>
      <description><![CDATA[Symptom  Under certain condition, you may see this error message when you try to start the FIM...]]></description>
      <content:encoded><![CDATA[<h2>Symptom</h2>  <p>Under certain condition, you may see this error message when you try to start the FIM Synchronization Service:</p>  <p>UserProfileApplication.SynchronizeMIIS: Failed to configure ILM, will attempt during next rerun. Exception: System.Security.SecurityException: There are currently no logon servers available to service the logon request. at System.Security.Principal.WindowsIdentity.KerbS4ULogon(String upn) at    <br />System.Security.Principal.WindowsIdentity..ctor(String sUserPrincipalName, String type) at System.Security.Principal.WindowsIdentity..ctor(String sUserPrincipalName) at Microsoft.IdentityManagement.SetupUtils.IlmWSSetup.GetDomainAccountSIDHexString(String domainName, String accountName) at     <br />Microsoft.IdentityManagement.SetupUtils.IlmWSSetup.GrantSQLRightsToServiceAccount() at Microsoft.IdentityManagement.SetupUtils.IlmWSSetup.IlmBuildDatabase() at Microsoft.Office.Server.UserProfiles.Synchronization.ILMPostSetupConfiguration.ConfigureIlmWebService(Boolean existingDatabase) at     <br />Microsoft.Office.Server.Administration.UserProfileApplication.SetupSynchronizationService(ProfileSynchronizationServiceInstance profileSyncInstance) The Zone of the assembly that failed was: MyComputer.</p>  <p>&#160;</p>  <h2>Cause</h2>  <p>The reason is related to Kerberos and is a little bit difficult to explain (as always with Kerberos !). I try to make the most simple possible:</p>  <p>OWSTIMER process tries to get a service ticket for itself (a TGS with Sname/SPN = the OWSTIMER account) that contains information about itself (this is called S4U2Self). </p>  <p>However, a security feature introduced in Windows Server 2003 prevents the KDC to distribute a TGS for an account that does not have a SPN defined, as explained in this technet article (<a title="https://technet.microsoft.com/fr-fr/library/cc772815(WS.10).aspx" href="https://technet.microsoft.com/fr-fr/library/cc772815(WS.10).aspx">https://technet.microsoft.com/fr-fr/library/cc772815(WS.10).aspx</a>):</p>  <p>“Additionally, in Windows Server 2003, KDCs will not issue a service ticket for an account that does not have an SPN. If a service account were simply a user account with a human-generated password, then that account would be more vulnerable to an offline dictionary attack. For an account without an SPN, the KDC will return KDC_ERR_S_PRINCIPAL_UNKNOWN. However, the context of the error will be KRB_ERR_MUST_USE_USER2USER, which has the description of &quot;Server principal valid for user-to-user only.&quot;&quot;”</p>  <p>&#160;</p>  <h2>Resolution</h2>  <p>It is very easy to fix, all you need is to add a fake SPN, whatever it is, to the OWSTimer account, so that KDC will allow to distribute a ticket for that account. For example:</p>  <p>setspn –a NONE/NONE OWSTimerAccount</p>  <p>Then you can successfully start your service !</p>]]></content:encoded>
    </item>
    <item>
      <title>How to bypass MySite redirection introduced with the SP2 when you display user details?</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/how-to-bypass-mysite-redirection-introduced-with-the-sp2-when-you-display-user-details</link>
      <pubDate>Mon, 08 Feb 2010 04:33:49 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2010/02/08/how-to-bypass-mysite-redirection-introduced-with-the-sp2-when-you-display-user-details/</guid>
      <description><![CDATA[SharePoint SP2 has introduced the systematic redirection to the MySite when you display the details...]]></description>
      <content:encoded><![CDATA[<p>SharePoint SP2 has introduced the systematic redirection to the MySite when you display the details of a user.</p>  <p>In most scenarios this does not have any impact, but some companies don’t use the MySite and in such a case redirection needs to be deactivated.</p>  <p>Fortunately, it’s very easy to deactivate the redirection by writing a feature that will prevent controls which redirect to be rendered. This can be done using Delegate Controls, which are described in this <a href="https://msdn.microsoft.com/en-us/library/ms463169.aspx" target="_blank">article</a>.</p>  <p>&#160;</p>  <p>feature.xml : </p>  <p>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;    <br />&lt;Feature     <br />&#160; Id=&quot;6630E84A-F21D-4c9d-BA71-CDB7785E0787&quot;     <br />&#160; Title=&quot;Yvand.BypassMysite&quot;     <br />&#160; Description=&quot;Display user details in userdisp.aspx page within the site collection, as per pre-SP2 behavior.&quot;     <br />&#160; Creator=&quot;Yvan Duhamel&quot;     <br />&#160; Version=&quot;1.0.0.0&quot;     <br />&#160; Scope=&quot;Farm&quot;     <br />&#160; Hidden=&quot;FALSE&quot;     <br />&#160; xmlns=&quot;<a href="https://schemas.microsoft.com/sharepoint/&quot;">https://schemas.microsoft.com/sharepoint/&quot;</a>&gt;     <br />&#160; &lt;ElementManifests&gt;     <br />&#160;&#160;&#160; &lt;ElementManifest Location=&quot;MySiteFeatureElements.xml&quot; /&gt;     <br />&#160; &lt;/ElementManifests&gt;     <br />&lt;/Feature&gt; </p>  <p>&#160;</p>  <p>MySiteFeatureElements.xml : </p>  <p>&lt;Elements xmlns=&quot;<a href="https://schemas.microsoft.com/sharepoint/&quot;">https://schemas.microsoft.com/sharepoint/&quot;</a>&gt;     <br />&#160;&#160;&#160; &lt;Control Id=&quot;GlobalSiteLink1&quot; Sequence=&quot;50&quot; ControlSrc=&quot;&quot; /&gt;     <br />&#160;&#160;&#160; &lt;Control Id=&quot;GlobalSiteLink2&quot; Sequence=&quot;50&quot; ControlSrc=&quot;&quot;/&gt;     <br />&#160;&#160;&#160; &lt;Control Id=&quot;ProfileRedirection&quot; Sequence=&quot;50&quot; ControlSrc=&quot;&quot;/&gt;     <br />&lt;/Elements&gt; </p>  <p>&#160;</p>  <p>Once the feature is installed, it can be activated at farm level (Central Administration &gt; Operations &gt; Manage Farm Features) to immediately deactivate the redirection to MySite.</p>]]></content:encoded>
    </item>
    <item>
      <title>Workflow locks because of OnWorkflowItemChanged event handler</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/workflow-locks-because-of-onworkflowitemchanged-event-handler</link>
      <pubDate>Wed, 25 Nov 2009 07:41:55 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2009/11/25/workflow-locks-because-of-onworkflowitemchanged-event-handler/</guid>
      <description><![CDATA[Version française.  SharePoint workflow functionality comes with a set of specific activities and...]]></description>
      <content:encoded><![CDATA[<p><a href="https://blogs.technet.com/french_sharepoint_support_blog/archive/2009/12/07/le-workflow-se-bloque-lorsque-l-v-nement-onworkflowitemchanged-est-pr-sent-dans-le-design.aspx" target="_blank">Version française</a>.</p>  <p>SharePoint workflow functionality comes with a set of specific activities and events to leverage SharePoint specific actions. </p>  <p>One of them is OnWorkflowItemChanged, designed to fire when item which started the workflow was modified.</p>  <p>&#160;</p>  <h2>The Problem</h2>  <p>However, this event causes an unexpected behavior that locks the workflow instance in the content database for a while when item is modified.</p>  <p>Let’s check the following simple workflow:</p>  <table border="0" cellspacing="0" cellpadding="2" width="519"><tbody>     <tr>       <td valign="top" width="517"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/yvan_duhamel/WindowsLiveWriter/WorkflowgetstuckwhenyouaddanOnWorkflowIt_F2C3/WorkflowKO.jpg" original-url="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/WorkflowgetstuckwhenyouaddanOnWorkflowIt_F2C3/WorkflowKO.jpg"><img style="border-right-width: 0px; margin: 0px auto; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="" border="0" alt="" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/yvan_duhamel/WindowsLiveWriter/WorkflowgetstuckwhenyouaddanOnWorkflowIt_F2C3/WorkflowKO_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/WorkflowgetstuckwhenyouaddanOnWorkflowIt_F2C3/WorkflowKO_thumb.jpg" width="366" height="616" /></a> </td>     </tr>   </tbody></table>  <p>Basically, it creates a task, wait for the task to be modified and then simply terminates. </p>  <p>Notice the OnWorkflowItemChanged event handler is in a branch that is always false (condition is ‘1 == 2’), so <strong>it should never be processed</strong>.</p>  <p>Now imagine this scenario :</p>  <p>1) you create a new item so that your workflow instance starts</p>  <p>2) After workflow instance has started, you edit the item.</p>  <p>3) You edit the task</p>  <p>This action should wake up the workflow that would delete the task and terminate.</p>  <p>However, because of OnWorkflowItemChanged event, the workflow will be locked at step 2 (as soon as you edit the item). So you must wait for a while (impossible to reduce) before it can be waked up by OWSTIMER and resumes.</p>  <p>A side effect you may notice is this error message you will get if you try to edit the task:    <br />“This task is currently locked by a running workflow and cannot be edited.”</p>  <p>&#160;</p>  <h2>How to fix it</h2>  <p>1) If you wait long enough, workflow should always resume in the OWSTimer. </p>  <p>2) You can modify a little bit the design of the workflow to workaround this problem:</p>  <p>Take a look at the same workflow with a few modifications (I removed the if condition because it was only to illustrate the problem):</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/yvan_duhamel/WindowsLiveWriter/WorkflowgetstuckwhenyouaddanOnWorkflowIt_F2C3/Workflow%20OK_6.jpg" original-url="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/WorkflowgetstuckwhenyouaddanOnWorkflowIt_F2C3/Workflow%20OK_6.jpg"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Workflow OK" border="0" alt="Workflow OK" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/yvan_duhamel/WindowsLiveWriter/WorkflowgetstuckwhenyouaddanOnWorkflowIt_F2C3/Workflow%20OK_thumb_2.jpg" original-url="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/WorkflowgetstuckwhenyouaddanOnWorkflowIt_F2C3/Workflow%20OK_thumb_2.jpg" width="486" height="584" /></a> </p>  <p>Here are the modifications to make it working:</p>  <ol>   <li>Add a SequenceActivity and move OnWorkflowItemChanged event inside. </li>    <li>Add an InitializeWorkflow Activity inside the SequenceActivity </li>    <li>Create a new correlation token in the InitializeWorkflow and set the OwnerActivityName to the SequenceActivity </li>    <li>Use this new token in the OnWorkflowItemChanged </li> </ol>  <p>These few modifications make your workflow running fine, and it is not locked anymore.</p>  <p>Yvan Duhamel, Support Escalation Engineer</p>]]></content:encoded>
    </item>
    <item>
      <title>How to easily justify the text in SharePoint 2007 RichHtmlField control and content editor webpart?</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/how-to-easily-justify-the-text-in-sharepoint-2007-richhtmlfield-control-and-content-editor-webpart</link>
      <pubDate>Mon, 23 Nov 2009 04:18:00 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2009/11/23/how-to-easily-justify-the-text-in-sharepoint-2007-richhtmlfield-control-and-content-editor-webpart/</guid>
      <description><![CDATA[Version française.  Both RichHtmlField control and content editor webpart allow you to write content...]]></description>
      <content:encoded><![CDATA[<p><a href="https://blogs.technet.com/french_sharepoint_support_blog/archive/2009/11/23/comment-facilement-justifier-le-texte-dans-l-diteur-html-de-sharepoint-2007.aspx" target="_blank">Version française</a>.</p>  <p>Both RichHtmlField control and content editor webpart allow you to write content in SharePoint 2007 more or less with the same experience than you would have with Word.</p>  <p>One good feature is the ability for administrators to create predefined styles that contributors can directly select and apply to their content: </p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style_4.jpg" original-url="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style_4.jpg" mce_href="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style_4.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Editor style" border="0" alt="Editor style" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style_thumb_1.jpg" original-url="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style_thumb_1.jpg" width="527" height="143" mce_src="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style_thumb_1.jpg" /></a> </p>  <p>These styles are easy to create and you can find a step by step <a href="https://office.microsoft.com/en-us/sharepointdesigner/HA101741401033.aspx" target="_blank" mce_href="https://office.microsoft.com/en-us/sharepointdesigner/HA101741401033.aspx">here</a>.</p>  <p>However, when contributors apply a style to their paragraph, it automatically creates a new “&lt;span&gt;” tag, and applies the style to the “&lt;span&gt;”. This causes several issues:</p>  <ul>   <li>Each time you apply a style, it creates a new “&lt;span&gt;” even if it is already in a “&lt;span&gt;”, so you may end up with dozen of “&lt;span&gt;” that inherit from each other </li>    <li>It makes difficult to play with advanced CSS styling, because you cannot predict how many child “&lt;span&gt;” you will get in your HTML code. </li>    <li>Some formatting options are not easy to apply to “&lt;span&gt;”, because it is an inline element, contrary to the “&lt;p&gt;” tag that is a block element. </li> </ul>  <p>Fortunately, the behavior of “&lt;span&gt;” tags can be modified to act as “&lt;p&gt;” tags, so that it renders as a block and makes possible for administrators to justify text in CSS styles. Below is a style that will allow a “&lt;span&gt;” to justify the text it contains:</p>  <p>.ms-rteCustom-YvandJustifiedText    <br />{     <br />&#160;&#160;&#160; text-align:justify;     <br />&#160;&#160;&#160; display:block;     <br />&#160;&#160;&#160; color: purple;     <br />}</p>  <p>However you should be aware that if you apply this style to a part of the paragraph, this part will behave as a new independent paragraph. In the&#160; sample below, the style was applied only to the text in purple, although the whole text is a single paragraph:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style%202_2.jpg" original-url="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style%202_2.jpg" mce_href="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style%202_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Editor style 2" border="0" alt="Editor style 2" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style%202_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style%202_thumb.jpg" width="528" height="181" mce_src="https://blogs.msdn.com/blogfiles/yvan_duhamel/WindowsLiveWriter/HowtoeasilyjustifythetextinSharePointRic_982C/Editor%20style%202_thumb.jpg" /></a> </p>  <p>In SharePoint 2010, this behavior was modified and “&lt;span&gt;” tags are no longer created when contributors apply a style to a whole paragraph. Styles apply directly to “&lt;p&gt;” tags instead, which makes by far easier to manage and generates better HML code.</p>  <p>Of course, a “&lt;span&gt;” will still be created if style is applied to a part of a paragraph.</p>  <p>Yvan Duhamel, Support Escalation Engineer.</p>]]></content:encoded>
    </item>
    <item>
      <title>Cannot get latest SPListItem attributes such as ForwardLinks in a page that was propagated using variations</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/cannot-get-latest-splistitem-attributes-such-as-forwardlinks-in-a-page-that-was-propagated-using-variations</link>
      <pubDate>Wed, 27 May 2009 11:56:00 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2009/05/27/cannot-get-latest-splistitem-attributes-such-as-forwardlinks-in-a-page-that-was-propagated-using-variations/</guid>
      <description><![CDATA[Consider the following scenario: 
As a site collection administrator, you use object model to get...]]></description>
      <content:encoded><![CDATA[<P>Consider the following scenario: </P>
<P>As a site collection administrator, you use object model to get SPListItem.ForwardLinks in a page that has been propagated in a target site with variations sytem. The page version is at least 1.1. </P>
<P>As a result, you are not able to retrieve SPListItem.ForwardLinks attribute from the current minor version, it returns properties from the last published version (in this scenario 1.0) </P>
<P>Although you are a site collection administrator, you cannot get SPListItem.ForwardLinks properties from the current minor version. This is probably the same behavior with others attributes such as BackwardLinks, but this works fine with title attribute (and probably many others). </P>
<P>To workaround this, you must run your code with elevated privileges to use application pool account. You can find a sample below: </P>
<P mce_keep="true">&nbsp;</P>
<P>void CheckSPListItemPropertiesAsApppoolAccount(string weburl, string listname)<BR>{<BR>&nbsp;&nbsp;&nbsp; Result.Text = "";<BR>&nbsp;&nbsp;&nbsp; Result.Text += "&lt;br/&gt;Running as application pool account"; 
<P>&nbsp;&nbsp;&nbsp; SPSecurity.RunWithElevatedPrivileges(delegate()<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using (SPSite site = new SPSite(weburl))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using (SPWeb web = site.OpenWeb())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SPList list = web.Lists[listname];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Text += "&lt;br/&gt;&lt;br/&gt;Number of items: " + list.ItemCount.ToString(); 
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (SPListItem item in list.Items)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Text += "&lt;br/&gt;&lt;br/&gt;Item: " + item.Title;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (SPLink link in item.ForwardLinks)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Text += "&lt;br/&gt;URL: " + link.Url;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Text += "&lt;br/&gt;" + e.Message;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result.Text += "&lt;br/&gt;" + e.StackTrace;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; });<BR>} </P>]]></content:encoded>
    </item>
    <item>
      <title>AJAX Postbacks not working with any masterpage other than default.master</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/ajax-postbacks-not-working-with-any-masterpage-other-than-default-master</link>
      <pubDate>Tue, 19 May 2009 11:43:00 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2009/05/19/ajax-postbacks-not-working-with-any-masterpage-other-than-default-master/</guid>
      <description><![CDATA[Consider the following scenario: 
You develop a webpart using AJAX that works fine with SharePoint...]]></description>
      <content:encoded><![CDATA[<P>Consider the following scenario: </P>
<P>You develop a webpart using AJAX that works fine with SharePoint default masterpage (default.master), but as soon as you use a different masterpage, for example blueband.master, asynchronous postbacks do not work anymore. </P>
<P>The reason is because in those masterpages, SPWebPartManager server tag is outside of &lt;form&gt;&lt;/form&gt; tags. To workaround this, you can change the location of the ScriptManager tag and put it inside the &lt;form&gt; tag: </P><PRE><CODE>&lt;form runat="server" onsubmit="return _spFormOnSubmitWrapper();"&gt;<BR></CODE><CODE>&lt;asp:ScriptManager runat="server" ID="ScriptManager1"&gt;&lt;/asp:ScriptManager&gt;<BR></CODE><CODE>&lt;WebPartPages:SPWebPartManager runat="server"/&gt;
</CODE></PRE>
<P>Important: if you modify a masterpage provided with SharePoint, such as the blueband.master, you must create a copy of it, modify the copy and update the site to use the new one, don't forget this is not supported to modify SharePoint default files (except a very few ones). </P>
<P>Unfortunately this modification has a major drawback, the page title is broken (it is replaced with "\r\n\t") after the first AJAX postback. Fortunately, it can be fixed very easily with the following piece of code that you can add in your webpart: </P>
<DIV style="FONT-FAMILY: Courier New; BACKGROUND: #bfbfbf; COLOR: black; FONT-SIZE: 10pt">
<P style="MARGIN: 0px"><SPAN style="COLOR: blue">protected</SPAN> <SPAN style="COLOR: blue">override</SPAN> <SPAN style="COLOR: blue">void</SPAN> OnLoad(<SPAN style="COLOR: #2b91af">EventArgs</SPAN> e)</P>
<P style="MARGIN: 0px">{</P>
<P style="MARGIN: 0px">&nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">if</SPAN> (<SPAN style="COLOR: blue">this</SPAN>.Page.IsPostBack)</P>
<P style="MARGIN: 0px">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <SPAN style="COLOR: blue">this</SPAN>.Page.Title = <SPAN style="COLOR: #2b91af">String</SPAN>.Empty;</P>
<P style="MARGIN: 0px">}</P></DIV>
<P>It seems SharePoint checks the page title, and set it when it is empty. <SPAN style="FONT-FAMILY: Times New Roman; FONT-SIZE: 12pt"></SPAN></P>
<P>If your postbacks are even not working with default masterpage, this article probably does not apply to you, take a look at this kb: <A href="https://support.microsoft.com/kb/941955" mce_href="https://support.microsoft.com/kb/941955">https://support.microsoft.com/kb/941955</A>. </P>
<P>You can find general information on AJAX integration with SharePoint and practical example on this page: <A href="https://msdn.microsoft.com/en-us/library/bb861881.aspx" mce_href="https://msdn.microsoft.com/en-us/library/bb861881.aspx">https://msdn.microsoft.com/en-us/library/bb861881.aspx</A>. </P>]]></content:encoded>
    </item>
    <item>
      <title>Unable to activate a form template even as a site collection administrator</title>
      <link>https://docs.microsoft.com/archive/blogs/yvan_duhamel/unable-to-activate-a-form-template-even-as-a-site-collection-administrator</link>
      <pubDate>Tue, 19 May 2009 08:57:00 GMT</pubDate>
      <dc:creator><![CDATA[Yvan Duhamel]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yvan_duhamel/2009/05/19/unable-to-activate-a-form-template-even-as-a-site-collection-administrator/</guid>
      <description><![CDATA[Administrator approved InfoPath forms templates are managed in central administration website and...]]></description>
      <content:encoded><![CDATA[<P>Administrator approved InfoPath forms templates are managed in central administration website and can be activated on each site collections. </P>
<P>To do this, SharePoint requires that administrator has full permissions on the site collection. This is often the case when we are site collection administrators, but some permission can be removed at web application level, which prevents anyone to activate forms templates (including the setup account) </P>
<P>To solve this, go to Central Administration &gt; Application Management &gt; User Permissions for Web Application, select the web application on which you try to activate your form template and check ALL the boxes. </P>
<P>After validating, you should be able to successfully activate your form template on your site collection. </P>]]></content:encoded>
    </item>
  </channel>
</rss>