Sebastian's WebLog

.NET Architecture & Technologies

SharePoint Upload Document [German]

Auf dem SharePoint Technologies Day bin auf die Problematik der "unvollständigen" Web Services von SharePoint eingangen und habe als mögliche Lösung ein Tunneln des Objektmodells vorgeschlagen.

Besonders das fehlende Dokumenten-Upload führt schnell zu einer Sackgasse, aus der man entweder nur per WebDAV oder Frontpage RPC rauskommt - ausser, ausser man tunnelt das Objektmodell. Die Idee ist es einen eigenen Web Service zu schreiben, der intern das Objektmodell nutz und dessen Funktionen dann nach aussen frei gibt. Dieser Web Service lässt sich dann sogar direkt in SharePoint installieren.

Ein konkretes Beispiel hat Microsoft bereits im April 2004 vorgestellt und genau die fehlende
Dokumenten-Upload Funktionalität implementiert:

[WebMethod]
public string UploadDocument(string fileName, byte[] fileContents, string pathFolder)
{
    if ( fileContents == null)
    {
        return "Null Attachment";
    }
    try
    {
        SPWeb site = SPControl.GetContextWeb(Context);
        SPFolder folder = site.GetFolder(pathFolder);
        string fileUrl = fileName;
        SPFile file = folder.Files.Add(fileUrl, fileContents);
        return file.TimeCreated.ToLongDateString()+ "::" + file.Title;
    }
    catch (System.Exception ee)
    {
        return ee.Message + "::" + ee.Source;
    }
}

Alles weitere, insbesondere die Anleitung wie der Web Service unter SharePoint zu installieren ist, findet sich im MSDN Artikel "Writing Custom Web Services for SharePoint Products and Technologies"
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odc_sp2003_ta/html/odc_writingcustomwebservicesforsppt.asp

Comments

Serge van den Oever said:

I think you still have problems if you need to set properties on a document in a document library that has versioning enabled. First you add the file (version 1), then the meta-data (creates version 2). RPC's seem the only way to do it in one atomic action.
# October 22, 2004 8:40 PM
Leave a Comment

(required) 

(required) 

(optional)

(required)