Startseite > Techblog > .NET, Microsoft Sharepoint, Softwareentwicklung > Sharepoint Listenelement (SPListItem) in eine andere...
dri

Dafür gibt es (theoretisch) eine denkbar einfache Lösung: SPListItem bietet eine Methode CopyTo(destinationUrl) an (http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.copyto.aspx) – 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…) tat sie es nicht. Stattdessen erhielt ich folgende Exception: “Source item cannot be found. Verify that the item exist and that you have permission to read it.” Eine rasche Recherche bei Google brachte mir die Erkenntnis, dass andere Leute das gleiche Problem auch schon hatten – leider ohne verwertbare Lösungsvorschläge…

Also erstellen wir uns eben selbst eine kleine statische Methode, die das gewünschte tut:

Die Methodensignatur erwartet ein Quellelement und einen Listenname und gibt das kopierte Zielelement zurück:

image

Zuerst erstellen wir das Zielelement in der angegebenen Liste. Dann gehen wir Schritt für Schritt alle Fields des Quellelementes durch und kopieren diese zum Zielelement:

image

Achtung! Wir sollten nicht versuchen, readonly Fields zu kopieren und auch die Attachments lassen sich nicht auf diese Weise “abfertigen”. Diese behandeln wir folgendermaßen:

image

Nun noch schnell das Zielelement gespeichert und zurückgegeben – fertig :-)

image

So könnte z.B. der Aufruf der Methode aussehen:

image

Zum besseren Kopieren hier das Ganze nochmal als Text:

public static SPListItem CopyItem(SPListItem sourceItem, string destinationListName)
{
//copy sourceItem to destinationList
SPList destinationList = sourceItem.Web.Lists[destinationListName];
SPListItem targetItem = destinationList.Items.Add();
foreach (SPField f in sourceItem.Fields)
{
if (!f.ReadOnlyField && f.InternalName != “Attachments”)
{
targetItem[f.InternalName] = sourceItem[f.InternalName];
}
}
//copy attachments
foreach (string fileName in sourceItem.Attachments)
{
SPFile file = sourceItem.ParentList.ParentWeb.GetFile(sourceItem.Attachments.UrlPrefix + fileName);
byte[] imageData = file.OpenBinary();
targetItem.Attachments.Add(fileName, imageData);
}
targetItem.Update();
return targetItem;
}

Kommentar Feed Trackback URL
5 Antworten zu:
“Sharepoint Listenelement (SPListItem) in eine andere Liste kopieren”
  1. Dorrit Riemenschneider sagt:

    Hi pankaj, you should be able to solve your problem by using the SPUserToken object. Here you can find a similiar (not just the same but I think you can adapt this) solution: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/41d34a5e-e53b-4d27-bc0a-4a4bb2107e6a
    Cheers, Dorrit

  2. pankaj sagt:

    Hi Dorrit,
    The solution works fine. But it does not copy the “Created By” field i.e. when a listitem is copied to another list, the “created by” is set to the system account and not the “created by” column from the source list. I have a requirement where i want to replicate the “Created by” field too.

  3. [...] showed that I was not the only one struggling with this. Several solutions are available like: http://www.communardo.de/techblog/2008/01/08/sharepoint-listenelement-splistitem-in-eine-andere-list... (you can read the code… ) [...]

  4. Tom sagt:

    Hallo Dorrit,

    vielen Dank für diesen SEHR hilfreichen Beitrag.
    Hat mir aktuell sehr geholfen ;-)

    LG Tom

  5. AISMAN sagt:

    Hi Dorrit,
    möchte “Danke” sagen.
    Das kann ich demnächst sehr gut gebrauchen :-)
    Liebe Grüsse
    aus Köln
    Manfred

Hinterlassen Sie einen Kommentar

Tag Cloud

Unsere Themen

Kommentare

  • Niels Jaeckel: Hallo Ralf, wir haben heute das Benno auf die Version 1.1.3 aktualisiert. Dort funktioniert die...
  • Patrick: Super und Vielen Dank für diesen Artikel!! War genau das, was ich gesucht habe und hat mir sehr geholfen
  • hanjo: whileprintingrecords; {Gruppierfeld}=Previous({Grupp ierfeld}) Gruppierfeld natürlich. Bug im Editor, hat die...
  • hanjo: Bedingte Unterdrückung Detailbereich wie beschrieben. Bedingte Unterdrückung Gruppenkopf 1b:...
  • Niels Jaeckel: Hallo Ralf, wir haben es noch nicht mit dieser Benno-Version getestet. Allerdings steht das Update auf...

Twitter