SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




DocumentLibraryItem von Liste A nach Liste B kopieren

Unbeantwortet Dieser Beitrag hat 4 Antworten

Ohne Rang
73 Beiträge
stoepsel007 erstellt 19 Apr. 2010 18:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Guten Abend,
ich möchte die ersten drei Items(Photo) von Liste A zu Liste B kopieren. Folgendes habe ich in einer Konsolenanwendung ausprobiert:

            SPSite publicSite = new Microsoft.SharePoint.SPSite("http://server/MySite");
                    SPWeb mySitePublicWeb = publicSite.OpenWeb();
                    SPList mySitePublicSharedList = mySitePublicWeb.Lists["Shared Pictures"];
                   
                    SPListItemCollection publicPhotoCollection = mySitePublicSharedList.Items;

                    //Löschen aller öffentlichen Shared Pictures
                    for(int n=0; n<publicPhotoCollection.Count; n++)
                    {
                        publicPhotoCollection.Delete(n);
                    }
                    mySitePublicSharedList.Update();


                    //Kopieren alle Bilder vom aktuellen Benutzer
                        //Bestimme Benutzer
                        string currentMySiteOwner = "administrator";

                        SPSite mySite = new SPSite("http://server/personal/" + currentMySiteOwner);
                        SPWeb mySitePrivateWeb = mySite.OpenWeb();
                        SPList mySitePrivateSharedList = mySitePrivateWeb.Lists["Shared Pictures"];
                        string test = mySitePrivateSharedList.Items.Count.ToString();

                        SPListItemCollection privatePhotoCollection = mySitePrivateSharedList.Items;

                        int i = 0;
                        foreach (SPListItem photoItem in privatePhotoCollection)
                        {
                            if (i <= 3)
                            {
                                SPListItem copyItem = mySitePublicSharedList.Items.Add();
                                copyItem = photoItem;
                                mySitePublicWeb.AllowUnsafeUpdates = true;
                                copyItem.Update();
                                mySitePublicWeb.AllowUnsafeUpdates = false
;
                            }
                        }

Zwar läuft das Programm durch, jedoch bekomme ich kein Ergebnis. In der Zielliste befinden sich keine Photos.
Wie kopiere ich meine Items von Liste A zu Liste B?
Vielen Dank für eure Hilfe!

Alle Antworten

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 19 Apr. 2010 22:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="stoepsel007"]

                            {
                                SPListItem copyItem = mySitePublicSharedList.Items.Add();
                                copyItem = photoItem;
                                mySitePublicWeb.AllowUnsafeUpdates = true;
                                copyItem.Update();
                                mySitePublicWeb.AllowUnsafeUpdates = false
;
                            }

[/quote]

1. Was passiert wenn man copyItem = photoItem zuweist? Bedenke beides sind Referenz Typen und keine Value Typen. Das bedeutet copyItem hat eine referenz auf photoItem und die alte referenz von copyItem wird vom GC gelöscht. Du musst schon die Inhalte kopieren wobei zu erst das SPFile Object kopiert werden muss.

SPListItem enthält nur die MetaDaten zum SPFile Object

http://msdn.microsoft.com/en-us/library/ms470176.aspx

Ohne Rang
73 Beiträge
stoepsel007 Als Antwort am 20 Apr. 2010 10:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Guten Morgen,
vielen Dank für deine plausible Info. Habe im Eifer des Gefechts die Unterscheidung Value/Referenz gar nicht mehr berücksichtigt.
Grundsätzlich funktioniert es mit deinem Tipp. Einziges Problem: Ich möchte Photos über eine Website Collection hinweg kopieren. Folgendes habe ich versucht:

             string currentMySiteOwner = "administrator";
            SPSite mySite = new SPSite("http://server/personal/" + currentMySiteOwner);
            SPWeb mySitePrivateWeb = mySite.OpenWeb();
            SPFolder myFolder = mySitePrivateWeb.GetFolder("Shared Pictures");
            SPFileCollection myFiles = myFolder.Files;

            int i = 0;
            foreach (SPFile file in myFiles)
            {
                Console.WriteLine("Durchlauf: " +i);
                file.CopyTo("/personal/administrator/test1/" + file.Name, true); //--> klappt
                //file.CopyTo("Shared Pictures/test/" + file.Name, true); --> klappt

                //file.CopyTo("/MySite/Shared Pictures/" + file.Name, true); --> klappt nicht
                //file.CopyTo("
http://server/test1/" +file.Name, true); --> klappt nicht
                i++;
            }

Hast du den entscheidenden Tipp, damit ich meine Items auch über Websitecollections hinweg verschieben kann?
Vielen Dank noch einmal für deine Hilfe!

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 20 Apr. 2010 10:19
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Siehe MSDN zum SPFile.CopyTo: http://msdn.microsoft.com/en-us/library/ms471128.aspx

Remarks


The CopyTo method copies files to another location within the same site. To copy files to a location in another site, use one of the Add methods of the SPFileCollection class.

Ohne Rang
73 Beiträge
stoepsel007 Als Antwort am 20 Apr. 2010 11:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank! Nun klappt es wie ich es mir vorstelle.
Grüße