2009-06-12 4 views
4

Ich versuche, Dokumentdateien mit der CopyIntoItems-Methode des SharePoint Copy-Webdiensts in eine Dokumentbibliothek in SharePoint zu laden.Wie verwenden Sie die CopyIntoItems-Methode des SharePoint Copy-Webdiensts?

Der folgende Code wird ausgeführt und gibt 0 (Erfolg) zurück. Außerdem gibt das CopyResult [] -Array 1 Wert mit einem "Success" -Ergebnis zurück. Ich kann das Dokument jedoch nirgendwo in der Bibliothek finden.

Ich habe zwei Fragen:

  1. jemand etwas falsch mit meinem Code sehen oder Änderungen vorschlagen?
  2. Kann jemand vorschlagen, wie ich dies auf der Serverseite debuggen könnte. Ich habe keine enorme Erfahrung mit SharePoint. Wenn ich durch Protokollierung oder eine andere Methode auf der Serverseite verfolgen kann, was passiert, kann es mir helfen, herauszufinden, was vor sich geht.

Codebeispiel:

string[] destinationUrls = { Uri.EscapeDataString("https://someaddress.com/Reports/Temp") }; 

SPCopyWebService.FieldInformation i1 = new SPCopyWebService.FieldInformation { DisplayName = "Name", InternalName = "Name", Type = SPListTransferSpike1.SPCopyWebService.FieldType.Text, Value = "Test1Name" }; 
SPCopyWebService.FieldInformation i2 = new SPCopyWebService.FieldInformation { DisplayName = "Title", InternalName = "Title", Type = SPListTransferSpike1.SPCopyWebService.FieldType.Text, Value = "Test1Title" }; 

SPCopyWebService.FieldInformation[] info = { i1, i2 }; 

SPCopyWebService.CopyResult[] result; 

byte[] data = File.ReadAllBytes("C:\\SomePath\\Test1Data.txt"); 

uint ret = SPCopyNew.CopyIntoItems("", destinationUrls, info, data, out result); 

bearbeiten, die Dinge bekam Arbeit:

ich durch den Zusatz "http://null" zum SourceURL Feld meines Code arbeiten hätte. Nat's Antwort würde wahrscheinlich aus diesem Grund funktionieren. Hier ist die Zeile, die ich geändert habe, damit es funktioniert.

// Change 
uint ret = SPCopyNew.CopyIntoItems("http://null", destinationUrls, info, data, out result); 
+1

Sollten Sie nicht Uri.EscapeUriString anstelle von Uri.EscapeDataString verwenden? –

+0

Uri.EscapeUriString funktionierte besser für mich. –

Antwort

6

Ich denke, das Problem möglicherweise in versuchen, die "Name" -Eigenschaft mithilfe des Webdienstes festlegen. Ich habe etwas schief gemacht. der „Name“ Da ist der Name des Dokuments, können Sie einen gewissen Erfolg haben mit

string targetDocName = "Test1Name.txt"; 
    string destinationUrl = Uri.EscapeDataString("https://someaddress.com/Reports/Temp/" + targetDocName); 
    string[] destinationUrls = { destinationUrl }; 

    SPCopyWebService.FieldInformation i1 = new SPCopyWebService.FieldInformation { DisplayName = "Title", InternalName = "Title", Type = SPListTransferSpike1.SPCopyWebService.FieldType.Text, Value = "Test1Title" }; 
    SPCopyWebService.FieldInformation[] info = { i1}; 
    SPCopyWebService.CopyResult[] result; 
    byte[] data = File.ReadAllBytes("C:\\SomePath\\Test1Data.txt"); 
    uint ret = SPCopyNew.CopyIntoItems(destinationUrl, destinationUrls, info, data, out result); 

Hinweis: Ich habe das „Ziel“ als „Quelle“ Eigenschaft verwendet. Don't quite know why, but it does the trick.

+0

Die Eingabe einer Quell-URL hat den Trick gemacht. Ich weiß nicht, warum keine Fehlerinformationen zurückgegeben werden, wenn die Quell-URL nicht enthalten ist. –

1

Ich habe nicht sehr gut verstehen, was Sie tun zu binden, aber wenn Sie versuchen, eine Datei aus einem lokalen Verzeichnis in eine Sharepoint-Bibliothek hochladen, ich würde Sie ein Webclient erstellen vorschlagen und Verwendung uploadata:

Beispiel (VB.NET):

dim webclient as Webclient 
webClient.UploadData("http://srvasddress/library/filenameexample.doc", "PUT", filebytes) 

Dann müssen Sie nur noch in der Datei überprüfen Sie die Listen Web-Service, so etwas wie:

listService.CheckInFile("http://srvasddress/library/filenameexample.doc", "description", "1") 

Ich hoffe, es war hilfreich.

EDIT: Vergessen Sie nicht, Anmeldeinformationen für den Web-Client einzustellen usw.

EDIT 2: metada Felder Update mit dieser:

listService.UpdateListItems("Name of the Library, batchquery) 

Sie Informationen hier auf den Aufbau von Batch-Abfrage in finden : link

+0

+1 - Das ist ein guter Ansatz. Ich möchte jedoch die Metadaten, die mit der Datei verknüpft sind, gleichzeitig festlegen. –

+0

Die Metada-Daten können mit dem Code aktualisiert werden, den ich gerade hinzugefügt habe. – v3ga

1

Die Quellurl wird in Sharepoint verwendet. Es ist ein Link zurück zum "Quelldokument". Wenn Sie sich in Ihrer Dokumentbibliothek befinden, bewegen Sie den Mauszeiger über das Objekt, und auf der rechten Seite erscheint ein nach unten weisendes Dreieck. Klicken Sie darauf, um ein Menü aufzurufen. Klicken Sie auf die Option "Eigenschaften anzeigen".Auf dieser Seite sehen Sie Folgendes: "Dieser Artikel ist eine Kopie von http://null (Gehe zu Quelltext | Unlink)"

Da wir die Kopierfunktion verwenden, verfolgt Sharepoint den "Quelltext" als Teil des Dokumentverwaltungsfunktion

Verwandte Themen