2012-04-09 20 views
2

iOSのSharepoint用ドキュメントライブラリにドキュメントをアップロードしようとしていますが、成功は限られています。低レベルWebサービスを使用してSharepointライブラリにドキュメントをアップロード

私はこのSOAP要求を使用して、少なくともターゲットドキュメントライブラリに表示されるように、私のドキュメントを取得するためにCopy.CopyIntoItemsを使用しています

<?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を使用するのは主にボブだから、これはそれらを混乱させるだけの役目を果たします。理想的には、ドキュメントのアクションは、ブラウザのドキュメントライブラリを直接アップロードするときと同じように見えます。透明度が高いほど良い。

私がオンラインで見た他の一般的な解決策は、Lists.UpdateListItemsとLists.AddAttachmentの組み合わせを使用することでした。 Lists.UpdateListItemsを正しく動作させて新しいエントリを作成しました。これはGUIDのようなメタデータを返してくれて、少なくともがフォームアップロードされたドキュメントと同じように見えます。しかし、Lists.AddAttachmentは私のためには機能しません。 AddAttachmentこのSOAPリクエストを使用して(GUIDはUpdateListItemsで新しく追加されたアイテムのGUIDです):

<?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

次の試行では、GUIDであるupdateListItemsのows_UniqueIdを使用する代わりに、ows_ID(この場合は単純な数字です)を使用するように設定しています。今回は、私の反応は一見もっと一般的だった "価値は期待された範囲に収まらない" Soooo ...まだ動作しませんが、私はこれが近いと思いますか? – cscott530

答えて

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 Webサイトを直接アップロードするのと似ているため、大丈夫だと判断しました。私はおそらく、私が既存の文書をダウンロード/更新するかどうかを決めるロジックを改めるつもりです。

関連する問題