2

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

私がオンラインで見た他の一般的な解決策は、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>

何か案は?私はどこかで間違った道を進んでいると確信しています、私はどこにいるのかわかりません。ありがとう!

4

1 に答える 1

1

今朝はうまくいきました。私は最終的に最も単純なアプローチを実行しましたが、これは正直なところ、MicrosoftAPIで機能するとは予想もしていませんでした。

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サイトから直接アップロードするのと非常に似ているため、問題ないと判断しました。おそらく、既存のドキュメントをダウンロード/更新するかどうかを決定するロジックを作り直すつもりです。

于 2012-04-10T12:47:14.717 に答える