原因の追求はせず、こうすればなおったというメモ。
もう一度遭遇したら、原因を調べて見るかもしれません。
SharePointアドイン用のWebアプリケーション(ASP.NET MVC)を別のサーバに配置して、CSOM(C#)でSharePointにアクセスするようにしています。
権限があるのにリストアイテムが取れない
CSOMでList.GetItemsを呼んだら、たしかにアイテムが有るはずなのに、空の結果が帰ってきました。
ブラウザでアクセスしたら確実にアイテムがあるし、Userオブジェクトからログインユーザ情報を表示してみたら、想定通りのユーザ。つまり、ちゃんとリストアイテムに権限のあるユーザでアクセスしているにも関わらず、結果が0件になる。
理由は、アドインインストール時のリストアクセスの許可が必要なことでした。
アドインプロジェクトのAppManifest.xmlを編集して、リストの権限を与えることで解決。
ちなみにインストール済みのアドインの権限を後から変えたら、サイトにインストールしたアドインは一端削除して追加し直すまで反映されませんでした。追加し直す際に、どのリストへのアクセスを許可するか管理者が選ぶUIが表示されました。
OpenBinaryDirectでファイルを読めない
アドインからCSOMでドキュメントライブラリのファイルにアクセスしたらエラー。
どうも、OpenBinaryDirectでは認証情報をうまく渡してくれないようです。
Directだからでしょうか。ネットの情報で、ListItem.File.OpenBinaryStreamで開けばいけると合ったので試してみたら成功しました。
SharePointアドインをIEの開発者ツールでデバッグ
SharePointアドインは、iframeで埋め込まれるせいか、開発者ツールでJavaScriptを動かしても、動作しません。
例えば、アドイン内で定義しておいたJavaScriptオブジェクトにアクセスすると未定義と出ます。
こういうときは、コンソールタブのターゲットドロップダウンリスト(右上にある)で、アドインのページを選択すれば大丈夫。
ちなみに、アドインを配置したSharePointページを表示しした状態で開発者ツールを起動しても、ドロップダウンリストに目標のページが出てきません。開発者ツールを先に起動しておいてから、SharePointページを表示するかリロードしましょう。