<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Communardo Techblog &#187; Workaround</title>
	<atom:link href="http://www.communardo.de/home/techblog/tag/workaround/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.communardo.de/home/techblog</link>
	<description></description>
	<lastBuildDate>Fri, 30 Jul 2010 12:18:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Visual Studio is waiting for an operation oder &quot;Warum Copy &amp; Paste schlecht ist&quot;</title>
		<link>http://www.communardo.de/home/techblog/2010/02/24/visual-studio-is-waiting-for-an-operation-oder-warum-copy-paste-schlecht-ist/</link>
		<comments>http://www.communardo.de/home/techblog/2010/02/24/visual-studio-is-waiting-for-an-operation-oder-warum-copy-paste-schlecht-ist/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 15:43:34 +0000</pubDate>
		<dc:creator>Torsten Hufsky</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft Sharepoint]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[continue waiting]]></category>
		<category><![CDATA[Copy]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[Paste switch to]]></category>
		<category><![CDATA[RDPclip.exe]]></category>
		<category><![CDATA[Visual-Studio]]></category>
		<category><![CDATA[waiting for operation]]></category>
		<category><![CDATA[Workaround]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=3251</guid>
		<description><![CDATA[<img alt="thu" src="http://www.gravatar.com/avatar.php/8743398aa3c764388e375dd2cab2b092/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/thu/" title="Artikel von Torsten Hufsky">Torsten Hufsky</a><p>Dem Einen oder Anderen hat Visual Studio wahrscheinlich schon einmal mit dieser leicht dominierenden Bildschirmausgabe &#252;berrascht. Wahrscheinlich aber haben es die Meisten noch nie zu Gesicht bekommen, denn wir sind ja keine Copy &amp; Paste Entwickler. <img src='http://www.communardo.de/home/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Das ist der besagte Hinweis:</p>
<div id="attachment_3249" class="wp-caption aligncenter" style="width: 375px"><a href="http://www.communardo.de/home/techblog/files/2010/02/rdclip.jpg"><img class="size-full wp-image-3249" src="http://www.communardo.de/home/techblog/files/2010/02/rdclip.jpg" alt="Here you can see the error message thrown by visual studio" width="365" height="275" /></a><p class="wp-caption-text">RDClip</p></div>
<p><strong>Randbedingungen:</strong><br />
Ich verwende eine virtuelle Maschine(Windows Server 2003) unter Microsoft Virtual Server 2005 R2.</p>
<p>Das Problem tritt gelegentlich auf, wenn innerhalb der Host Maschine etwas kopiert wird und anschlie&#223;end versucht wird, das soeben kopierte, in Visual Studio, auf der Entwicklungsmaschine, einzuf&#252;gen.</p>
<p><strong>L&#246;sung:</strong></p>
<p>Wie kann dieses Problem nun gel&#246;st werden? Anfangs dachte ich, der &#220;belt&#228;ter w&#228;re Visual Studio, und beendete einfach den devenv.exe Prozess. Irgendwann irritierte es mich aber, dass sobald diese Meldung auftauchte &#252;berhaupt kein Copy &amp; Paste mehr funktionierte. Zu diesem Zeitpunkt fand ich heraus, dass der eigentliche, anfangs nicht verd&#228;chtige, Prozess rdpclip.exe der Schuldige war.</p>
<p>Um also in Visual Studio weiter arbeiten zu k&#246;nnen, muss einfach der Prozess rdclip.exe beendet werden. Dies kann leicht &#252;ber den  Task Manager vollf&#252;hrt werden.</p>
<p><a href="http://www.communardo.de/home/techblog/files/2010/02/task.png"><img class="aligncenter size-full wp-image-3254" src="http://www.communardo.de/home/techblog/files/2010/02/task.png" alt="" width="399" height="403" /></a></p>
<p>Falls anschlie&#223;end wieder Copy &amp; Paste verwendet werden soll, nicht vergessen den RdpClip.exe Prozess wieder zu starten. Gefunden werden kann dieser im Verzeichnis C:\Windows\System32</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2010/02/24/visual-studio-is-waiting-for-an-operation-oder-warum-copy-paste-schlecht-ist/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sharepoint, ARF &#8211; Men&#252; &amp; Open Link in new window</title>
		<link>http://www.communardo.de/home/techblog/2009/11/08/sharepoint-arf-menue-open-link-in-new-window/</link>
		<comments>http://www.communardo.de/home/techblog/2009/11/08/sharepoint-arf-menue-open-link-in-new-window/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 11:45:08 +0000</pubDate>
		<dc:creator>Torsten Hufsky</dc:creator>
				<category><![CDATA[Microsoft Sharepoint]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Microsoft Office SharePoint Server 2007]]></category>
		<category><![CDATA[target]]></category>
		<category><![CDATA[webpart]]></category>
		<category><![CDATA[Workaround]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=2396</guid>
		<description><![CDATA[<img alt="thu" src="http://www.gravatar.com/avatar.php/8743398aa3c764388e375dd2cab2b092/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/thu/" title="Artikel von Torsten Hufsky">Torsten Hufsky</a><p>Wohl jeder Sharepoint Entwickler welcher sich je mit Barrierefreiheit befasst hat, wird schon einmal von dem Alternative Rendering Framework von <a href="//www.spworks.co.uk/arf" target="_blank">SPWorks</a> geh&#246;rt haben. ARF ist ein Open Source Project, welches von <a href="http://blog.thekid.me.uk" target="_blank">Vincent Rothwell</a> entwickelt wurde um Sharepoint etwas barrierefreier zu gestalten. Das Framework beinhaltet mehr als 30 Controls f&#252;r die Entwicklung barrierefeier Publishing Seiten. Alle Controls erzeugen XML welches mit Hilfe von XSLT letztendlich zu HTML Seiten gerendert werden kann.</p>
<p>Eines dieser Controls, welches aktuell bei uns verwendet wird, ist das ARF Navigations Control. Beim Anlegen einer &#220;berschrift mit Link, kann optional ausgew&#228;hlt werden, ob die Seite in einem neuen oder in dem aktuellen Fenster ge&#246;ffnet wird.  Dabei ist mir aufgefallen, dass das ARF Men&#252; diese Checkbox schlechthin ignoriert.</p>
<p><img class="aligncenter size-full wp-image-2397" src="http://www.communardo.de/home/techblog/files/2009/11/opennew.png" alt="Properties" width="576" height="356" /></p>
<p><span id="more-2396"></span>Nach kurzer Forschungsarbeit, haben mein Kollege Vojta und ich den Ursprung des Fehlers gefunden. In der Menu-Klasse innerhalb des Namespaces &#8220;ARF.Web.Controls&#8221; befindet sich die Methode &#8220;WriteNavigationNodes&#8221;, in welcher alle XML Attribute, f&#252;r die sp&#228;tere Ausgabe beschrieben werden. Das Target Attribut der MenuItems war jedoch stets leer, egal  ob die Checkbox aktiviert war oder nicht.</p>
<pre>w.WriteAttributeString("Target", oItem.Target);</pre>
<p>Das Problem war schnell gefunden. Das ARF Men&#252; erbt von der Klasse<em> &#8220;System.Web.Ui.Webcontrols.Menu&#8221;</em>, und nicht von<em> &#8220;Microsoft.SharePoint.WebControls.Menu&#8221;</em><em>. </em>Aus diesem Grund wurde die Target Eigenschaft des MenuItems nie beschrieben. Da die Sharepoint Menu Klasse auch von <em>&#8220;System.Web.Ui.Webcontrols.Menu&#8221;</em> erbt, mussten die Sharepoint Entwickler daf&#252;r sorgen, dass die originalen Sharepoint MenuItems , dass Target Attribut konsumieren k&#246;nnen. Der Zeitpunkt, in dem das Data Binding der Menu Items stattfindet, schien uns als perfekt geeignet daf&#252;r.</p>
<p>Innerhalb des OnMenItemDataBound Events kann &#252;ber die EventArgs, auf die aktuelle SiteMapNode zugegriffen werden. Dabei handelt es sich diesmal jedoch um eine Sharepoint Node. Von dieser kann jetzt direkt auf das Target Attribut ausgelesen werden (dataItem["Target"]).</p>
<pre>protected override void OnMenuItemDataBound(MenuEventArgs e)
        {
            base.OnMenuItemDataBound(e);

            SiteMapNode dataItem = e.Item.DataItem as SiteMapNode;
            if (dataItem != null)
            {
                string str = dataItem["Target"];
                if (!string.IsNullOrEmpty(str))
                {
                    if(e.Item != null)
                    e.Item.Target = str;
                }
            }
        }</pre>
<p>Jetzt ist es m&#246;glich per folgendem Programmcode, das Target Attribut abzurufen. Und diesmal mit Inhalt</p>
<pre>w.WriteAttributeString("Target", oItem.Target);</pre>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2009/11/08/sharepoint-arf-menue-open-link-in-new-window/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>.NET RIA Services mit deutschem Visual Studio 2008 nutzen</title>
		<link>http://www.communardo.de/home/techblog/2009/09/27/net-ria-services-mit-deutschem-visual-studio-2008-nutzen/</link>
		<comments>http://www.communardo.de/home/techblog/2009/09/27/net-ria-services-mit-deutschem-visual-studio-2008-nutzen/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 12:24:33 +0000</pubDate>
		<dc:creator>Torsten Hufsky</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft Sharepoint]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Visual-Studio]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Workaround]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=2086</guid>
		<description><![CDATA[<img alt="thu" src="http://www.gravatar.com/avatar.php/8743398aa3c764388e375dd2cab2b092/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/thu/" title="Artikel von Torsten Hufsky">Torsten Hufsky</a><p>Neugierig geworden von der diesj&#228;hrigen <a title="Basta!" href="http://it-republik.de/konferenzen/basta09/show.php3?id=1" target="_blank"> Basta!</a> und <a title="Oliver Scheers" href="http://the-oliver.com/" target="_blank">Oliver Scheers</a> Vortrag &#252;ber Silverlight und das .NET RIA Framework, wollte ich das Geh&#246;rte heute einmal versuchen in die Praxis umzusetzen.</p>
<p>Das .NET Rich Internet Application (RIA) Framework unterst&#252;tzt  den Entwickler bei der Erstellung  n- schichtiger Applikationen. Die .NET RIA Services bilden dabei ein Datenzugriffsmodell welche aus einem Objektmodell (z.B. ADO.NET Entity Framework) einen sogenannten Domain Service zur Verf&#252;gung stellen k&#246;nnen. Die Hauptzielgruppe dieser Technologie sind  .NET Entwickler welche sich vorrangig in Silverlight sowie ASP.NET Anwendungen heimisch f&#252;hlen.</p>
<p>Die erste Version der <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce" target="_blank">.NET RIA Services kann hier heruntergeladen</a> werden. Es sollte beachtet werden, dass es sich dabei um eine fr&#252;he CTP Version handelt.</p>
<p>Nach dem ersten Installationsversuch der .NET RIA Services  erhielt  ich folgende Fehlermeldung.</p>
<blockquote>
<pre>The following required components are missing.
Microsoft Silverlight 3 Developer Runtime
Microsoft Silverlight 3 Beta SDK
Microsoft Silverlight 3 Tools.</pre>
</blockquote>
<p style="text-align: center"><img class="size-full wp-image-2087 aligncenter" src="http://www.communardo.de/home/techblog/files/2009/09/riaerror.png" alt="incompatible versions" width="443" height="216" /></p>
<p>Da ich die komplette Silverlight 3 Runtime inkl. Silverlight Tools bereits installiert hatte, erschien mir die Fehlermeldung etwas irref&#252;hrend.  Nach kurzer Suche fand ich heraus, dass die .NET RIA Services nicht mit einer deutschen Installation von Visual Studio zusammenarbeiten. Aber wie so oft gibt es auch hier einen nicht dokumentierten Weg um an das Ziel zu kommen <img src='http://www.communardo.de/home/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span style="text-decoration: underline">Voraussetzung: </span></p>
<ul>
<li>installiertes Visual Studio 2008 SP1</li>
<li>Silverlight 3 SDK</li>
<li>Silverlight 3 Tools f&#252;r Visual Studio</li>
</ul>
<p><!--[if gte mso 9]&gt;  Normal 0   21   false false false  DE X-NONE X-NONE                           &lt;![endif]--><!--[if gte mso 9]&gt;                                                                                                                                            &lt;![endif]--></p>
<p class="MsoNormal" style="line-height: normal">
<p class="MsoNormal" style="line-height: normal"><span>1. Nachdem die .NET RIA Services heruntergeladen wurden in das Downloadverzeichnis wechseln<br />
2. Folgenden Befehl ausf&#252;hren<strong> msiexec /i RiaServices.msi NOCHECK=true</strong></span></p>
<ul type="disc">
<li class="MsoNormal"><span>Dieser Befehl bewirkt, dass der      Windows Installer aufgerufen wird, ohne jegliche Pr&#252;fung durchzuf&#252;hren</span></li>
</ul>
<p class="MsoNormal" style="line-height: normal"><span>3. Sofern die Installation fehlerfrei abgelaufen ist, folgen nun weitere wichtige Schritte:</span></p>
<ul type="disc">
<li class="MsoNormal"><span>Wechsel in das Verzeichnis<strong> C:\Program Files\Microsoft Visual Studio      9.0\Common7\IDE\ProjectTemplates\CSharp\Silverlight\1033</strong><br />
Darin befinden sich die zwei Zip Dateien<strong> BusinessApplication.zip</strong> und <strong>RIAServicesLibrary.zip.<br />
</strong>Diese beiden Dateien m&#252;ssen nun in das deutsche Verzeichnis kopiert      werden, zum Beispiel f&#252;r eine deutsche Installation<br />
<strong>C:\Program Files\Microsoft Visual Studio      9.0\Common7\IDE\ProjectTemplates\CSharp\Silverlight\1031<br />
</strong>Durch diese Aktion kann nun innerhalb des Neu-&gt;Projekt Dialoges das      RIA Template gew&#228;hlt werden<strong> </strong></span></li>
<li class="MsoNormal"><span>Um die Funktionen rund um die      Domain Service Class und Authentifizierung nutzen zu k&#246;nnen, m&#252;ssen nun      noch die Element Vorlagen kopiert werden. Dazu  in den folgenden      Ordner wechseln <strong>C:\Program Files\Microsoft Visual Studio      9.0\Common7\IDE\ItemTemplates\CSharp\Web\1033 </strong>und folgende Dateien in      das deutsche Verzeichnis kopieren <strong>C:\Program Files\Microsoft Visual      Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\1031<br />
</strong>- AuthenticationDomainService.zip<br />
- BusinessLogic.zip<br />
- SearchSitemap.zip<br />
- AdoNetDataService_DomainServiceCSharpWap.zip</span></li>
</ul>
<p class="MsoNormal" style="line-height: normal"><span>4. Nun die Kommandozeile aufrufen und in folgendes Verzeichnis wechseln <strong>C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE</strong></span></p>
<p class="MsoNormal" style="line-height: normal"><span><strong> </strong><br />
5. Von dort aus folgenden Befehl ausf&#252;hren:<strong> devenv /installvstemplates</strong></span></p>
<ul type="disc">
<li class="MsoNormal"><span>Visual Studio installiert nun      alle neu gefundenen Templates f&#252;r Projekte und Elemente</span></li>
</ul>
<p class="MsoNormal" style="line-height: normal"><span>Sollte die nachstehende Fehlermeldung erscheinen: &#8220;Der angeforderte Vorgang erfordert erh&#246;hte Rechte&#8221;, muss die Kommandozeile als Administrator ausgef&#252;hrt werden.</span></p>
<p>Nach dem Neustart von Visual Studio sollte nun in der Projektvorlagen&#252;bersicht .NET RIA Service Class Library</p>
<p><img class="aligncenter size-full wp-image-2088" src="http://www.communardo.de/home/techblog/files/2009/09/ria1.png" alt="ria1" width="705" height="147" /><br />
und in dem Dialog Hinzuf&#252;gen -&gt; Neues Element die Domain Service Class ausw&#228;hlbar sein.</p>
<p><img class="aligncenter size-full wp-image-2089" src="http://www.communardo.de/home/techblog/files/2009/09/ria2.png" alt="ria2" width="701" height="101" /></p>
<div style="overflow: hidden;width: 1px;height: 1px"><!--[if !mso]&gt; &lt;!  v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} --> <!--[endif]--><!--[if gte mso 9]&gt;  Normal 0 false  21   false false false  DE X-NONE X-NONE                           &lt;![endif]--><!--[if gte mso 9]&gt;                                                                                                                                            &lt;![endif]--><!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:1; 	mso-generic-font-family:roman; 	mso-font-format:other; 	mso-font-pitch:variable; 	mso-font-signature:0 0 0 0 0 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-520092929 1073786111 9 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 70.85pt 2.0cm 70.85pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:150146804; 	mso-list-template-ids:-1006577980;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l1 	{mso-list-id:1232079339; 	mso-list-template-ids:1284397604;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l2 	{mso-list-id:1396009299; 	mso-list-template-ids:-598072016;} @list l2:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l3 	{mso-list-id:1478182484; 	mso-list-template-ids:2090268658;} @list l3:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --><!--[if gte mso 10]&gt; &lt;!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:&quot;Normale Tabelle&quot;; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:&quot;&quot;; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:&quot;Times New Roman&quot;; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} --> <!--[endif]--></p>
<p class="MsoNormal" style="line-height: normal"><span>Neugierig geworden von der diesj&#228;hrigen </span><a title="Basta!" href="http://it-republik.de/konferenzen/basta09/show.php3?id=1" target="_blank"><span> Basta!</span></a><span> und </span><a title="Oliver Scheers" href="http://the-oliver.com/" target="_blank"><span>Oliver Scheers</span></a><span> Vortrag &#252;ber Silverlight und das .NET RIA Framework, wollte ich das Geh&#246;rte heute einmal versuchen in die Praxis umzusetzen.</span></p>
<p class="MsoNormal" style="line-height: normal"><span>Das .NET Rich Internet Application (RIA) Framework unterst&#252;tzt  den Entwickler bei der Erstellung  n- schichtiger Applikationen. Die .NET RIA Services bilden dabei ein Datenzugriffsmodell welche aus einem Objektmodell (z.B. ADO.NET Entity Framework) einen sogenannten Domain Service zur Verf&#252;gung stellen k&#246;nnen. Die Hauptzielgruppe dieser Technologie sind  .NET Entwickler welche sich vorrangig in Silverlight sowie ASP.NET Anwendungen heimisch f&#252;hlen.</span></p>
<p class="MsoNormal" style="line-height: normal"><span>Die erste Version der </span><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce" target="_blank"><span>.NET RIA Services kann hier heruntergeladen</span></a><span> werden. Es sollte beachtet werden, dass es sich dabei um eine fr&#252;he CTP Version handelt.</span></p>
<p class="MsoNormal" style="line-height: normal"><span>Nach dem ersten Installationsversuch der .NET RIA Services erhielt  ich folgende Fehlermeldung.</span></p>
<p class="MsoNormal" style="margin-bottom: 5pt;line-height: normal"><span lang="EN-US">The following required components are missing.<br />
Microsoft Silverlight 3 Developer Runtime<br />
Microsoft Silverlight 3 Beta SDK<br />
Microsoft Silverlight 3 Tools.</span></p>
<p class="MsoNormal" style="text-align: center;line-height: normal" align="center"><span><!--[if gte vml 1]&gt;                    &lt;![endif]--><!--[if !vml]--><img src="/Users/Torsten/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif" border="0" alt="incompatible versions" width="443" height="216" /><!--[endif]--></span><span> </span></p>
<p class="MsoNormal" style="line-height: normal"><span>Da ich die komplette Silverlight 3 Runtime inkl. Silverlight Tools bereits installiert hatte, erschien mir die Fehlermeldung etwas irref&#252;hrend.  Nach kurzer Suche fand ich heraus, dass die .NET RIA Services nicht mit einer deutschen Installation von Visual Studio zusammenarbeiten. Aber wie so oft gibt es auch hier einen nicht dokumentierten Weg um an das Ziel zu kommen <img src='http://www.communardo.de/home/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></p>
<p class="MsoNormal" style="line-height: normal"><span style="text-decoration: underline"><span>Voraussetzung: </span></span><span> </span></p>
<ul type="disc">
<li class="MsoNormal"><span>installiertes Visual Studio      2008 SP1</span></li>
<li class="MsoNormal"><span>Silverlight 3 SDK</span></li>
<li class="MsoNormal"><span>Silverlight 3 Tools f&#252;r Visual      Studio</span></li>
</ul>
<p class="MsoNormal" style="line-height: normal"><span>1. Nachdem die .NET RIA Services heruntergeladen wurden in das Downloadverzeichnis wechseln<br />
2. Folgenden Befehl ausf&#252;hren<strong> msiexec /i RiaServices.msi NOCHECK=true</strong></span></p>
<ul type="disc">
<li class="MsoNormal"><span>Dieser Befehl bewirkt, dass der      Windows Installer aufgerufen wird, ohne jegliche Pr&#252;fung durchzuf&#252;hren</span></li>
</ul>
<p class="MsoNormal" style="line-height: normal"><span>3. Sofern die Installation fehlerfrei abgelaufen ist, folgen nun weitere wichtige Schritte:</span></p>
<ul type="disc">
<li class="MsoNormal"><span>Wechsel in das Verzeichnis<strong> C:\Program Files\Microsoft Visual Studio      9.0\Common7\IDE\ProjectTemplates\CSharp\Silverlight\1033</strong><br />
Darin befinden sich die zwei Zip Dateien<strong> BusinessApplication.zip</strong> und <strong>RIAServicesLibrary.zip.<br />
</strong>Diese beiden Dateien m&#252;ssen nun in das deutsche Verzeichnis kopiert      werden, zum Beispiel f&#252;r eine deutsche Installation<br />
<strong>C:\Program Files\Microsoft Visual Studio      9.0\Common7\IDE\ProjectTemplates\CSharp\Silverlight\1031<br />
</strong>Durch diese Aktion kann nun innerhalb des Neu-&gt;Projekt Dialoges das      RIA Template gew&#228;hlt werden<strong> </strong></span></li>
<li class="MsoNormal"><span>Um die Funktionen rund um die      Domain Service Class und Authentifizierung nutzen zu k&#246;nnen, m&#252;ssen nun      noch die Element Vorlagen kopiert werden. Dazu  in den folgenden      Ordner wechseln <strong>C:\Program Files\Microsoft Visual Studio      9.0\Common7\IDE\ItemTemplates\CSharp\Web\1033 </strong>und folgende Dateien in      das deutsche Verzeichnis kopieren <strong>C:\Program Files\Microsoft Visual      Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Web\1031<br />
</strong>- AuthenticationDomainService.zip<br />
- BusinessLogic.zip<br />
- SearchSitemap.zip<br />
- AdoNetDataService_DomainServiceCSharpWap.zip</span></li>
</ul>
<p class="MsoNormal" style="line-height: normal"><span>4. Nun die Kommandozeile aufrufen und in folgendes Verzeichnis wechseln <strong>C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE</strong><br />
5. Von dort aus folgenden Befehl ausf&#252;hren:<strong> devenv /installvstemplates</strong></span></p>
<ul type="disc">
<li class="MsoNormal"><span>Visual Studio installiert nun      alle neu gefundenen Templates f&#252;r Projekte und Elemente</span></li>
</ul>
<p class="MsoNormal" style="line-height: normal"><span>Sollte die nachstehende Fehlermeldung erscheinen: &#8220;Der angeforderte Vorgang erfordert erh&#246;hte Rechte&#8221;, muss die Kommandozeile als Administrator ausgef&#252;hrt werden.</span></p>
</div>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2009/09/27/net-ria-services-mit-deutschem-visual-studio-2008-nutzen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sharepoint und der eigensinnige XSS &#8211; Filter (Bericht)</title>
		<link>http://www.communardo.de/home/techblog/2009/09/07/sharepoint-und-der-eigensinnige-xss-filter-bericht/</link>
		<comments>http://www.communardo.de/home/techblog/2009/09/07/sharepoint-und-der-eigensinnige-xss-filter-bericht/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 10:58:31 +0000</pubDate>
		<dc:creator>Torsten Hufsky</dc:creator>
				<category><![CDATA[Microsoft Sharepoint]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Bugfix]]></category>
		<category><![CDATA[ItemUpdating]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Office SharePoint Server 2007]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Workaround]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=1883</guid>
		<description><![CDATA[<img alt="thu" src="http://www.gravatar.com/avatar.php/8743398aa3c764388e375dd2cab2b092/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/thu/" title="Artikel von Torsten Hufsky">Torsten Hufsky</a><p>Ein Teil unserer Kernkompetenzen im Umgang mit Sharepoint, ist die Migration von Altsystemen zu Sharepoint. Ein aktuelles Projekt stellte uns vor die Herausforderung, Inhalte, Stylevorgaben und Meta-Daten mittels XML Import aus einem bestehenden Content Management System 1:1 nach SharePoint zu &#252;bernehmen. Besonders problematisch war dabei der Fakt, dass sich innerhalb der Daten Parameter f&#252;r die Businesslogik versteckten. Diese Logik musste in SharePoint zum Teil nachgebaut und beim Import ber&#252;cksichtigt werden.</p>
<p>Eine Teilaufgabe des Imports bestand in der &#220;bernahme der eigentlichen Inhalte der Seiten. Diese lagen als barrierefreies HTML vor und mussten deshalb original so in die SharePoint Seite importiert werden.</p>
<p>Meine Aufgabe bestand nun darin, den originalen HTML Inhalt der zu migrierenden Seite in eine Sharepoint Seite zu importieren. M&#246;glichst sollten die Optik  (Styles, Bilder, etc.) sowie der Inhalt (inkl. Links, Tabellen etc.) unangetastet bleiben.</p>
<p>Sharepoint bietet dem geneigten Entwickler mit seiner API reichlich Werkzeug um diese Aufgabe zu bew&#228;ltigen. So kann eine Seite ohne Probleme mit folgenden Programmcode angelegt werden:</p>
<blockquote>
<pre><span style="color: #ff0000">PublishingWeb currPublishingWeb = PublishingWeb.GetPublishingWeb(webContext);
PublishingPageCollection pages = currPublishingWeb.GetPublishingPages();
PublishingPage currentPage = pages.Add(pageFileName, layout);</span></pre>
</blockquote>
<p>Auf diese Weise ist eine Publishing Page schnell erstellt. Soll diese jetzt auch noch mit Inhalt versehen werden, wird das SPField, das f&#252;r den Inhalt einer PublishingPage zust&#228;ndig ist, ben&#246;tigt.</p>
<p>Das SPField f&#252;r Inhalte ist das <strong>PublishingPageContent </strong>Field<strong>, </strong>das &#252;ber die FieldId Klasse verwendet werden kann.<strong><br />
</strong></p>
<blockquote>
<pre><span style="color: #ff0000">SPListItem newFileItem = newFile.Item;
newFileItem[FieldId.PublishingPageContent] = htmlContent;
newFileItem.Update();</span></pre>
</blockquote>
<p>Bis hier wurde alles ordnungsgem&#228;&#223; von Sharepoint ausgef&#252;hrt. Die Seite wurde angelegt und der Inhalt wurde auch gesetzt. Beim n&#228;heren Betrachten der neu Erstellten Seite wurde ich jedoch misstrauisch:</p>
<ul>
<li>Aus einfachen Links wie zum Beispiel <em>&lt;a href=&#8221;../../beispiel.htm&#8221;&gt;Beispiel&lt;/a&gt;</em> wurde <em>&lt;a&gt;Beispiel&lt;/a&gt;.<br />
</em></li>
<li>Kommentare wie <em>&lt;!&#8211; comment &#8211;&gt; </em>wurden einfach gel&#246;scht</li>
<li>Auch Attributen wie beispielsweise Ids oder Klassen(class)  in Divs wurden gel&#246;scht</li>
<li>Anf&#252;hrungszeichen wurden entfernt &#8211; <em>&lt;div style=&#8221;test&#8221;/&gt;</em> wird zu <em>&lt;div style=test/&gt;</em></li>
</ul>
<p>Durch dieses Verhalten wurden die importierten Seiten &#8220;wertlos&#8221; f&#252;r mich. Alle darauf folgenden Versuche den Inhalt in die Seite zu schreiben schlug fehl. Versucht habe ich folgende Wege:</p>
<ol>
<li>Den Inhalt  zu encodieren und anschlie&#223;end wieder zu dekodieren. Prinzipiell h&#228;tte diese Variante funktioniert, jedoch h&#228;tte ich die Render Methoden des Sharepoint RichtTextEditors &#252;berschreiben m&#252;ssen. Das h&#228;tte wiederum den Nachteil das die Editor Funktion nicht mehr ordnungsgem&#228;&#223; arbeitet. Der ausschlagegebende Faktor diese Variante nicht zu verwenden war jedoch die fehlende M&#246;glichkeit der Indexierung des Inhaltes, da bei dieser Variante der Inhalt in Base 64 &#8211; codierter Form in der Sharepoint Datenbank gespeichert worden w&#228;re und so durch die Suche nicht mehr indexiert werden kann.</li>
<li>In einem zweiten Versuch, lud ich mir den Stream der neu angelegten Seite (auf File &#8211; Ebene) und ersetzte den von Sharepoint besch&#228;digten HTML Inhalt durch den originalen. Leider wurde dieser Inhalt beim Speichern der Datei erneut besch&#228;digt.</li>
<li>Einen dritten Versuch ersparte ich mir, da dieser die Modifizierung der Sharepoint Datenbank vorgesehen h&#228;tte. Ich glaube der Erfolg h&#228;tte sich auch in Grenzen gehalten?!</li>
</ol>
<p>Da ich das Problem gerne ohne &#8220;Dirty Hacks&#8221; l&#246;sen wollte, entschied ich mich eine Supportanfrage bei Microsoft zu stellen. Dazu sei erw&#228;hnt, dass die Anfragen &#252;ber den Microsoft Support sehr schnell und kompetent beantwortet und abgewickelt werden.  Ich sollte meine Antwort von Microsoft bekommen; Leider hie&#223; diese &#8220;By design&#8221; oder kurz auf deutsch: abgewiesen.</p>
<p>Die Begr&#252;ndung: Mirosoft Sharepoint nutzt einen sogenannten XSS (Cross side scripting) Protection Mechanismus. Dieser sollte verhindern das sch&#228;dlicher Inhalte (Code) in Sharepoint eingepflegt werden kann.</p>
<p>Davon betroffen ist allerdings auch das HTML Texteingabe Control. Beispielsweise w&#252;rde dieser Programm &#8211; Code wie folgt abge&#228;ndert:</p>
<blockquote>
<pre><span style="color: #ff0000">original:       Das ist ein gutes &lt;SCRIPT&gt;void:alert("hello world")&lt;/SCRIPT&gt; Script
verf&#228;lscht:     Das ist ein gutes Script</span></pre>
</blockquote>
<p>Auch &#8220;&lt;&#8221; oder &#8220;&gt;&#8221; Zeichen w&#252;rden wie folgt abge&#228;ndert: <span style="color: #ff0000">&amp;gt &#8211; &amp;lt</span>. Ich empfinde dieses Verhalten als vollkommen richtig und auch nachvollziehbar, wenn es dabei bleiben w&#252;rde. Es stellte sich herraus dass dieser XSS Filter auch f&#252;r die K&#252;rzung meiner HTML Inhalte zust&#228;ndig war. Microsoft selbst kann sich nicht erkl&#228;ren warum dieser Filter solch drastische &#196;nderungen am HTML Quellcode vornimmt. Man riet mir von Seiten Microsoft ernsthaft  entweder ein 3rd Party AddOn als Ersatz f&#252;r den RichTextEditor einzusetzen oder aber die Daten nicht innerhalb Sharepoints zu halten, sondern extern. Keiner der beiden angebotetenen L&#246;sungen erschien mir f&#252;r unser Projekt auch nur ansatzweise logisch beziehungsweise umsetzbar.</p>
<h4><span style="color: #000000"><strong>L&#246;sung:</strong></span></h4>
<p>Um die Inhalte dennoch wie gefordert 1:1 importieren zu k&#246;nnen, musste nun ein Workaround gefunden werden. Dazu bot sich eine Codierung der beim Import beanstandeten HTML-Tags an. Nach der erfolgreichen Integration der Methoden in unseren Import k&#246;nnen nun alle Inhalte wie gefordert &#252;bernommen werden.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2009/09/07/sharepoint-und-der-eigensinnige-xss-filter-bericht/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sharepoint 2007: Host-Named SiteCollections und Fehler 401.1</title>
		<link>http://www.communardo.de/home/techblog/2009/07/01/sharepoint-2007-host-named-sitecollections-und-fehler-401-1/</link>
		<comments>http://www.communardo.de/home/techblog/2009/07/01/sharepoint-2007-host-named-sitecollections-und-fehler-401-1/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 16:54:13 +0000</pubDate>
		<dc:creator>Torsten Hufsky</dc:creator>
				<category><![CDATA[Microsoft Sharepoint]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Bugfix]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[moss2007]]></category>
		<category><![CDATA[sharepoint-administration]]></category>
		<category><![CDATA[STSADM]]></category>
		<category><![CDATA[unexpected_error]]></category>
		<category><![CDATA[Workaround]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=1601</guid>
		<description><![CDATA[<img alt="thu" src="http://www.gravatar.com/avatar.php/8743398aa3c764388e375dd2cab2b092/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/thu/" title="Artikel von Torsten Hufsky">Torsten Hufsky</a><p>Heute habe ich versucht<strong><span>,</span></strong> &#252;ber ein Nutzerinterface (GUI) eine Site Collection (Websitesammlung) anzulegen, welche &#252;ber eine eigene Url erreichbar ist (Host <span>N</span>amed <span>S</span>ite <span>C</span>ollection). Wie erwartet ging dies nicht ohne jegliche Komplikationen &#252;ber die B&#252;hne.</p>
<p>Um eine Host <span>N</span>amed <span>S</span>ite <span>C</span>ollection anzulegen<span>,</span> stehen dem Entwickler zwei Varianten zur Verf&#252;gung. Die erste und von mir bevorzugte ist die programmatische<strong><span>:</span></strong></p>
<p><strong>Mit der folgenden Methode<span> </span><span>(z.B. in einer Konsolenanwendung)</span> kann eine Host Named Site Collection angelegt werden<span>:</span> </strong></p>
<blockquote><p><span lang="EN-US">void createHostNamedSC(string siteUrl,string siteName,string siteDescription)<br />
{<br />
SPWebApplication webApp = SPWebApplication.Lookup(new Uri(SPContext.Current.Web.Url));<br />
SPSiteCollection sites = webApp.Sites;<br />
SPSite Site = null;<br />
Site = sites.Add(siteUrl, siteName, siteDescription, 1033, &#8220;STS#0&#8243;, &#8220;Domain\\Administrator&#8221;, &#8220;Owner_Display_Name&#8221;, &#8220;Owner_Email&#8221;, &#8220;Domain\\Administrator&#8221;, &#8220;Secondary_Owner_Display_Name&#8221;, &#8220;Secondary_Owner_Email&#8221;, true);<br />
}</span></p></blockquote>
<p><strong>Die zweite Variante wird &#252;ber stsadm realisiert:</strong><br />
Dazu wird in der Console folgender Aufruf gestartet<strong><span>:</span></strong></p>
<p><strong><span><br />
</span></strong></p>
<blockquote><p><span lang="EN-US">stsadm.exe -o createsite<br />
-url http://hnsc.webapplication.com<br />
-ownerlogin Domain\Administrator<br />
-owneremail Administrator@webapplication.com<br />
-hhurl http://www.webapplication.com</span></p></blockquote>
<p>Die Webapplication stellt dabei der Eintrag hinter -hhurl (http://www.webapplication.com) dar.<br />
Unter -url wird die gew&#252;nschte URL der neuen Site Collection angegeben.<span><br />
</span></p>
<p>Hat man sich f&#252;r eine der beiden Methoden entschieden und <span>diese</span><span> </span>ausgef&#252;hrt, m&#252;ssen noch die Hostheader f&#252;r die Webapplikation angepasst werden. Das Hinzuf&#252;gen der Hostheader kann einerseits &#252;ber die Sharepoint Zentral<strong><span>-</span></strong>Administration erfolgen oder aber &#252;ber den Internet Information Services (IIS) Manager.<br />
Ich habe mich dabei f&#252;r die Einstellung innerhalb des IIS entschieden.</p>
<p>Dazu &#246;ffnet man den IIS Manager und &#246;ffnet &#252;ber das Kontext<strong><span>-</span></strong>Men&#252; die Einstellungen (Properties) der Webapplikation.</p>
<p style="text-align: center"><img class="size-full wp-image-1593 aligncenter" src="http://www.communardo.de/home/techblog/files/2009/07/iis1.jpg" alt="iis1" width="464" height="188" /></p>
<p style="text-align: center">
<p style="text-align: center">
<p style="text-align: center"><img class="size-full wp-image-1594 aligncenter" src="http://www.communardo.de/home/techblog/files/2009/07/iis2.jpg" alt="iis2" width="331" height="195" /></p>
<p style="text-align: center">
<p style="text-align: center">
<p style="text-align: center">
<ul>
<li>Anschlie&#223;end w&#228;hlt man Advanced</li>
<li>Men&#252;punkt Add w&#228;hlen</li>
<li>Als letzter Schritt muss der Port und die Domain      noch eingetragen werden</li>
<li>Alles best&#228;tigen und einen IIS Reset durchf&#252;hren      (ggf. host Datei Domain eintragen)</li>
</ul>
<p>Nach diesen Schritten sollte die eben erstelle Site Collection unter ihrer Domain aufrufbar sein.</p>
<p>Nachdem ich diese Schritte alle erfolgreich ausgef&#252;hrt hatte, versuchte ich mich nun an meiner neuen Host Named Site Collection anzumelden. Obwohl ich augenscheinlich alle Credentials ordnungsgem&#228;&#223; eingegeben hatte, bekam ich folgende Seite zu sehen<strong>:</strong></p>
<p>HTTP 401.1 &#8211; Nicht autorisiert: Fehler bei der Anmeldung</p>
<p style="text-align: center"><img class="size-full wp-image-1595 aligncenter" src="http://www.communardo.de/home/techblog/files/2009/07/iiserror.jpg" alt="iiserror" width="494" height="203" /></p>
<p style="text-align: center">
<p>Nachdem ich schon fast anfangen wollte<strong>,</strong> mir die Haare auszurei&#223;en, fand ich eine Bugbeschreibung von Microsoft unter</p>
<p><a href="http://support.microsoft.com/kb/896861" target="_blank">Fehler 401.1 beim Aufrufen einer Website</a></p>
<p><span style="text-decoration: underline"><strong>Update:<br />
</strong></span><br />
Spencer Harbar wei&#223;t auf seinem <a href="http://www.harbar.net/archive/2009/07/02/disableloopbackcheck-amp-sharepoint-what-every-admin-and-developer-should-know.aspx">Blog</a>, in einen interessanten Artikel,  darauf hin, dass dieser Bugfix nicht auf Produktiv &#8211; Maschinen eingesetzt werden sollte. F&#252;r den externen Zugriff auf die Site Collection tritt dieses Problem in der Regel nicht auf. Deshalb richtet sich dieser Fix nur an Entwickler welche auf der selben Maschine mit mehr als einer Host Named Site Collection arbeiten.</p>
<p>Laut Microsoft tritt dieser Fehler nur auf<strong>,</strong> wenn die Website integrierte Authentifizierung verwendet und ihr Name der lokalen Loopbackadresse zugeordnet ist. Wenn dann noch Windows Server 2003 mit SP1 installiert ist<strong>,</strong> schl&#228;gt der Fehlerteufel zu. Demnach schl&#228;gt die Authentifizierung fehl, wenn der Dom&#228;nenname oder der benutzerdefinierte Hostheader nicht mit dem lokalen Computernamen &#252;bereinstimmen.</p>
<p>Um den Bug zu beheben<strong>,</strong> m&#252;ssen folgende Schritte ausgef&#252;hrt werden.</p>
<ul>
<li>Registry Editor &#246;ffnen mit &#8220;regedit&#8221;</li>
<li>Schl&#252;ssel <strong>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa</strong> suchen</li>
<li>auf LSA mit rechter Maustaste dr&#252;cken      -&gt;Neu-&gt;DWORD</li>
<li>Name <strong>DisableLoopbackCheck </strong>vergeben<strong> </strong>und<strong> Wert 1 </strong>eintragen<strong> </strong></li>
<li>Computer neu starten<strong> </strong></li>
</ul>
<p>Nach dem Neustart war ich in der Lage<strong>,</strong> die Site Collection unter ihrer Domain aufzurufen.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2009/07/01/sharepoint-2007-host-named-sitecollections-und-fehler-401-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sharepoint 2007: Ordner in Listen und Bibliotheken entmystifiziert</title>
		<link>http://www.communardo.de/home/techblog/2009/06/25/sharepoint-2007-ordner-in-listen-und-bibliotheken-entmystifiziert/</link>
		<comments>http://www.communardo.de/home/techblog/2009/06/25/sharepoint-2007-ordner-in-listen-und-bibliotheken-entmystifiziert/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 10:30:38 +0000</pubDate>
		<dc:creator>Torsten Hufsky</dc:creator>
				<category><![CDATA[Microsoft Sharepoint]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[moss2007]]></category>
		<category><![CDATA[Workaround]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=1539</guid>
		<description><![CDATA[<img alt="thu" src="http://www.gravatar.com/avatar.php/8743398aa3c764388e375dd2cab2b092/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/thu/" title="Artikel von Torsten Hufsky">Torsten Hufsky</a><p>Die letzten Tage habe ich damit verbracht, mich mit den Besonderheiten(oder besser absurden Angewohnheiten) von Sharepoint 2007  zu befassen. Speziell mit dem programmatischen Anlegen von Ordnern und Unterordnern in Sharepoint Dokumenten &#8211; Bibliotheken beziehungsweise Listen.</p>
<p>Hier meine gesammelten Erfahrungen &#252;ber das Anlegen von Ordnern in</p>
<ul>
<li><em>Bild- und Dokumentenbibliotheken (Picture- and Documentlibrary)</em></li>
<li><em>Webseiten Bibliotheken (Pages Library)</em></li>
<li><em>Wiederverwendbare Inhalte (Reusable Content)</em><em><em><br />
</em></em></li>
</ul>
<p><span style="text-decoration: underline"><strong>Bild- und Dokumentenbibliotheken (Picture- and Documentlibrary)</strong></span></p>
<p>Angefangen hat das ganze mit dem Versuch, Unterordner in einer Bild- und Dokumentenbibliothek anzulegen. Hier stellte sich Sharepoint gutm&#252;tig. Innerhalb dieser Bibliotheken kann &#252;ber das Men&#252; (Neu /New) ein Ordner angelegt werden, in welchen sp&#228;ter auch Inhalte gespeichert werden k&#246;nnen.<br />
Soll das Anlegen der Ordner programmatisch (zum Beispiel &#252;ber ein Feature) erfolgen,  kann folgender Programmcode verwendet werden.</p>
<blockquote><p><code>String folderList = </code><code>"Bilder";</code><br />
<code> SPList spList = webContext.Lists[</code><code>folderList</code><code>];<br />
String folderUrl = spList.RootFolder.ServerRelativeUrl.ToString();<br />
SPFolderCollection foldersColl = web.GetFolder(folderUrl).SubFolders;<br />
SPFolder newFolder = folders.Add("Unterordner");<br />
spList.Update();</code></p></blockquote>
<p>Bis hierher k&#246;nnte man meinen, Sharepoint bietet dem Entwickler mit seiner API alle M&#246;glichkeiten, Listen zu modifizieren und so zum Beispiel Ordner anzulegen.</p>
<p><span style="text-decoration: underline"><strong>Webseiten Bibliotheken (Pages Library)</strong></span></p>
<p>Ich wurde jedoch eines Besseren belehrt, als ich versuchte, innerhalb der Webseiten Bibliothek (Pages Library) einen Unterordner anzulegen. Anders als in einer Bildbibliothek bietet hier das Men&#252; nicht die M&#246;glichkeit, einen Ordner hinzuzuf&#252;gen.</p>
<p style="text-align: center"><img class="size-full wp-image-1540 aligncenter" src="http://www.communardo.de/home/techblog/files/2009/06/pages.jpg" alt="Pagesfolder" width="115" height="72" /></p>
<p>Da das Men&#252; fehlte, dachte ich mir, versuche ich es doch einfach per Programmcode. Hierzu kann der obige Code verwendet werden, indem einfach der String f&#252;r die Liste auf Pages ge&#228;ndert wird.</p>
<blockquote><p><code>String folderList = </code><code>"Pages";</code></p></blockquote>
<p style="text-align: center"><img class="size-full wp-image-1541 aligncenter" src="http://www.communardo.de/home/techblog/files/2009/06/Pagestest.jpg" alt="Pagestest" width="110" height="44" /></p>
<p>Das Ergebnis sieht wie oben angezeigt aus. Der Unterordner erscheint unterhalb der Webseiten Bibiliothek. Eigentlich das gew&#252;nschte Ergebnis &#8230; aber dieses Ergbnis hat einen Haken. Unterhalb dieses Ordners k&#246;nnen keine Pages angelegt werden und der Unterordner hat auch keinen Men&#252;punkt innerhalb der GUI f&#252;r das Anlegen einer Page.</p>
<p>Nach intensiver Recherche fand ich einen Knowledge Article von Microsoft zu diesem Thema.</p>
<p><a title="New pages that are created in a subfolder of a Pages library of SharePoint Server 2007 are saved in the root of the Pages library" href="http://support.microsoft.com/kb/948614/en-us" target="_blank">http://support.microsoft.com/kb/948614/en-us</a><br />
Daraus geht klar hervor, dass dieses Verhalten von Microsoft nicht unterst&#252;tzt wird. Schade eigentlich.</p>
<p><span style="text-decoration: underline"><strong>Wiederverwendbare Inhalte (Reusable Content)</strong></span></p>
<p>Der letzte Schritt sollte das Anlegen eines Unterordners unterhalb der Wiederverwendbaren Inhalte Bibliothek (Reusable Content) darstellen.  Da das Men&#252; die M&#246;glichkeit bietet, bequem einen Unterordner in dieser Liste zu erstellen, dachte ich, der Programmcode von oben sollte sehr gut daf&#252;r funktionieren &#8230; weit gefehlt. Wieder wurde ich eines Besseren belehrt. Der Code bewirkte in dieser Liste rein gar nix.</p>
<p>Nach einer Phase des Debuggens wurde mir klar, wie Sharepoint hier arbeitet. Anstatt einen SPFolder anzulegen, muss hier ein ein neues SPListItem angelegt werden. Der Trick an der Sache ist, diesem SPListItem den gleichen SPContentType zuzuweisen wie Sharepoint ihn verwendet, um einen Ordner anzulegen.</p>
<p>Wir ben&#246;tigen den ContentType f&#252;r Folder. Wird dieser ContentType einen SPListItem zugewiesen, erscheint dieses danach auch in der Wiederverwendbaren Inhalte Liste als Ordner und besitzt alle n&#246;tigen Men&#252;punkte. Der passende SPContentType kann wie folgt ermittelt werden:</p>
<blockquote><p><code><br />
SPContentTypeId contentId = new SPContentTypeId("0x0120");<br />
SPContentTypeId listCTID = reuseList.ContentTypes.BestMatch(contentId);<br />
SPContentType cType = reuseList.ContentTypes[listCTID];<br />
List contentTypes = new List();<br />
contentTypes.Add(cType);</code></p></blockquote>
<p>Das Ganze habe ich anschlie&#223;end in eine generische Methode verpackt, welche wie folgt aussieht:</p>
<p><img class="size-full wp-image-1547 alignleft" src="http://www.communardo.de/home/techblog/files/2009/06/code.jpg" alt="CodeSnippet" width="862" height="615" /><br />
Diese Methode legt nun ein SPListItem an, welches den Content Type Folder besitzt und auch entsprechend in der Liste angezeigt wird. Da der Ordner im Verzeichnisbaum jedoch nicht derselbe ist wie in der Liste angezeigt, muss  dieser noch umbenannt werden.  Anschlie&#223;end kann dieser Ordner genauso verwendet werden, als ob er &#252;ber das grafische Men&#252; angelegt worden w&#228;re. War doch ganz einfach… &#8211; oder?<br />
Zum besseren Kopieren hier das Ganze nochmal als Text:</p>
<blockquote>
<pre><em>internal static void SubFolder2ReusableList(SPList reuseList, string reusableFolder)
 {
 reuseList.ContentTypesEnabled = true;
 //get the content type for the folder
 SPContentTypeId contentId = new SPContentTypeId("0x0120");
 SPContentTypeId listCTID = reuseList.ContentTypes.BestMatch(contentId);
 SPContentType cType = reuseList.ContentTypes[listCTID];
 List&lt;SPContentType&gt; contentTypes = new List&lt;SPContentType&gt;();
 contentTypes.Add(cType);

 SPListItem newListItem = reuseList.Items.Add();

 newListItem[SPBuiltInFieldId.ContentTypeId] = cType.Id;
 newListItem[SPBuiltInFieldId.Title] = reusableFolder + "_tmp";
 newListItem.Update();
 reuseList.Update();

 //get the parent folder of the SPListItem which is resident in the left tree
 //its not the same folder as listed in die detail list on the right
 using (SPWeb webContext = reuseList.ParentWeb)
 {
 SPFolder reuseFolder = webContext.GetFolder(newListItem.Url);
 try
 {
 //try to rename the folder on the left
 reuseFolder.MoveTo(reuseList.RootFolder.ServerRelativeUrl + "/" + reusableFolder);
 }
 catch (SPException)
 {
 //if the folder already exist delete it
 SPFolder toDeleteFolder = webContext.GetFolder(reuseList.RootFolder.ServerRelativeUrl + "/" + reusableFolder);
 toDeleteFolder.Delete();
 reuseFolder.MoveTo(reuseList.RootFolder.ServerRelativeUrl + "/" + reusableFolder);

 }
 //rename the _tmp SPListitem to his final name
 newListItem[SPBuiltInFieldId.Title] = reusableFolder;
 newListItem.Update();
 }
 }</em></pre>
</blockquote>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2009/06/25/sharepoint-2007-ordner-in-listen-und-bibliotheken-entmystifiziert/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ASP.NET AJAX Control Toolkit anpassen / Bug in Positionierung des ModalPopupExtender</title>
		<link>http://www.communardo.de/home/techblog/2008/11/25/aspnet-ajax-control-toolkit-anpassen-bug-in-positionierung-modalpopupextender/</link>
		<comments>http://www.communardo.de/home/techblog/2008/11/25/aspnet-ajax-control-toolkit-anpassen-bug-in-positionierung-modalpopupextender/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 20:02:42 +0000</pubDate>
		<dc:creator>Christian Heindel</dc:creator>
				<category><![CDATA[Microsoft Sharepoint]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Bugfix]]></category>
		<category><![CDATA[Codeplex]]></category>
		<category><![CDATA[Controls]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Workaround]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=611</guid>
		<description><![CDATA[<img alt="che" src="http://www.gravatar.com/avatar.php/1c60ce69b5a832154bc9f92015a48040/?s=76" class="com-blog-icon"/><a href="http://www.communardo.de/home/techblog/author/che/" title="Artikel von Christian Heindel">Christian Heindel</a><p>M&#246;chte man den ModalPopupExtender aus dem <a href="http://tinyurl.com/566qzf">ASP.NET AJAX Control Toolkit</a> verwenden, dann geht das nur mit dem DOCTYPE &#8220;XHTML 1.0 Transitional&#8221; so richtig reibungslos. Beim <a href="http://tinyurl.com/ytmpaa">CollapsiblePanel</a> gibt es dazu einen Hinweis in der Dokumentation, beim <a href="http://tinyurl.com/3yvhbu">ModalPopup</a> fehlt dieser Hinweis. Das Problem besteht aber auch dort.</p>
<p><strong>Symptome:</strong> Das Popup wird nicht korrekt positioniert, zentriert sich nicht und viel zu lange Scrollbalken entstehen.</p>
<p>Gerade wenn man WebParts f&#252;r SharePoint erstellt, hat man aber nicht immer Einfluss auf den DOCTYPE. Oder wenn man schon Einfluss auf den DOCTYPE hat, kann man ihn nicht immer einfach so &#228;ndern, weil dann evtl. andere Komponenten nicht mehr richtig funktionieren oder nicht mehr richtig dargestellt werden.</p>
<p>Der beschriebene Workaround aus der Dokumentation des AJAX Control Toolkit f&#228;llt damit als L&#246;sung f&#252;r uns aus.</p>
<p>Ein anderer L&#246;sungsweg ist, ein Custom Build des ASP.NET AJAX Control Toolkit zu erstellen und darin das &#8220;fehlerhafte&#8221; St&#252;ck JavaScript zu korrigieren.</p>
<p>Dazu besorgt man sich den <a href="http://www.codeplex.com/AtlasControlToolkit">Quellcode</a> via Codeplex und nimmt die folgenden zwei Modifkationen vor:</p>
<ul>
<li><em>AjaxControlToolkit\Common\Common.js</em> 
<ul>
<li> Darin sucht man nach &#8220;getClientBounds&#8221; und ersetzt das in der Funktion enthaltene SWITCH Statement durch folgendes:
<pre>        switch (Sys.Browser.agent) {
            case Sys.Browser.InternetExplorer:
                if (document.documentElement &amp;&amp; document.documentElement.clientWidth)
                    clientWidth = document.documentElement.clientWidth;
                else if (document.body)
                    clientWidth = document.body.clientWidth;
                //clientWidth = document.documentElement.clientWidth;
                if (document.documentElement &amp;&amp; document.documentElement.clientHeight)
                    clientHeight = document.documentElement.clientHeight;
                else if (document.body)
                    clientHeight = document.body.clientHeight;
                //clientHeight = document.documentElement.clientHeight;
                break;
            case Sys.Browser.Safari:
                clientWidth = window.innerWidth;
                clientHeight = window.innerHeight;
                break;
            case Sys.Browser.Opera:
                clientWidth = Math.min(window.innerWidth, document.body.clientWidth);
                clientHeight = Math.min(window.innerHeight, document.body.clientHeight);
                break;
            default: // Sys.Browser.Firefox, etc.
                clientWidth = Math.min(window.innerWidth, document.documentElement.clientWidth);
                clientHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);
                break;
        }</pre>
<p>Diese Modifikation bringt dem Toolkit bei, H&#246;he und Breite ein bisschen besser auszulesen.  </p>
<p><strong>Achtung:</strong></p>
<p>Hat man bereits an anderen Stellen im eigenen Code Anpassungen aufgrund dieses Problems vorgenommen, indem man z.B. via CSS oder JavaScript nachtr&#228;glich die Position eines <a href="http://tinyurl.com/5zkf8p">AutoComplete</a> Feldes korrigiert, so ist dies jetzt m&#246;glicherweise nicht mehr notwendig und/oder funktioniert nicht mehr richtig. <em>Hier also nochmal kontrollieren!</em></li>
</ul>
</li>
<li> <em>AjaxControlToolkit\ModalPopupExtender\ModalPopupBehavior.js</em> 
<ul>
<li> Dort in der &#8220;initialize&#8221; Funktion folgende Ersetzungen vornehmen: 
<pre>this._backgroundElement.style.position = 'fixed';</pre>
<p> ersetzen zu</p>
<pre>this._backgroundElement.style.position = 'absolute';//'fixed';</pre>
<p>Ein paar Zeilen weiter unten:</p>
<pre>his._foregroundElement.style.position = 'fixed';</pre>
<p>ersetzen zu</p>
<pre>this._foregroundElement.style.position = 'absolute';//'fixed';</pre>
<p>Diese Modifikation beeinflusst andere Controls nicht, und sorgt nur f&#252;r die ordentliche Positionierung des Popups.</li>
</ul>
</li>
</ul>
<p><strong>Au&#223;erdem zu beachten:</strong></p>
<p>Wenn man das Control Toolkit mit dem mitgelieferten Schl&#252;ssel kompiliert, so wir der selbe PublicKeyToken  wie beim Original erzeugt. Daraus entst&#252;nde dann m&#246;glicherweise folgendes Problem:</p>
<p>Verwenden andere Komponenten auf dem Server auch das AJAX Control Toolkit, so bekommen sie die oben vorgenommenen &#196;nderungen durchgereicht, sofern sie nicht explizit gegen eine bestimmte Version kompiliert wurden.</p>
<p>Man sollte also lieber einen neuen PublicKeyToken erzeugen, um m&#246;glichen Kompatibilit&#228;tsproblemen im Voraus zu entgehen.</p>
<p><strong>Quelle:</strong></p>
<p><a href="http://www.rameshbhaskar.com/">Ramesh Bhaskar</a> &#8211; <a href="http://blog.rameshbhaskar.com/2008/03/03/fixing-modalpopupextender-doctype-problems/">Fixing modalpopupextender position problems</a></p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/home/techblog/2008/11/25/aspnet-ajax-control-toolkit-anpassen-bug-in-positionierung-modalpopupextender/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
