2012-04-09 91 views
2

我正嘗試將文檔上傳到iOS的Sharepoint文檔庫,並且成功有限。使用低級Web服務將文檔上傳到Sharepoint庫

我已經使用Copy.CopyIntoItems至少讓我的文檔出現在目標文檔庫,使用這個SOAP請求:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <CopyIntoItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
     <SourceUrl>[server url]</SourceUrl> 
     <DestinationUrls><string>[server url]</string></DestinationUrls> 
     <Fields></Fields> 
     <Stream>[base 64 encoded string]</Stream> 
    </CopyIntoItems> 
    </soap:Body> 
</soap:Envelope> 

這讓我至少有我的文檔出現在我的圖書館。但是,響應沒有給我任何有關它們的元數據(比如GUID等),這使得我很難管理。此外,在瀏覽器中查看項目時,我還有其他操作選項,例如「查看源項目」,以及在刪除額外提示時指出「此項目已從其他位置複製...」。由於它主要是使用SharePoint的Bob,這隻會使它們感到困惑。理想情況下,文檔的操作看起來與直接通過瀏覽器中的文檔庫上傳時相同。透明度越高越好。

我在網上看到的其他常見解決方案是使用Lists.UpdateListItems和Lists.AddAttachment的組合。我已經得到Lists.UpdateListItems正常工作並創建一個新條目(這很好,因爲它使我的元數據像GUID一樣,至少乍一看出現與表單上傳文檔相同)。但是,Lists.AddAttachment不適用於我。使用此SOAP請求的AddAttachment(GUID是新添加的項目的GUID與UpdateListItems):

<?xml version="1.0" ?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soap:Body> 
    <AddAttachment xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
     <listName>Test</listName> 
     <listItemID>{1F214D95-B92B-4E10-8B96-4B04DC6DA9B6}</listItemID> 
     <fileName>screenshot.png</fileName> 
     <attachment>[base 64 string]</attachment> 
    </AddAttachment> 
    </soap:Body> 
</soap:Envelope> 

我得到如下回應:

<?xml version="1.0" ?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soap:Body> 
    <soap:Fault> 
     <faultcode> 
     soap:Server 
     </faultcode> 
     <faultstring> 
     Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown. 
     </faultstring> 
     <detail> 
     <errorstring xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
      Input string was not in a correct format. 
     </errorstring> 
     </detail> 
    </soap:Fault> 
    </soap:Body> 
</soap:Envelope> 

任何想法?我確信我會在某個地方走錯路,我只是不確定在哪裏。謝謝!

+0

下一次嘗試,對於listItemId,而不是使用來自updateListItems(這是一個GUID)的ows_UniqueId,我將它設置爲使用ows_ID(這只是一個簡單的數字,在本例中爲44)。這一次,我的迴應是看似更常見的「價值不在預期範圍內」。 Soooo ...仍然沒有工作,但我認爲這更接近? – cscott530 2012-04-09 17:35:36

回答

1

今天早上明白了。我最終做了最簡單的方法,我真的沒有想到會使用Microsoft API。

NSString *fullPath = @"https://site/library/folders/document.txt"; 
NSURL *url = [NSURL URLWithString: fullPath]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
request.HTTPMethod = @"PUT"; 
request.HTTPBody = [NSData {documentData}]; 

//this is the authentication Cookie acquired in a previous request. 
[request addValue:cookie forHTTPHeaderField:@"Cookie"]; 
[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

關鍵似乎是使用PUT作爲方法。

不幸的是,不幸的是,這個問題遭受了上述有限元數據返回的問題,但由於行爲與通過SharePoint網站直接上傳的行爲非常相似,所以我認爲它沒問題。我可能只是要重新考慮是否下載/更新現有文檔的邏輯。

相關問題