So-net無料ブログ作成
SharePoint ブログトップ

SharePoint 開発 [SharePoint]

SharePoint の開発に携わるようになって数か月、なんとなく見えてきた現実がある。それは、、、まともな情報が見つからない。

 SharePoint 2013 .NET サーバー API リファレンス

SharePoint 2013 .NET クライアント API リファレンス 

開発を進めるためにはほぼ必須ともいえるリファレンス。残念なことに、ここから辿れる情報はメソッドの名称とサンプルだけ。サンプルがあれば「使い方」はなんとなくわかるけど、「何」をするためのメソッドなのかはは全く解らない。翻訳精度が悪いせいで情報が抜け落ちてしまったのかと考え、英語版の情報を見てみたけど、大差ない模様。

Collaborative Application Markup Language のコア スキーマ

Collaborative Application Markup Language (CAML) Structure

SharePoint に関わろうとすると、どうしても避けられないのがこの CAML。SharePoint の動作原理が解らないと読みこなすのに一苦労する。

その他、非公式(Microsoft 以外)の HP やブログの情報も大して役に立たない。公式サイトで得られる情報以上のものはまず見つからない。基本的には公式 HP と同じで基本的な情報を持ち得ていることが前提となっているようで、初心者がちょっと覗いた程度だと理解できない。まあ、ココも同類だとは思う。

唯一使えそうなのが stackoverflow をはじめとする掲示板(質問サイト)。とは言っても、欲しい情報が 100% 得られるわけではなくヒントがもらえる程度。残念なことに、迷宮入りしてしまう案件も少なくなく、日本語のサイトは使い物にならないことが多い。

そして最後に至ったのは 、「情報が見つからなければ、検証して突き止めるしかない」ということ。幸いにも SharePoint は PowerShell との相性がいいようだ。アセンブリさえ見つけられればある程度は使える .NET Framework の特性が結構生かせる。

Microsoft SharePoint のネームスペースさえ取り込んでしまえば(GUI は使えないけれど) ある程度の機能の検証が可能になる。そのために必要になるのが以下の 2 行。

[void] [Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint");
$sp= New-Object Microsoft.SharePoint.SPSite("https://localhost/");

あとは、ハッカーにでもなったつもりで探っていくのが手っ取り早い。SharePoint Server のインストールしてあるサーバーにログオンして、PowerShell を起動する。そして、上記のコードを実行すれば、(多くの)Server Side の機能を検証することができる。


Provider hosted SharePoint Add-in - 3 [SharePoint]

単純にプロバイダー ホスト型の SharePoint アドインを構築すると独自の書式を持ってしまうため、統一感のない画面になってしまう。今回は、アドインの書式を SharePoint に合わせる方法。

今回の元記事はコレ。 ただし、オリジナルは Web フォームを使用しているので、MVC のプロジェクトで同様のことができるように変更している。

  1.  MicrosoftAjax
    [ツール] - [NuGet パッケージマネージャ] - [ソリューションの NuGet パッケージの管理] を実行し、MicrosoftAjax を Web アプリケーションプロジェクトに追加する。
  2. ChromeLoader
    左記の元記事にある ChromeLoader.js をファイルとして保存し Web アプリケーション プロジェクトに追加する。ここでは、Scripts フォルダに配置しています。
    参考
    こちらに英語版の記事のアーカイブが公開されているようです。当該ファイルをダウンロードして利用できます。
    • 26 行目付近で、appIconUrl の設定を行っているのですが、単純なファイル名("siteicon.png")ではなく絶対パス表記("/siteicon.png")に変更した方がよさそうですね。
  3. _layouts.cshtml
    以下のように書き換えます。ハイライトが修正箇所、取り消し線は削除します。
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=utf-8"/>
    <meta charset="utf-8" />
    <meta name="viewport"
    content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - マイ ASP.NET アプリケーション</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
    <script type="text/javascript" src="~/Scripts/MicrosoftAjax.js"></script>
    <script type="text/javascript" src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script type="text/javascript" src="~/Scripts/ChromeLoader.js"></script>
    </head>
    <body>
    <div id="chrome_ctrl_placeholder"></div>
    :

    :
    </body>
    </html>
  4. アイコン
    Web アプリケーション プロジェクトのルートにサイトのアイコンをsiteicon.png という名称で配置します。
  5. 実行
    20160922-1.png
    サイトのデザインを変更すると、、、適用される。
    20160922-2.png

ASP.NET MVC のサンプルコードにあったスタイルシートを外してしまっているので、書式が崩れてしまっているのだけれど、代わりに SharePoint の書式が適用されている。なお、この段階では Account Settings、Contact us および Help のリンクは機能しませんので注意。

ちなみに、アドイン プロジェクトの AppManifest.xml のクエリ文字列に、&SPHostTitle={HostTitle} を追加してやると、ウィンドウ左上にある Back to Site となっているところがサイト名に変化するようになります。

 


Provider hosted SharePoint Add-in - 2 [SharePoint]

プロバイダーホスト型の SharePoint アドインを、Web パーツとして表示する手順。前回に引き続き、コードの編集は含まれていない。

Visual Studio 2015 を使用して SharePoint アドインを作成する手順は大して難しいものじゃない。ただ、出来上がったアドインを実行させてみると別窓で表示されてしまうので、なんとなくガッカリ感が拭えない。

アドインを Web パーツとして取り込むことで、それらしく見えるようになるので、手順を紹介する。

  1.  Web パーツ
    SharePoint アドインを作成するためのプロジェクトを作成すると、実際には 2 つのプロジェクトからなるソリューションが構築される。1 つは ASP.NET Web アプリケーションで、もう 1 つが Web パーツのアプリケーション。ASP.NET Web アプリケーションのほうは、SharePoint アドインの本体を実装するプロジェクトで、テンプレートに従ってある程度のアプリケーションの体をなすようになっているのに対して、Web パーツのほうは殆ど空の状態(単純にASP.NET Web アプリケーションをキックする設定になっている)のものしか提供されない。今日の手順では、ここに手を入れる。
    ソリューション エクスプローラー上で当該プロジェクトのコンテキスト メニューから [追加] - [新しい項目] と辿り、[新しい項目の追加] ダイアログで、[Visual C# アイテム] - [Web] - [Office/SharePoint] と辿って [クライアント Web パーツ(ホスト Web)] を選択する。
    20160917-01.png
  2. Web パーツ コンテンツ
    [クライアント Web パーツのコンテンツのために、既存の Web ページの URL を選択するか入力します] を選択して、エディットボックスには ~remoteAppUrl/?{StandardTokens} と入力する。
    これが Web パーツ内に表示する ASP.NET Web アプリケーションのリンク情報になる。
    20160917-02.png
  3. AppManifest.xml
    ソリューション エクスプローラー上で AppManifest.xml をダブルクリックして開く。そして、スタートページに サイトの URL を指定する。
    20160917-03.png
  4. 起動
    これで準備はできた。デバッグ実行すれば 3. で指定したサイトが表示されるようになるはず。あとは、当該ページに Web パーツを埋め込んでやれば完了。
    20160917-04.png
    環境によってはセキュリティの設定を変更する必要があるかも。
私の環境特有の症状なのかもしれないけれど、Web パーツの表示に異常なほど時間がかかる(1~2分待つのはザラ)ことがある。実運用できるほどのスペックのサーバー機ではないので、それが影響しているのか!?

Provider hosted SharePoint Add-in - 1 [SharePoint]

Visual Studio 2015 を使用して、プロバイダーホスト型の SharePoint アドインを作成する手順。

アドインは ASP.NET MVC を使用して作成するものとします。今回の手順では、ウィザードが生成するアプリケーションをそのままアドインとして表示するだけで、 処理のカスタマイズは含まない。

環境
オンプレミスに SharePoint Server 2013 を展開していて動作可能な状態になっている。既に開発者向けサイトも構築済み。
Visual Studio 2015 は、SharePoint Server 2013 とは異なるホストにインストールしてあり、Office Developer Tools for Visual Studio 2015 もインストールしてある。

  1. 開始
    [ファイル] - [新規作成] - [プロジェクト] と辿り、プロジェクトを作成する。環境によっては多少異なるかもしれない。
    20160916-01.png
  2. SharePoint アドインを選択
    [テンプレート] - [Visual C#] - [Office/SharePoint] - [Web アドイン] と辿り、目的のテンプレートを選ぶ。
    20160916-02.png 
  3. SharePoint の開発者向けサイトを選択20160916-03.png
  4. オンプレミスの SharePoint 2013 を選択
    20160916-04.png
  5. ASP.NET MVC Web アプリケーションを選択
    ASP.NET Web フォーム アプリケーションでも特に問題はない。
    20160916-05.png
  6. アドインの認証方法
    開発用に自己署名入り証明書(オレオレ証明書)を作成、エクスポートして、2. で作成したソリューションの下にコピーしてきて利用する。パスワード、発行者 ID は適当、、、いい加減。
    20160916-06.png
    ここで、[完了] をクリックすれば作業は終わり。このあと ビルドして、デバッグ実行すれば、作成されたアドインが実行される。
  7. 実行
    初回実行時にはこんなメッセージが表示される。とりあえず、[信頼する] を選択しないと先に進めないから受け入れる。
    20160916-07.png
    ここで表示されるのが SharePoint の開発者向けサイト。ちなみに、ウィンドウ右上に表示されているアカウントを確認しておこう。
  8. 処理中
    20160916-08.png
  9. アドイン
    素の状態のアドインが起動される。ASP.NET Web アプリケーションの見た目によく似ているけれど、よく見ると SharePoint のアカウントが表示されるようにカスタマイズされている。
    20160916-09.png
    アドレスバーを見ると、SharePoint の開発者向けサイトとは異なるサーバー(IIS Express)でホストされているのがわかる。
私の環境では、手順 6 で Windows Azure アクセス制御サービスを選択すると、アドインの起動に失敗する。なにか勘違いしているだけのような気もするけど、証明書を作ることで開発は進められるので、コレでよしとしておくことにする。
SharePoint ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。