2011-01-07 5 views
1

Ich versuche, ein C# -Programm mit einer Sharepoint Web Service-Referenz zu erstellen, die jeden Tag Benutzereingaben akzeptiert und eine Liste aktualisiert. Die Daten sind potentiell jeden Tag anders, daher brauche ich eine zuverlässige Möglichkeit, jedes Element in der Liste zu löschen, bevor die Update-Anweisung für die neuen Elemente gesendet wird.Kann ich eine Sharepoint-Liste löschen und sie dann mit derselben GUID erneut erstellen?

Die einzige Möglichkeit, einen Eintrag zu löschen, besteht darin, auf seine Artikel-ID-Nummer Bezug zu nehmen. Ich habe versucht, nur eine Schleife zu erstellen, die eine Löschanweisung erzeugt, die ID 1-50 deckt, aber da die Liste immer inkrementiert, funktioniert das nur, bis 50 Elemente durchlaufen. In meinem Googling habe ich festgestellt, dass die einzige Möglichkeit, eine Liste auf ID 1 zurückzusetzen, darin besteht, sie zu löschen und neu zu erstellen. Leider, wenn ich das tue, wird es eine andere GUID haben und mein Programm wird es nicht mehr beim nächsten Mal aufrufen können.

Gibt es eine Lösung, die ich hier nicht sehe?

+0

Verstehe ich richtig, dass Sie eine Möglichkeit zum Löschen aller Elemente aus einer SharePoint-Liste ** benötigen? –

+0

Korrigieren. Ich benutze die Webdienste. Wenn Sie also keine gute Möglichkeit haben, XML von einer GetListItems() zu parsen, wird es von einer foreach nicht abgeschnitten. – MyOtherCarIsEpona

+0

Denken Sie darüber nach, alle Elemente in der Liste zu löschen, weil Sie nicht die Mühe machen möchten, herauszufinden, ob sich die einzelnen Elemente geändert haben? – Tundey

Antwort

3

Sie können eine Liste mit einer angegebenen GUID nicht neu erstellen.

Aber von Ihrem Kommentar sind Sie auf einer Tangente hier, wenn der einzige Grund, den Sie brauchen, um die ID auf 1 zurückzusetzen, ist, mit Ihrer leeren Liste Operation auszuhelfen.

Die XML zurückgegeben von GetListItems() ist im Format

<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" 
    xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" 
    xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" 
    xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
    <rs:data ItemCount="4"> 
     <z:row ows_Number_Field="6555.00000000000" 
     ows_Created="2003-06-18T03:41:09Z" 
     ows_ID="100" ows_owshiddenversion="3" /> 
     <z:row ows_Number_Field="78905456.0000000" 
     ows_Created="2003-06-18T17:15:58Z" 
     ows_ID="101" ows_owshiddenversion="2" /> 
     ... 
    </rs:data> 
</listitems> 

So zu 'zuverlässig' Schleife, die durch so etwas wie (nicht getestet, aber Sie bekommen die Idee)

// Call GetListItems and setup XmlDocument with results 
System.Xml.XmlNode nodeListItems = 
    listService.GetListItems 
    (listName, viewName,query,viewFields,rowLimit,queryOptions,null); 

/*Loop through each node in the XML response and display each item.*/ 
foreach (System.Xml.XmlNode listItem in nodeListItems) 
{ 
    Console.WriteLine("ID:{0}",listItem.getAttribute("ows_ID")); 
} 

Sehen Sie diese MSDN article für mehr Inspiration

Weiter - um alle diese Datensätze mit einem Anruf zu löschen, können Sie eine Stapelaktualisierung durchführen, indem Sie senden indem Sie ein XML-Fragment in der obigen for-Schleife erstellen.

<Batch> 
    <Method ID='1' Cmd='Delete'><Field Name='ID'>100</Field></Method> 
    <Method ID='2' Cmd='Delete'><Field Name='ID'>101</Field></Method> 
</Batch> 

Hinweise

  • das "Method ID = 'XXX' ..." haben sequenzielle +1 für jedes Batch-Verfahren sein.
  • Die "Feldname = 'ID'100 ..." entspricht die IDs der Liste, die Sie in der for-Schleife oben gefunden haben.
+0

Ich bin noch ziemlich neu in C# und wusste nicht, wie man die XML von GetListItems() analysieren. Ich wusste nicht, dass getAttribute es für mich tun könnte. Ich werde es versuchen und melden - danke! – MyOtherCarIsEpona

Verwandte Themen