none
SharePoint REST API を使用した、独自に追加済み列への値設定について RRS feed

  • 質問

  • === 実現したいこと ===
    javaアプリケーションから SharePoint REST API を使用して、
    ドキュメントライブラリ ※1 上のファイルに対し、独自に追加済みの列 ※2 への値の設定を行う。

      ※1 サイトに初期から存在する "Shared Documents" で表される「ドキュメント」のことを指します。

      ※2 「独自に追加済みの列」とは、Office365のWeb画面から次の操作で追加した列を指します。
        - 操作対象のサイトを表示
        - 画面右上の歯車アイコンをクリックし、「サイトの設定」
        - 「{サイトの管理)サイトのライブラリとリスト」をクリック
        - 「"ドキュメント" のカスタマイズ」をクリック
        - 「列の作成」をクリック
        - 情報を入力し、「OK」をクリックすることで作成される列を指します。
            下記の「実行手順」では 'NewProperty01' 列を例として記述しています


    === 前提 ===
    Webアプリケーション(java)側で把握している情報は以下のとおりです。
    ・site_url
    ・ドキュメントライブラリ名(ここでは'ドキュメント'です)
    ・ファイル名


    === 実行手順 ===
    リストおよびリスト アイテム REST API リファレンス
      https://msdn.microsoft.com/JA-JP/library/office/dn531433.aspx
    ファイルおよびフォルダー REST API リファレンス
      https://msdn.microsoft.com/JA-JP/library/office/dn292552.aspx
    REST を使用したリスト アイテムの操作
      https://msdn.microsoft.com/JA-JP/library/office/dn450841.aspx

    上記のドキュメントを参考にし、以下のとおり列への値設定が実現できることを確認しております。

    1. ドキュメントライブラリに対してリストAPIを実行し、ListItemEntityTypeFullName を取得
      ∵アイテムの操作時に利用するため
      https://site_url/_api/web/lists/GetByTitle('ドキュメント')
      → ListItemEntityTypeFullName = SP.Data.Shared_x0020_DocumentsItem

    2. ドキュメントライブラリに対してリストAPIを実行し、リストアイテムのコレクションを取得
      https://site_url/_api/web/lists/GetByTitle('ドキュメント')/items

    3. 2で取得したコレクションから、ファイル名をキーとして操作対象のアイテムを特定する
      https://site_url/_api/web/lists/GetByTitle('ドキュメント')/items('n')/File
      ※n は値を変えつつ実行
      →Webアプリケーション(java)が保持するファイル名と、取得したファイルリソースのNameプロパティが一致する場合、操作対象ファイルと判断する

    4. 2で特定したアイテムに対して、リストアイテムAPIによって列の値を設定する
      https://site_url/_api/web/lists/GetByTitle('ドキュメント')/items('9')
      X-HTTP-Method = MERGE
      Body : 
      { '__metadata': 
        {'type': 'SP.Data.Shared_x0020_DocumentsItem' },
        'NewProperty01': '更新後の値'
      }


    === 質問 ===
    Q1:「実行手順」の方法では、特に3の処理で多量のHTTP通信が発生してしまう恐れがあります。
      「前提」として記述した情報から、ファイルを差し示すURLはわかっている状況において、
      記載の「実行手順」よりHTTP通信を削減する手段があればお教えください。

    Q2:独自に追加済みの列名がシングルバイトの場合、手順4では単純に 'NewProperty01' のような指定が可能でした。
      しかし、追加した列名がマルチバイト(例:'フロー名')の場合、'フロー名' と指定するとエラーとなり、
      'OData__x30d5__x30ed__x30fc__x540d_'のように、ODataで始まる文字列で指定する必要がありました。
      REST API を利用する側はマルチバイト列名のみ把握しているという前提の場合、
      マルチバイト列名からODataで始まる文字列を導き出す方法をお教えください。

    Q3:ListItem リソースにあらかじめ定義されたプロパティ「ParentList」を列名とした列を新規追加してみました。
      この状況で ListItem リソースを取得したところ、あらかじめ定義されたプロパティ「ParentList」の情報は取得されましたが、
      新規追加した列の情報は取得することができませんでした。
      このことから、列名としては下記の「ListItem のプロパティ」は使用すべきではないと考えていますが、
        https://msdn.microsoft.com/JA-JP/library/office/dn531433.aspx#bk_ListItemProperties
      そのほかにもリストには「サイト内の既存の列から追加」の機能により、Office365 上のさまざまな既存列を追加することが可能なため、
      使用不可な列名としてまとまった情報があればお教えください。
      また、今回みつけたのは列名についてですが、同様にファイル名、フォルダ名、リスト名などに関しても使用すべきでない文字列があればお教えください。
    • 移動 星 睦美 2015年9月2日 2:57 SharePoint - 開発とプログラミング から
    2015年9月1日 10:19

すべての返信