<?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"
	>

<channel>
	<title>Communardo Techblog &#187; Microsoft Sharepoint</title>
	<atom:link href="http://www.communardo.de/techblog/category/microsoft-sharepoint/feed" rel="self" type="application/rss+xml" />
	<link>http://www.communardo.de/techblog</link>
	<description>Entwicklerblog der Communardo Software GmbH</description>
	<pubDate>Fri, 21 Nov 2008 19:28:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Postbuild.bat Eintr&#228;ge f&#252;r SharePoint Timer Jobs</title>
		<link>http://www.communardo.de/techblog/2008/11/18/postbuildbat-eintraege-fuer-sharepoint-timer-jobs/</link>
		<comments>http://www.communardo.de/techblog/2008/11/18/postbuildbat-eintraege-fuer-sharepoint-timer-jobs/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 13:34:45 +0000</pubDate>
		<dc:creator>Lars Kreller</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[Timer Job]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/?p=575</guid>
		<description><![CDATA[<p>Da ein Timer Job nicht durch den W3WP.EXE Prozess ausgef&#252;hrt wird ist ein „iisreset“ nicht zweckdienlich. Timer Jobs werden durch den „OWSTIMER.EXE“ Prozess ausgef&#252;hrt. Da es kein „timerreset“ gibt, ist es empfehlenswert folgende Eintr&#228;ge in die Postbuild.bat zu implementieren.</p>
<p>SharePoint Server 2007:<br />
net stop SPTimerV3<br />
net start SPTimerV3</p>
<p>Windows SharePoint Services:<br />
net stop WSSTimerV3<br />
net start WSSTimerV3</p>
<p>Eine weitere Alternative die mittels stsadm.exe Extension arbeitet ist unter folgenden Link zu finden.<br />
<a href="http://www.mindsharpblogs.com/ben/archive/2007/09/25/2965.aspx" target="_new">http://www.mindsharpblogs.com/ben/archive/2007/09/25/2965.aspx</a></p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/11/18/postbuildbat-eintraege-fuer-sharepoint-timer-jobs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sharepoint Bug: Exception bei Setzen der Cancel-Property in ItemAdding in einer benutzerdefinierten Liste</title>
		<link>http://www.communardo.de/techblog/2008/06/19/bug-exception-bei-setzen-der-cancel-property-in-itemadding-oder-itemupdating-in-einer-benutzerdefinierten-liste/</link>
		<comments>http://www.communardo.de/techblog/2008/06/19/bug-exception-bei-setzen-der-cancel-property-in-itemadding-oder-itemupdating-in-einer-benutzerdefinierten-liste/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 11:48:37 +0000</pubDate>
		<dc:creator>Dorrit Riemenschneider</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[DataFormWebPartException]]></category>

		<category><![CDATA[EventReceiver]]></category>

		<category><![CDATA[Exception]]></category>

		<category><![CDATA[Hotfix]]></category>

		<category><![CDATA[ItemAdding]]></category>

		<category><![CDATA[ItemUpdating]]></category>

		<category><![CDATA[Sharepoint]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/06/19/bug-exception-bei-setzen-der-cancel-property-in-itemadding-oder-itemupdating-in-einer-benutzerdefinierten-liste/</guid>
		<description><![CDATA[<p>&#8230; oder der lange Weg zum Gl&#252;ck</p>
<p>Manchmal hat man als Sharepoint-Entwickler das Bed&#252;rfnis, sich in einer benutzerdefinierten Liste  an das Hinzuf&#252;gen oder &#196;ndern eines Items anzuh&#228;ngen und die Aktion abzubrechen und dabei eine nette benutzerdefinierte Fehlermeldung ausgeben. Das sollte eigentlich &#252;berhaupt kein Problem sein, man erstellt einfach einen EventReceiver f&#252;r ItemAdding bzw. ItemUpdating und setzt dort die ErrorMessage sowie die Cancel Property:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/image.png"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/image-thumb.png" border="0" alt="image" width="477" height="83" /></a></p>
<p>Nun erscheint allerdings leider nicht wie erwartet die benutzerdefinierte Fehlermeldung, sondern stattdessen eine b&#246;se Exception (DataFormWebPartException &#8220;The data source control failed to execute the insert command&#8221;):</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/clip-image002.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/clip-image002-thumb.jpg" border="0" alt="clip_image002" width="708" height="336" /></a></p>
<p>Google verhilft uns zur Erkenntnis, dass dies ein Known Bug in WSS 3.0 ist (wird auch durch WSS 3.0 Service Pack 1 nicht behoben). Der Bug tritt offenbar nur in benutzerdefinierten Listen auf. F&#252;r dieses Problem ist ein Hotfix verf&#252;gbar. Der zugeh&#246;rige Knowledge Base Artikel incl. M&#246;glichkeit zum Anfordern des Hotfixes findet sich unter <a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;949749">http://support.microsoft.com/default.aspx?scid=kb;en-us;949749</a></p>
<p><strong>Aber Vorsicht!</strong> Nachdem man die H&#252;rde genommen hat, die Mail mit dem Hotfix zu erhalten (Tipp: unter Junk E-Mail nachschauen) und frohgemut den Hotfix installiert hat (wobei man nat&#252;rlich als gelernter Microsoft-Entwickler auch das iisreset nicht vergessen hat), geht hinterher auf dem Sharepoint Server erstmal gar nichts mehr:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/image1.png"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/image-thumb1.png" border="0" alt="image" width="272" height="67" /></a></p>
<p>Abhilfe schafft die Ausf&#252;hrung des Sharepoint Products and Technologies Configuration Wizard. Nach der Ausf&#252;hrung funktioniert nicht nur unser Sharepoint wieder, sondern nun wartet der EventReceiver auch mit unserer benutzerdefinierten Fehlermeldung auf:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/image2.png"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/image-thumb2.png" border="0" alt="image" width="310" height="126" /></a></p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/06/19/bug-exception-bei-setzen-der-cancel-property-in-itemadding-oder-itemupdating-in-einer-benutzerdefinierten-liste/feed/</wfw:commentRss>
		</item>
		<item>
		<title>URL Anfragen mit &#34;IHttpModule&#34; und &#34;SPWebConfigModification&#34; umleiten.</title>
		<link>http://www.communardo.de/techblog/2008/06/19/url-anfragen-mit-ihttpmodule-und-spwebconfigmodification-umleiten/</link>
		<comments>http://www.communardo.de/techblog/2008/06/19/url-anfragen-mit-ihttpmodule-und-spwebconfigmodification-umleiten/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 07:15:05 +0000</pubDate>
		<dc:creator>Gordon Schroeder</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/06/19/url-anfragen-mit-ihttpmodule-und-spwebconfigmodification-umleiten/</guid>
		<description><![CDATA[<p>Um in Sharepoint anfragen auf eigene ASPX Seiten umzuleiten, besteht die M&#246;glichkeit dies durch die Verwendung eines „IHttpModules“ zu realisieren. Das Modul greift spezifische Anfragen auf definierte Seiten ab und leitet diese auf definierte Seiten um.</p>
<p>Hier der Code, um eine Anfrage auf die CreateWebPage.aspx auf die MyPage.aspx umzuleiten:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic11.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic1-thumb1.jpg" alt="pic1" border="0" width="679" height="274" /></a></p>
<p>Die Verwendung des IHttpModule, welches durch einen Eintrag in die „web.config“ realisiert wird, kann &#252;ber ein Feature mit Hilfe des SPWebConfigModification Objektes erreicht werden. Diese Feature setzt und l&#246;scht automatisch den notwendigen Eintrag in der „web.config“.</p>
<p>Hier der Beispielcode um das oben gezeigte IHttpModule anzubinden:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic21.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic2-thumb1.jpg" alt="pic2" border="0" width="679" height="358" /></a></p>
<p><strong><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic31.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic3-thumb1.jpg" alt="pic3" border="0" width="679" height="384" /></a> </strong></p>
<p><strong>Wichtig:</strong> Um auch die &#8220;Remove&#8221; Methode korrekt ausf&#252;hren zu k&#246;nnen, m&#252;ssen die Eigenschaften des SPWebConfigModification Objektes richtig gew&#228;hlt werden.</p>
<p>1. Die Eigenschaft &#8220;EnsureChildNote&#8221; muss angewandt werden, da mit der EnsureSection eine sp&#228;tere &#8220;Remove&#8221; Methode keine Auswirkung liefert.</p>
<p><strong>mod.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;</strong></p>
<p>2. Der &#8220;mod.Name&#8221; muss entsprechend der &#8220;mod.Values&#8221; angepasst werden. Wird der Name des Objektes willk&#252;rlich gew&#228;hlt, ist die Funktionalit&#228;t der &#8220;Add&#8221; Methode gew&#228;hrleistet, doch wird die Funktionalit&#228;t der &#8220;Remove&#8221; Methode kein Resultat liefern.</p>
<p><strong>entryvalue = @&#8221;&lt;add name=&#8221;"IHttpModule&#8221;" type=&#8221;"namespace.class, assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=&#8230;&#8221;" /&gt;&#8221;;</strong></p>
<p>Der Angepasste &#8220;mod.Name&#8221; muss dann folgend lauten:</p>
<p><strong>entryname = &#8220;add[@name='IHttpModule'][@type='namespace.class, assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=...]&#8220;;</strong></p>
<p>Hier nun noch der Inhalt der &#8220;feature.xml&#8221;. Zu beachten ist, dass der Scope auf der WebApplication liegen muss.</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic41.jpg"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/06/pic4-thumb1.jpg" alt="pic4" border="0" width="678" height="212" /></a></p>
<p>Links zum Thema:</p>
<p><a href="http://blogs.technet.com/tatianasv/rss_tag_SharePoint+development.xml" title="http://blogs.technet.com/tatianasv/rss_tag_SharePoint+development.xml">http://blogs.technet.com/tatianasv/rss_tag_SharePoint+development.xml</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx" title="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx">http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebconfigmodification.aspx</a></p>
<p><a href="http://blog.tedpattison.net/Lists/Posts/Post.aspx?ID=4">http://blog.tedpattison.net/Lists/Posts/Post.aspx?ID=4</a></p>
<p>MFG Gordon</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/06/19/url-anfragen-mit-ihttpmodule-und-spwebconfigmodification-umleiten/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Benutzerinformationen elegant aus ListItems extrahieren</title>
		<link>http://www.communardo.de/techblog/2008/04/21/benutzerinformationen-elegant-aus-listitems-extrahieren/</link>
		<comments>http://www.communardo.de/techblog/2008/04/21/benutzerinformationen-elegant-aus-listitems-extrahieren/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 08:16:18 +0000</pubDate>
		<dc:creator>Martin Hey</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Sharepoint]]></category>

		<category><![CDATA[SPListItem]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/04/21/benutzerinformationen-elegant-aus-listitems-extrahieren/</guid>
		<description><![CDATA[<p>Gelegentlich werden in Spalten von ListItems auch Benutzerinformationen gespeichert - als Beispiel sollen hier &#8220;erstellt von&#8221; und &#8220;ge&#228;ndert von&#8221; dienen. Die zugeh&#246;rigen Felder des Items beinhalten meist Zeichenketten im Format &lt;BenutzerID&gt;;#&lt;Benutzername&gt;.</p>
<p>Bevor man sich nun in String-Operationen versucht - z.B. durch Split an der Stelle &#8220;;#&#8221; und Erzeugung der Objekte &#252;ber die extrahierte ID - sollte man sich mit den Klassen SPFieldUser bzw. SPFieldUserValue auseinandersetzen, die hier viel Arbeit und Fehleranf&#228;lligkeit abnehmen k&#246;nnen, da hier sehr einfach Objekte vom Typ SPUser bzw. SPGroup zur&#252;ckgegeben werden k&#246;nnen.</p>
<p>Im Folgenden 2 beispielhafte Methoden, die den Zugriff verdeutlichen sollen:</p>
<pre>private SPUser GetSPUser(SPListItem item, Guid fieldid)
{
    SPUser retval = null; 

    #region check params
    if (item == null)
    {
        throw new ArgumentNullException("item");
    }
    if (fieldid == Guid.Empty)
    {
        throw new ArgumentException("Empty Guid is not allowed.", "fieldid");
    }
    #endregion 

    try
    {
        SPFieldUser field = item.Fields[fieldid] as SPFieldUser;
        if (field != null)
        {
            SPFieldUserValue fieldValue = field.GetFieldValue(item[fieldid].ToString()) as SPFieldUserValue;
            if (fieldValue != null)
            {
                retval = fieldValue.User;
            }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    } 

    return retval;
}</pre>
<pre>private SPGroup GetSPGroup(SPListItem item, Guid fieldid)
{
    SPGroup retval = null; 

    #region check params
    if (item == null)
    {
        throw new ArgumentNullException("item");
    }
    if (fieldid == Guid.Empty)
    {
        throw new ArgumentException("Empty Guid is not allowed.", "fieldid");
    }
    #endregion 

    try
    {
        SPFieldUser field = item.Fields[fieldid] as SPFieldUser;
        if (field != null)
        {
            SPFieldUserValue fieldValue = field.GetFieldValue(item[fieldid].ToString()) as SPFieldUserValue;
            if (fieldValue != null)
            {
                string groupName = fieldValue.LookupValue;
                retval = item.Web.SiteGroups[groupName];
            }
        }
    }
    catch (Exception ex)
    {
        throw ex;
    } 

    return retval;
}</pre>
<p>Der Aufruf ist nun recht trivial:</p>
<pre>SPUser modifiedbyuser = GetSPUser(tasklistitem, SPBuiltInFieldId.Editor);
DateTime modifiedat = Convert.ToDateTime(tasklistitem[SPBuiltInFieldId.Modified]);
SPUser assignedto = GetSPUser(tasklistitem, SPBuiltInFieldId.AssignedTo);</pre>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/04/21/benutzerinformationen-elegant-aus-listitems-extrahieren/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Zugriff auf erweiterte Eigenschaften einer Workflowaufgabe</title>
		<link>http://www.communardo.de/techblog/2008/04/17/zugriff-auf-erweiterte-eigenschaften-einer-workflowaufgabe/</link>
		<comments>http://www.communardo.de/techblog/2008/04/17/zugriff-auf-erweiterte-eigenschaften-einer-workflowaufgabe/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 06:48:34 +0000</pubDate>
		<dc:creator>Martin Hey</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[.NET]]></category>

		<category><![CDATA[c#]]></category>

		<category><![CDATA[Sharepoint]]></category>

		<category><![CDATA[SPListItem]]></category>

		<category><![CDATA[Task]]></category>

		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/04/17/zugriff-auf-erweiterte-eigenschaften-einer-workflowaufgabe/</guid>
		<description><![CDATA[<p>Bei der Entwicklung komplexer Workflows f&#252;r den SharePoint spielen auch Workflowaufgaben f&#252;r die Benutzerinteraktion w&#228;hrend der Ausf&#252;hrung des Workflows eine nicht unbedeutende Rolle.</p>
<p>Eine solche Aufgabe hat nicht nur die Standardeigenschaften wie einen Titel oder eine Beschreibung sondern auch erweiterte Eigenschaften. Das praktische daran ist, dass diese kein eigenes Feld in der Liste ben&#246;tigen sondern die Daten in den bereits vorhandenen Feldern gespeichert werden.</p>
<p>Und wenn man wei&#223;, wie es geht, ist der Zugriff auf diese Daten auch sehr einfach.</p>
<p>1.) bei der Erstellung<br />
W&#228;hrend der Erstellung der Aufgaben verwendet man in der Regel den Typ WssTaskActivity. Dieser verf&#252;gt bereits &#252;ber eine Eigenschaft ExtendedProperties, die vom Typ Hashtable ist und in die man seine gew&#252;nschten Daten schreiben kann.</p>
<pre>createTask.TaskId = Guid.NewGuid();
createTask.TaskProperties.Title = "Bitte genehmigen";
createTask.TaskProperties.ExtendedProperties["AdditionalText"]
    = "Bitte pers&#246;nlich bearbeiten!";</pre>
<p>2.) &#252;ber den Item der TaskList</p>
<p>M&#246;chte man nun sp&#228;ter noch einmal darauf zugreifen, sieht man sich vor die Aufgaben gestellt, die Daten wieder aus dem SPListItem der TaskList zu lesen und nach der &#196;nderung auch wieder zu schreiben. Sieht man sich das SPListItem genauer an, das die Aufgabe repr&#228;sentiert, so erkennt man, dass es ein Feld ExtendedProperties enth&#228;lt, in dem die Daten auch enthalten sind - allerdings sind hier einfach die XML-Attribute die die Eigenschaften repr&#228;sentieren angegeben:</p>
<pre>"AdditionalText='Bitte pers&#246;nlich bearbeiten!' Department='Einkauf'"</pre>
<p>Die gro&#223;e Frage ist jetzt, wie man einfach auf diese Daten zugreift, diese ver&#228;ndert und wieder abspeichert. Die Hashtable die bei der Erstellung w&#228;re hierf&#252;r ein ad&#228;quates Objekt, das hier aber wie es zun&#228;chst scheint nicht vorhanden ist. Aber man muss hier nicht verzagen - auch daf&#252;r gibt es eine bereits vorhandene L&#246;sung, auf die man aber erst kommen muss. Der Typ SPWorkflowTask aus dem NameSpace Microsoft.SharePoint.Workflow verf&#252;gt &#252;ber 2 interessante statische Methoden: GetExtendedPropertiesAsHashtable hat als R&#252;ckgabewert genau die eben noch vermisste Hashtable und AlterTask verf&#252;gt &#252;ber die M&#246;glichkeiten, den Item mit den ge&#228;nderten Daten auch wieder zu aktualisieren.</p>
<pre>// get the extended properties hashtable
Hashtable taskItemExtProps = SPWorkflowTask.GetExtendedPropertiesAsHashtable(this.TaskListItem);
// write new values to the hashtable
taskItemExtProps["AdditionalText"] = "Mein Kommentar: genehmigt!";
// update the task item with new values
SPWorkflowTask.AlterTask(this.TaskListItem, taskItemExtProps, true);</pre>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/04/17/zugriff-auf-erweiterte-eigenschaften-einer-workflowaufgabe/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JavaScript-Fehler &#34;Objekt erforderlich&#34; beim Verschieben eines WebParts in SharePoint</title>
		<link>http://www.communardo.de/techblog/2008/03/26/javascript-fehler-objekt-erforderlich-beim-verschieben-eines-webparts-in-sharepoint/</link>
		<comments>http://www.communardo.de/techblog/2008/03/26/javascript-fehler-objekt-erforderlich-beim-verschieben-eines-webparts-in-sharepoint/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 21:47:43 +0000</pubDate>
		<dc:creator>Christian Heindel</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[doctype]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[masterpage]]></category>

		<category><![CDATA[Sharepoint]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/03/26/javascript-fehler-objekt-erforderlich-beim-verschieben-eines-webparts-in-sharepoint/</guid>
		<description><![CDATA[<p>Die Standard-MasterPage von SharePoint (default.master) wurde ohne Angabe eines DOCTYPE geschrieben. Dadurch f&#228;llt der IE beim Rendern in den Quirks Mode zur&#252;ck. Entsprechend wurden SharePoint-eigene Funktionalit&#228;ten wie das Verschieben eines WebParts auf Grundlage des Quirks Mode geschrieben.</p>
<p>Wenn man sich nun aber an Standards halten, und einen DOCTYPE angeben m&#246;chte, bekommt man u.U. Probleme in SharePoint.</p>
<p>So bringt zum Beispiel des Einf&#252;gen der Angabe</p>
<pre>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</pre>
<p>einen Fehler beim Ausf&#252;hren der JavaScript-Methode &#8220;MSOLayout_GetRealOffset&#8221; hervor, wenn sich der WebPart in einem relativ positionierten DIV befindet:</p>
<pre>Message: Objekt erforderlich
Line: 1572
Char: 3
Code: 0
URI: <a href="http://SERVER/_layouts/1031/ie55up.js?rev=Ni7%2Fj2ZV%2FzCvd09XYSSWvA%3D%3D">http://SERVER/_layouts/1031/ie55up.js?rev=Ni7%2Fj2ZV%2FzCvd09XYSSWvA%3D%3D</a></pre>
<p><strong>M&#246;gliche L&#246;sungen f&#252;r dieses Problem sind:</strong></p>
<p><u>1. Anpassen der JavaScript-Methode</u></p>
<p>Dies sollte jedoch nicht direkt in der &lt;12&gt;\TEMPLATE\LAYOUTS\1033\IE55UP.JS geschehen, da es dort durch Updates &#252;berschrieben werden kann. Und sp&#228;testens beim Deployen auf einer Farm wird es umst&#228;ndlich.</p>
<p>Daher sollte man die Anpassung lieber in seiner Masterpage vornehmen. Dazu &#252;berschreibt man einfach die &#8220;fehlerhafte&#8221; Methode indem man nach SPWebPartManager folgenden Code einf&#252;gt:</p>
<pre>&lt;script language="javascript" type="text/javascript"&gt;
   1: 
   2:     function MSOLayout_GetRealOffset(StartingObject, OffsetType, EndParent)
   3:     {
   4:         var realValue=0;
   5:         if (!EndParent) EndParent=document.body;
   6:         for (var currentObject=StartingObject; currentObject &amp;&amp; currentObject !=EndParent &amp;&amp; currentObject != document.body; currentObject=currentObject.offsetParent)
   7:         {             var offset = eval('currentObject.offset'+OffsetType);
   8:             if (offset) realValue+=offset;
   9:         }
  10:         return realValue;
  11:     }
&lt;/script&gt;</pre>
<p><u>oder 2. Vermeiden von position:relative bei Containern f&#252;r WebParts</u></p>
<p>Stattdessen kann man z.B. float verwenden. Dazu gibt es diverse MasterPage-Vorlagen.</p>
<p><u>oder 3. Entfernen der DOCTYPE-Angabe in der MasterPage</u></p>
<p>Das ist eine schnelle L&#246;sung, aber kein optimales HTML. Eine <a href="http://www.w3.org/TR/WAI-WEBCONTENT/#conformance">Triple-A Conformance</a> f&#252;r &#8220;Premium&#8221;-Barrierefreiheit wird man dadurch nicht erreichen k&#246;nnen. Andererseits: Die default.master wird ja auch so ausgeliefert&#8230; <img src='http://www.communardo.de/techblog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Englischsprachige Quellen zu diesem Thema:</p>
<ul>
<li>Heather Solomon: &#8220;<a href="http://www.heathersolomon.com/blog/archive/2007/02/21/6213.aspx">The DOCTYPE tag and SharePoint Master Pages</a>&#8220;</li>
<li>Tech MOSS Team: &#8220;<a href="http://www.sharepointblogs.com/tmt/archive/2007/11/01/CSS-causes-JavaScript-error-while-moving-Web-Parts-in-edit-mode.aspx">CSS causes JavaScript error while moving Web Parts in edit mode</a>&#8220;</li>
</ul>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/03/26/javascript-fehler-objekt-erforderlich-beim-verschieben-eines-webparts-in-sharepoint/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Webtest und Load Test in VS 2008 erstellen</title>
		<link>http://www.communardo.de/techblog/2008/03/12/webtest-und-load-test-in-vs-2008-erstellen/</link>
		<comments>http://www.communardo.de/techblog/2008/03/12/webtest-und-load-test-in-vs-2008-erstellen/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 20:01:33 +0000</pubDate>
		<dc:creator>Frank Binöder</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/03/12/webtest-in-vs-2008-erstellen/</guid>
		<description><![CDATA[<p>Einrichten von Webtests und Loadtest f&#252;r SharePoint Anwendungen in Visual Studio Team System 2008.</p>
<h2>Verbindung zur Datenbank als Load Test Repository.<br /></h2>
<p>Hier verl&#228;sst man zun&#228;chst die VS Oberfl&#228;che und begibt sich in die Konsole.&nbsp; Ich nehme mal&nbsp; an, es ist ein SQL Server (in meinem Fall SQL Express auf der gleichem Maschine) vorhanden.</p>
<p>Dann einfach VS Command Prompt (&#252;ber das Startmen&#252;) &#246;ffnen und ein CD in folgendes Verzeichnis machen:<br />c:\program files\microsoft visual studio 9.0\common7\ide</p>
<p>Anschlie&#223;end folgendes Kommando ausf&#252;hren (evtl. SQL Instanz anpassen):</p>
<p>SQLCMD /S localhost\sqlexpress /i loadtestresultsrepository.sql</p>
<p>Siehe dazu im &#220;brigen auch :<br /><a href="http://msdn2.microsoft.com/en-us/library/ms182600.aspx">http://msdn2.microsoft.com/en-us/library/ms182600.aspx</a></p>
<p><!--more--></p>
<p>Nun zur&#252;ck im VS 2008 die Datenbankconnection pr&#252;fen unter:</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl1.png"></p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl2.png"></p>
<p>Und</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl3.png"></p>
<h2>Webtest aufzeichnen<br /></h2>
<p>Dann wollen wir den Webtest mal aufzeichnen. Das geht meines Wissens nach &#252;brigens nur mit IE.</p>
<p>Den Test ordentlich benennen, wir ordnen ihn sp&#228;ter einem Szenario zu.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl4.png"></p>
<p>Der Webtestrecorder ist ein IE Addon. Deshalb wohl die Einschr&#228;nkung auf diesen Browser.</p>
<p>Der Pause Button macht sich gut, wenn man w&#228;hrend des Aufzeichnens vergessen hat, was man machen wollte. Er unterbricht hoffentlich auch die Think Time, die mit aufgezeichnet werden kann.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl5.png"></p>
<p>Ende der Aufzeichnung. Man kann sich die augezeichneten Schritte im nachhinein noch einmal ansehen.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl6.png"></p>
<h2>Run Settings einstellen<br /></h2>
<p>Die Run Settings erhalten, wir in dem wir &#252;ber Test &gt; New Test einen Load Test hinzuf&#252;gen. Wir m&#246;chten ja die Last messen.</p>
<p>In den Run Settings stellen wir grob ein, welche Maschinen getestet werden und was darauf. Hier h&#228;ngen wir unseren Webfrontend Server rein, auf dem die SharePoint Anwendung l&#228;uft. Der Rechner wird an seinem Namen erkannt. Der TFS-Eval hostet das VS2008 mit seiner Datenbank, beide befinden sich in der gleichen Dom&#228;ne.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl7.png"></p>
<p>In den Eigenschaften des Tests sind u.a. die Test Iterations wichtig und Use Test Iterations. Unser Test soll nach der vorgegebenen Zeit beendet werden.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl8.png"></p>
<h2></h2>
<h2>Szenario erstellen<br /></h2>
<p>Nun erstellen wir ein Szenario. Hier legen wir u.a. fest, ob unsere Benutzer zwischen den Klicks denken sollen, die Think Time.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl9.png"></p>
<p>Das Load Pattern legt fest, ob fest immer eine bestimmte Anzahl nutzer gleichzeitg den Test durchf&#252;hren soll, oder ob die Anzahl der Benutzer ansteigt (Step Load).</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl10.png"></p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl11.png"></p>
<p>In diesem Schritt f&#252;gen wir nun unseren Webtest hinzu.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl12.png"></p>
<p>Und ein bunter Mix aus Browsern.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl13.png"></p>
<p>Und eine Bandbreite. Unser Nutzer haben alle einen schmalen DSL Anschluss.</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl14.png"></p>
<p>Dann k&#246;nnen wir den Test starten. Der Eindruck eines Ergebnisses:</p>
<p><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/03/031208-2001-webtestundl15.png"></p>
<p>Ganz klar, der virtuelle Prozessor des virtuellen Entwicklerservers hatte gut zu tun (die ganzen roten Kreuze oben). Hier wird die Regel best&#228;tigt: Lieber mehr Prozessoren als mehr RAM im Webserver. W&#228;hrend des ganzen Tests hat sich die RAM Auslastung des Webservers kaum ver&#228;ndert.</p>
<p>Ein Lasttest auf virtuellen Maschinen ist selbstverst&#228;ndlich wenig aussagekr&#228;ftig. Aber es lassen sich dennoch die ersten Flaschenh&#228;lse und Tendenzen feststellen, denen man in der Entwicklung noch begegnen kann.</p>
<p>Die Load und Webtests sind in Visual Studio 2008 nur in der Test Suite oder in der Team Suite enthalten. Die Testfunktionalit&#228;ten der anderen Visual Studio Suites (Developer oder die Professional) enthalten nur Funktionen f&#252;r Unit-Tests. Als freie Alternative bietet sich hier JMeter an.</p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/03/12/webtest-und-load-test-in-vs-2008-erstellen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Verteilte SharePoint Architekturen</title>
		<link>http://www.communardo.de/techblog/2008/02/23/verteilte-sharepoint-architekturen/</link>
		<comments>http://www.communardo.de/techblog/2008/02/23/verteilte-sharepoint-architekturen/#comments</comments>
		<pubDate>Sat, 23 Feb 2008 22:58:45 +0000</pubDate>
		<dc:creator>Frank Binöder</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/02/23/verteilte-sharepoint-architekturen/</guid>
		<description><![CDATA[<p>Eine gute &#220;bersicht, wie am Besten verteilte Standorte mit SharePoint versorgt werden, hat das SharePoint Team in seinem Blog ver&#246;ffentlicht.</p>
<p><a title="http://blogs.msdn.com/sharepoint/archive/2008/02/22/deploying-microsoft-office-sharepoint-server-2007-geographically.aspx" href="http://blogs.msdn.com/sharepoint/archive/2008/02/22/deploying-microsoft-office-sharepoint-server-2007-geographically.aspx">http://blogs.msdn.com/sharepoint/archive/2008/02/22/deploying-microsoft-office-sharepoint-server-2007-geographically.aspx</a></p>
<p>Die meiner Meinung nach beiden wichtigsten Szenarien habe ich mal rausgegriffen.</p>
<h4>1. Aufbau einer zentralen Farm. </h4>
<p>Jeder Standort greift &#252;ber das Netz auf die Inhalte und Dienste der zentralen Farm zu. Auch Suchanfragen laufen &#252;ber das Netz.</p>
<table cellspacing="0" cellpadding="2" width="400" border="1">
<tbody>
<tr>
<td valign="top" width="200"><strong>Vorteile</strong></td>
<td valign="top" width="200"><strong>Nachteile</strong></td>
</tr>
<tr>
<td valign="top" width="200">kein Crawling von Inhalten &#252;ber das Netz (WAN) notwendig</td>
<td valign="top" width="200">u.U. langsamerer Zugriff und Daten&#252;bertragung, Abh&#228;ngig von der Bandbreite</td>
</tr>
<tr>
<td valign="top" width="200">zentrale Administration einer Farm</td>
<td valign="top" width="200">u.U. langsamere Suchanfragen, Abh&#228;ngig von der Bandbreite</td>
</tr>
<tr>
<td valign="top" width="200">zentrales Backup</td>
<td valign="top" width="200">&#160;</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<h4>2. Aufbau einer zentralen Farm mit zus&#228;tzlichen regionalen Farmen.</h4>
<p>Zu der zentralen Farm kommen an jedem Standort eine regionale Farm hinzu. Und genau hier gibt es jetzt mehrere M&#246;glichkeiten. Hier muss man sich &#252;berlegen, ob das SharePoint Poral in erster Linie dazu dient, Inhalte (CMS, Dokumente) bereitzustellen oder f&#252;r Collaboration genutzt werden soll. <a title="http://technet2.microsoft.com/Office/en-us/library/cbccbc4d-e560-4b92-89d0-56f49e7f3f4b1033.mspx?mfr=true" href="http://technet2.microsoft.com/Office/en-us/library/cbccbc4d-e560-4b92-89d0-56f49e7f3f4b1033.mspx?mfr=true">http://technet2.microsoft.com/Office/en-us/library/cbccbc4d-e560-4b92-89d0-56f49e7f3f4b1033.mspx?mfr=true</a></p>
<p>Bei der Suche kann die zentrale Farm die komplette Indizierung aller Farmen &#252;ber das Netz &#252;bernehmen. Dies ist aber m&#246;glicherweise sehr langsam und endet in Timeouts. Bei einer schnellen Anbindung ist so aber nat&#252;rlich ein zentraler Index aller Farmen vorhanden. Benutzer m&#252;ssen so aber immer zur zentralen Farm navigieren, um eine Suche zu starten.</p>
<p>Bei den Suchergebnissen (<a title="Plan for global enterprise search" href="http://go.microsoft.com/fwlink/?LinkId=111052&amp;clcid=0x409">Plan for global enterprise search</a>) wird dann aber auch nicht zwischen lokalem Inhalt (der regionalen Farm) und der zentralen Farm unterschieden. Ein Mitarbeiter erkennt nicht gleich, ob das gefundene Dokument auf dem Server seiner Niederlassung oder der zentrale liegt. Es wird dabei auch nicht priorisiert, also dass Suchergebnisse aus der Niederlassung zuerst angezeigt werden.</p>
<p>Die Alternative, dass jede Farm nur ihren eigenen Index hat, halte ich dagegen nicht f&#252;r sinnvoll, da so nicht in einem Schritt &#252;ber das ganze Unternehmen gesucht werden kann, was ja dem Gedanken des Enterprise Search widerspricht.</p>
<p>Aber es gibt ja immer eine M&#246;glichkeit:</p>
<p>Die zentrale Farm erstellt &#252;ber den SSP einen Index &#252;ber alle Farmen im Verbund. Zus&#228;tzlich hat jede regionale Farm einen eigenen Index. &#220;ber Suchbereiche kann der Benutzer ausw&#228;hlen, wo er suchen will. Dies reduziert die Suchanfragen &#252;ber den gesamten Index der zentralen Farm, die Performance der Suchanfragen steigt.</p>
<table cellspacing="0" cellpadding="2" width="400" border="1">
<tbody>
<tr>
<td valign="top" width="200"><strong>Vorteile</strong></td>
<td valign="top" width="200"><strong>Nachteile</strong></td>
</tr>
<tr>
<td valign="top" width="200">lokale Suche m&#246;glich, schneller</td>
<td valign="top" width="200">nach wie vor muss der Gesamtindex von der zentralen Farm &#252;ber das WAN erstellt werden</td>
</tr>
<tr>
<td valign="top" width="200">lokale Relevanz wird ber&#252;cksichtigt</td>
<td valign="top" width="200">Globale Suche nach wie vor von der Bandbreite abh&#228;ngig</td>
</tr>
<tr>
<td valign="top" width="200">weniger Traffic &#252;ber das WAN</td>
<td valign="top" width="200">es m&#252;ssen mehrere Indizes verwaltet werden</td>
</tr>
</tbody>
</table>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/02/23/verteilte-sharepoint-architekturen/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tools f&#252;r das Mind - Mapping</title>
		<link>http://www.communardo.de/techblog/2008/01/23/tools-fur-das-mind-mapping/</link>
		<comments>http://www.communardo.de/techblog/2008/01/23/tools-fur-das-mind-mapping/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 19:24:18 +0000</pubDate>
		<dc:creator>Judith Schmalz</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[freemind]]></category>

		<category><![CDATA[konvertierung]]></category>

		<category><![CDATA[mindmanager]]></category>

		<category><![CDATA[Sharepoint]]></category>

		<category><![CDATA[wissensmanagement]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/23/tools-fur-das-mind-mapping/</guid>
		<description><![CDATA[<p><strong>Konvertierung von Freemind-Mindmaps in Mindmanager-Mindmaps und umgekehrt</strong></p>
<p>Neben der bekannten, kommerziellen L&#246;sung Mindmanager (von Mindjet) zum Bearbeiten von Mindmaps hat sich mittlerweile ein freies Tool etablieren k&#246;nnen. <a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page">Freemind</a> ist eine Open Source L&#246;sung, lizensiert unter GPL, die viele Funktionen des Mindmanagers abbildet.  Die Bedienung von Freemind ist teilweise nicht ganz so komfortabel wie die des Mindmanagers, auch werden Mindmaps nicht automatisch angeordnet, daf&#252;r speichert Freemind in weiterverwendbare XML-Dateien und es entstehen keine weiteren Lizenzkosten.</p>
<p>Um Freemind-Mindmaps in Mindmanager-Mindmaps (und umgekehrt) zu konvertieren existieren mehrere Ans&#228;tze:</p>
<ul>
<li>Installatation eines <a href="http://mindjetlabs.com/cs/files/folders/mindjetlabs/entry61.aspx">Plug-Ins</a> (vorher kostenlose Registrierung notwendig) im Mindmanager, mit dessen Hilfe Mindmaps, die mit Freemind erstellt wurden, ge&#246;ffnet werden k&#246;nnen. Zur Konvertierung in die andere Richtung bietet Freemind die Importfunktion von Mindmanager-Dateien. Achtung: diese Funktion ist erst ab Freemind-Version 0.9 verf&#252;gbar.</li>
<li>Konvertierung durch <a href="http://krottmaier.cgv.tugraz.at/docs/seminar/sem2002_mindmaps.tar.gz">XSLT</a>s. Diese Konvertierung ist recht fehleranf&#228;llig und umst&#228;ndlich. Durch die neuen Funktionen und Plugins wie oben beschrieben wird dieser Ansatz zur Konvertierung obsolet.</li>
<li>Konvertierung ohne zus&#228;tzlichen Installationsaufwand, aber etwas „schmutzig“ (Diese L&#246;sung bietet bietet sich vor allem f&#252;r die schnelle, einmalige Konvertierung an):
<ul>
<li>Export der Mindmap (Alle Zweige m&#252;ssen beim Export vollst&#228;ndig ausgeklappt sein) mit Freemind in eine HTML-Seite</li>
<li>&#214;ffnen und Abspeichern der HTML-Seite in Microsoft Word</li>
<li>Import in Mindmanager.</li>
</ul>
</li>
</ul>
<p>Weil es thematisch gerade passt f&#252;ge ich an dieser Stelle noch zwei interessante Links zu Mindmapping Tools ein:<!--more--></p>
<ul>
<li>Mindmanager stellt ein <a href="http://mindjetlabs.com/cs/files/folders/mindjetlabs/entry40.aspx">Plugin</a> zur Verf&#252;gung mit dem Mindmap-Dokumente, die im SharePoint -Server gespeichert sind,  bei der Bearbeitung auch wieder dort gespeichert werden (analog zum Arbeiten mit Office Dokumenten). Wenn dieses Plugin nicht installiert ist, wird eine Mindmap zum Bearbeiten lokal ge&#246;ffnet und lokal in Entwurfsordnern gespeichert, die versehentlich leicht &#252;berspeichert werden k&#246;nnen. Zum Download des Plugins ist ebenfalls eine kostenfreie Registrierung notwendig.</li>
<li><a href="http://www.mindmeister.com/">Mindmeister</a>  ist eine spannende Webanwendung, die die synchrone, collaborative Arbeit an Mindmaps unterst&#252;tzt.</li>
</ul>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/23/tools-fur-das-mind-mapping/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sharepoint Listenelement (SPListItem) in eine andere Liste kopieren</title>
		<link>http://www.communardo.de/techblog/2008/01/08/sharepoint-listenelement-splistitem-in-eine-andere-liste-kopieren/</link>
		<comments>http://www.communardo.de/techblog/2008/01/08/sharepoint-listenelement-splistitem-in-eine-andere-liste-kopieren/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 16:18:01 +0000</pubDate>
		<dc:creator>Dorrit Riemenschneider</dc:creator>
		
		<category><![CDATA[Microsoft Sharepoint]]></category>

		<category><![CDATA[ASP.NET]]></category>

		<category><![CDATA[c#]]></category>

		<category><![CDATA[Sharepoint]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[SPListItem]]></category>

		<guid isPermaLink="false">http://www.communardo.de/techblog/2008/01/08/sharepoint-listenelement-splistitem-in-eine-andere-liste-kopieren/</guid>
		<description><![CDATA[<p>Daf&#252;r gibt es (theoretisch) eine denkbar einfache L&#246;sung: SPListItem bietet eine Methode CopyTo(destinationUrl) an (<a href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.copyto.aspx" title="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.copyto.aspx">http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.copyto.aspx</a>) - leider scheint diese aber nicht (in jedem Fall?) zu funktionieren. Zumindest in meinem Fall (benutzerdefinierte Liste mit benutzerdefiniertem Inhaltstyp UND Attachments - vielleicht erwarte ich einfach auch zu viel von Sharepoint&#8230;) tat sie es nicht. Stattdessen erhielt ich folgende Exception: &#8220;Source item cannot be found. Verify that the item exist and that you have permission to read it.&#8221; Eine rasche Recherche bei Google brachte mir die Erkenntnis, dass andere Leute das gleiche Problem auch schon hatten - leider ohne verwertbare L&#246;sungsvorschl&#228;ge&#8230;</p>
<p>Also erstellen wir uns eben selbst eine kleine statische Methode, die das gew&#252;nschte tut:</p>
<p>Die Methodensignatur erwartet ein Quellelement und einen Listenname und gibt das kopierte Zielelement zur&#252;ck:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image7.png"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image-thumb7.png" alt="image" border="0" height="24" width="679" /></a></p>
<p>Zuerst erstellen wir das Zielelement in der angegebenen Liste. Dann gehen wir Schritt f&#252;r Schritt alle Fields des  Quellelementes durch und kopieren diese zum Zielelement:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image8.png"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image-thumb8.png" alt="image" border="0" height="172" width="534" /></a></p>
<p>Achtung! Wir sollten nicht versuchen, readonly Fields zu kopieren und auch die Attachments lassen sich nicht auf diese Weise &#8220;abfertigen&#8221;. Diese behandeln wir folgenderma&#223;en:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image9.png"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image-thumb9.png" alt="image" border="0" height="142" width="594" /></a></p>
<p>Nun noch schnell das Zielelement gespeichert und zur&#252;ckgegeben - fertig <img src='http://www.communardo.de/techblog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image10.png"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image-thumb10.png" alt="image" border="0" height="64" width="177" /></a></p>
<p>So k&#246;nnte z.B. der Aufruf der Methode aussehen:</p>
<p><a href="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image11.png"><img src="http://www.communardo.de/techblog/wp-content/uploads/2008/01/image-thumb11.png" alt="image" border="0" height="27" width="613" /></a></p>
<p>Zum besseren Kopieren hier das Ganze nochmal als Text:</p>
<p><em>public static SPListItem CopyItem(SPListItem sourceItem, string destinationListName)<br />
{<br />
//copy sourceItem to destinationList<br />
SPList destinationList = sourceItem.Web.Lists[destinationListName];<br />
SPListItem targetItem = destinationList.Items.Add();<br />
foreach (SPField f in sourceItem.Fields)<br />
{<br />
if (!f.ReadOnlyField &amp;&amp; f.InternalName != &#8220;Attachments&#8221;)<br />
{<br />
targetItem[f.InternalName] = sourceItem[f.InternalName];<br />
}<br />
}<br />
//copy attachments<br />
foreach (string fileName in sourceItem.Attachments)<br />
{<br />
SPFile file = sourceItem.ParentList.ParentWeb.GetFile(sourceItem.Attachments.UrlPrefix + fileName);<br />
byte[] imageData = file.OpenBinary();<br />
targetItem.Attachments.Add(fileName, imageData);<br />
}<br />
targetItem.Update();<br />
return targetItem;<br />
} </em></p>
]]></description>
		<wfw:commentRss>http://www.communardo.de/techblog/2008/01/08/sharepoint-listenelement-splistitem-in-eine-andere-liste-kopieren/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
