Copyright© 2017  Aiprovide Corporation all Right Reserved.

  • Aiprovide Coroporation
  • Aiprovide Corporation

Remote Event Receiver の望ましい実装 No.1[オンライン]

2017/05/07

この記事は、リモートイベントレシーバー(Remote Event Receiver)の概要と、Microsoft Azure上に実装する方法について記載しています。

 「Provider Hosted App」を使用すると、リモートイベントレシーバーを実装することが可能となります。リモートイベントレシーバーを使用すれば、SharePoint Onlineのリストやドキュメントライブラリで、アイテムやドキュメントの追加/変更/削除等のイベントを捉え、それにより起動するプログラムの実装が可能となります。これにより、業務アプリケーションで実現可能な機能の範囲が広がります。

 

1.リモートイベントレシーバーの動作

 

 「Provider Hosted App」にてリモートイベントレシーバーを実装する際、イベントにより起動されるプログラムは、外部Webサーバー上のWeb Serviceとなります。

 

 動作を説明しますと、

  1. ローカルPCのブラウザ上で、SharePoint Online上のリストアイテムの追加/更新/削除を行う。

  2. SharePoint Online サーバーは、リストアイテムの追加/更新/削除のタイミングで、予め登録されている外部WebサーバーのWeb Serviceを呼び出す。

  3. 呼び出されたWeb Serviceのプログラムが処理を実行する。

となります。

この呼び出されるWeb Serviceは、「Elements.xml」に以下の様に登録されます。

 ここで、<Url></Url>で示されているのが、イベントにて呼び出すWeb Serviceのアドレスとなります。

 

ちなみに、同様なエベントレシーバーをオンプレミスで実装した場合の、「Elements.xml」は、以下の様になります。

 

オンプレミスの場合は、「SPItemEventReceiver」クラスを継承して作成したイベントレシーバークラスを登録しますが、リモートイベントレシーバーの場合は、その代わりに<Url></Url>タグ内にWeb Serviceのアドレスを登録します。

 

 

2.リモートイベントレシーバーのAzure上への実装

 

 外部Webサーバーとして、「Microsoft Azure」上に実装したWebアプリケーションを使用し、その中にWeb Serviceを実装する方法を記載します。


「Provider Hosted App」のWebアプリケーションをAzure上に実装する方法については、

Provide Hosted App + Azure No.2[オンライン]

を参照してください。

 

①「Visual Studio 2015」で、「Provider Hosted App」ソリューションを開きます。

 

 

②「Provider Hosted App」として作成したプロジェクトを選択し、右クリックにてショートカットメニューを表示し、[追加]ー[新しい項目]をクリックします。

 

 

③「新しい項目の追加」ダイアログが表示されるので、左側のメニューで[Office/SharePoint]を選択し、[リモート イベント レシーバー]を選択します。

リモートイベントレシーバークラスにつける名前を、[名前]欄に入力し、[追加]ボタンを押します。

 

④「イベントレシーバー設定の選択」ダイアログが表示されます。

 
[使用するイベントレシーバーの種類]でイベントの発生元をドロップダウンリストから選択します。「リスト項目イベント」を選択するとアイテムの追加/変更/削除等におけるイベントを指定できます。

[イベントソースとなる項目]でリスト/ドキュメントライブラリの種類をドロップダウンリストから選択します。

 

[次のイベントを処理]でイベントを指定します。「項目が追加されました」「項目が更新されました」「項目が削除されました」がそれぞれアイテムの追加/変更/削除に対応します。

設定が完了したら、[完了]ボタンを押します。

 

 

④Visual Studio 2015にて自動的にWebサービスクラスが追加されます。

 

「Elements.xml」も自動的に追加され、Web Serviceが登録されます。

 

 

 

3.イベントの処理

 

 イベントが発生した際に、起動される個々の処理は、Web Serviceのメソッド内にプログラムを記述します。

オンプレミスの場合は、アイテムの追加/変更/削除のイベントに対して、それぞれ、「SPItemEventReceiver」クラスの「ItemAdded/ItemUpdated/ItemDeleted」のメソッドをオーバーライドし、このメソッド内に処理を記述しますが、リモートイベントレシーバーの場合は、これとは異なり、追加/変更/削除のイベントの種別に関わらず、一律に「ProcessOneWayEvent」メソッドが呼び出され、そのメソッド内で、メソッドの引数「properties」の「EventType」を判定することで、イベントの種別を判別します。

 

この様に、リモートイベントレシーバーを作成し、

Provide Hosted App + Azure No.2[オンライン]

で記載した様に、

WebアプリケーションをAzure上に公開し、SharePoint Online上にアドイン(アプリ)を登録すれば、リモートイベントレシーバーの実装は完了しています。

 

これで、SharePoint Online上のリストを追加/変更/削除すれば、それに対応したイベントが発生し、Web Serviceが呼び出されると考えますが、
実際は、Web Serviceが呼び出されることはありません。

 

なぜそうなるのかについては、
Remote Event Receiver の望ましい実装 No.2[オンライン]

に記載します。

 

Share on Facebook
Share on Twitter
Please reload

RECENT POST
Please reload