locked
SharePointの通知機能について RRS feed

  • 質問

  • お世話になります。

    現在Office365のSharePointOnline2013向けのSharePointホスト型アドインを作成中です。
    一定のタイミングで特定のユーザにアイテムへのリンクが含まれている通知を作成したいのですが、
    調べても情報が見つからず、手が止まってしまっている状態です。

    通知を作成するAPIやスクリプトはあるのでしょうか?
    そもそも技術的に不可能な領域であればその旨ご教示下さい。

    以上、何卒よろしくお願い致します。



    • 編集済み sttks 2016年5月9日 4:31 【追記】SharePoint→Office365のSharePoint
    2016年5月9日 0:38

回答

  • 横から失礼致します。

    > 一定のタイミングで特定のユーザにアイテムへのリンクが含まれている通知を作成したいのですが、

    一定のタイミングが定期的なタイミングの場合においては、リモートタイマージョブという機能が使えるかと思います。(別途、Asure等の別なサーバーが必要となってしまいますが。。)

    参考:https://msdn.microsoft.com/ja-jp/library/office/mt204004.aspx

    > 通知を作成したい

    また、ご質問の意図としては、APIを通してSharePointの通知機能を利用したいという事の方がメインでしょうか。

    そうであれば、ここを見る限り、SharePoint Onlineにおける通知に関するAPIは使えないようです。

    https://social.msdn.microsoft.com/Forums/office/en-US/651ac0e1-cd8a-46d1-affa-a14c8264fdd4/create-alerts-using-csomrest-in-o365?forum=sharepointdevelopment

    APIが使えたとしても、通知機能のAPIとしては、既存通知のプロパティを変更できるぐらいしか用意されていなかったように記憶しており、要件のような実装は難しいような気がします。(自前でメールを送信した方がてっとり早いような気がします)

    • 回答としてマーク sttks 2016年5月10日 4:52
    2016年5月9日 5:06
  • その内容であればワークフローでもできそうな気がします。プロバイダーホスト型であればリモートイベントレシーバーも使えるのですが…
    • 回答としてマーク sttks 2016年5月10日 4:52
    2016年5月9日 6:33

すべての返信

  • > そもそも技術的に不可能な領域であればその旨ご教示下さい。

    SharePoint と言っても、クライアント(ブラウザ)と Web サーバーとの間は普通に HTTP 通信になると思いますが、その場合基本的にクライアントの要求に対して Web サーバーが応答を返すと言うことになるので、一方的に Web サーバーから通知を送ることはできないはずです。

    そんなことは百も承知で、SharePoint の独自拡張部分で何とかする方法はないかという質問でしたら失礼しました。

    2016年5月9日 2:45
  • SurferOnWww様

    ご回答有り難うございます。

    >SharePoint と言っても、クライアント(ブラウザ)と Web サーバーとの間は普通に HTTP 通信になると思いますが、その場合基本的にクライアントの要求に対して Web サーバーが応答を返すと言うことになるので、一方的に Web サーバーから通知を送ることはできないはずです。

    クライアント側から「○○さんにこの内容の通知を出しておいて下さい」という感じのリクエストをWebサーバーに投げてクライアント側に表示するというイメージだったのですがそれすらも不可能ということでしょうか。
    このリクエスト自体も恐らくSurferOnWww様の仰る独自拡張機能に属するものかもしれません。

    2016年5月9日 4:30
  • 横から失礼致します。

    > 一定のタイミングで特定のユーザにアイテムへのリンクが含まれている通知を作成したいのですが、

    一定のタイミングが定期的なタイミングの場合においては、リモートタイマージョブという機能が使えるかと思います。(別途、Asure等の別なサーバーが必要となってしまいますが。。)

    参考:https://msdn.microsoft.com/ja-jp/library/office/mt204004.aspx

    > 通知を作成したい

    また、ご質問の意図としては、APIを通してSharePointの通知機能を利用したいという事の方がメインでしょうか。

    そうであれば、ここを見る限り、SharePoint Onlineにおける通知に関するAPIは使えないようです。

    https://social.msdn.microsoft.com/Forums/office/en-US/651ac0e1-cd8a-46d1-affa-a14c8264fdd4/create-alerts-using-csomrest-in-o365?forum=sharepointdevelopment

    APIが使えたとしても、通知機能のAPIとしては、既存通知のプロパティを変更できるぐらいしか用意されていなかったように記憶しており、要件のような実装は難しいような気がします。(自前でメールを送信した方がてっとり早いような気がします)

    • 回答としてマーク sttks 2016年5月10日 4:52
    2016年5月9日 5:06
  • > クライアント側から「○○さんにこの内容の通知を出しておいて下さい」という感じのリクエストを
    > Webサーバーに投げてクライアント側に表示するというイメージだったのですがそれすらも不可能と
    > いうことでしょうか。

    その「リクエストを Webサーバーに投げ」れば、Web サーバから応答が返って来るはずなので、その応答に「通知」を含めて、クライアントのブラウザに「通知」を表示すると言うことは可能ですが、やりたいことはそうではないですよね?

    最初の質問にあった「一定のタイミング」というのは (1) 「通知」の内容に変化があったタイミング、もしくは (2) 定期的にある一定の間隔でブラウザに「通知」を表示する、ということだと想像しています。

    (1) は前に書いた以下の理由より無理だと思います。(SharePoint 独自の拡張機能にそういうのがあれば分かりませんが)

    > クライアント(ブラウザ)と Web サーバーとの間は普通に HTTP 通信になると思いますが、その場合基本的
    > にクライアントの要求に対して Web サーバーが応答を返すと言うことになるので、一方的に Web サーバーか
    > ら通知を送ることはできないはずです。

    (2) は、「リクエストを Webサーバーに投げ」て Web サーバからから返ってくるページの中に JavaScript のタイマーなどを実装し、定期的に Web サーバーに非同期要求を出して、返ってきた「通知」をそのページに表示するということは技術的には可能です。(それが質問者さんの目的に合うのか、SharePoint 独自の拡張機能にそういうものが含まれるのかは分かりませんが)

    2016年5月9日 5:31
  • たけさと 様

    ご回答ありがとうございます。


    >また、ご質問の意図としては、APIを通してSharePointの通知機能を利用したいという事の方がメインでしょうか。
    具体的に申しますと、アドイン内リストにアイテムが登録されたタイミングで、アイテムのユーザ列に入力されているユーザに向けての通知を自動で発信することが目的です。
    APIを使えないのであれば通知による発信は不可能そうですね。。。

    メールを自動送信したい場合は下記のAPIを使用することで実現可能でしょうか?
    https://msdn.microsoft.com/ja-jp/library/office/mail-rest-operations.aspx?f=255&MSPPError=-2147217396

    2016年5月9日 5:52
  • SurferOnWww 様

    「一定のタイミング」ではわかりにくかったですね、申し訳ございません。
    アドイン内リストにアイテムが登録されたタイミングで、アイテムのユーザ列に入力されているユーザに向けての通知を自動で発信することが目的です。

    お話を聞いている限りではSharePoint独自の拡張機能を使う他手段は無さそうですね。。。

    2016年5月9日 6:12
  • その内容であればワークフローでもできそうな気がします。プロバイダーホスト型であればリモートイベントレシーバーも使えるのですが…
    • 回答としてマーク sttks 2016年5月10日 4:52
    2016年5月9日 6:33
  • > アドイン内リストにアイテムが登録されたタイミングで、アイテムのユーザ列に
    > 入力されているユーザに向けての通知を自動で発信することが目的です。

    「アドイン内リストにアイテムが登録」というのはクライアントがブラウザを使って Web サーバーにリクエストをかけて行うのですよね?

    で、リクエストをかけたユーザーは問題ないが(「通知」を応答に含めて返す等の手段が取れるので)、それ以外の「アイテムのユーザ列に入力されているユーザ」への「通知」をどうするかが問題なのだと理解しました。

    とすると、一方的に Web サーバーから通知を送ることはできない HTTP 通信では無理で、たけさとさんが言われるように「アドイン内リストにアイテムが登録」されたタイミングで Web サーバーからメールを自動送信するのが現実的な手段だと思います。

    ただ、全ての「アイテムのユーザ列に入力されているユーザ」のメールアドレスを取得できるのか、メールサーバーをどうするのか、メール送信機能の Web アプリへの実装をどうするかという問題が Office365 の SharePointOnline2013 で解決できるのかどうかは分かりませんが。

    2016年5月9日 6:50
  • Takashi Shinohara 様

    ご回答ありがとうございます。

    >その内容であればワークフローでもできそうな気がします。
    「その内容」は通知ではなくメールの方ですよね?
    確かアドイン内にワークフローを含ませることが出来るんですよね。

    ワークフローを使用すれば無理にAPIを使わずともメールの送信は可能ですね。ありがとうございます。

    2016年5月9日 7:35
  • SurferOnWww 様

    >リクエストをかけたユーザーは問題ないが(「通知」を応答に含めて返す等の手段が取れるので)、それ以外の「アイテムのユーザ列に入力されているユーザ」への「通知」をどうするかが問題なのだと理解しました。
    「ユーザ列に入力されているユーザ」の情報をメールアドレスを含めて取得する方法も把握しており、メール送信についてもOffice365のAPIで可能なはずです。
    ただ、通知を行う為のリクエスト方法が見つからず困っていた次第です。

    Takashi Shinohara 様が仰る、SharePointのワークフローを使用すれば上記2点を特に意識せず実装も可能な展望です。

    2016年5月9日 7:47
  • > メールを自動送信したい場合は下記のAPIを使用することで実現可能でしょうか?

    > https://msdn.microsoft.com/ja-jp/library/office/mail-rest-operations.aspx?f=255&MSPPError=-2147217396

    SharePointの通知を利用するというよりは、SharePointの機能を利用してメールを送信したい、という理解で宜しいでしょうか。

    まずは、Takashi Shinoharaさんが書かれた通り、ワークフローのアクティビティでメール送信がありますので、それを利用できるかどうか確認して頂くのがよいかと思います。

    それで難しい場合、次に、SharePointでメールを送付する場合の定石として、SPUtilityクラスにsendemailメソッドがあるので、これを利用できるかを確認するのがよいでしょう。

    Javascriptから呼び出すのであれば、以下にサンプルコードが書かれているので、参考にしてみて下さい。

    https://social.msdn.microsoft.com/Forums/en-US/19df75c4-e708-4ea2-8c92-93b7c9e84817/how-to-send-email-by-javascript-in-sharepoint-online-2013?forum=sharepointdevelopment

    但し、サンドボックスソリューションから、直接sendemailメソッドは呼び出せないので、Takashi Shinoharaさんが書かれたリモートイベントレシーバに変更する事も考慮に入れる必要があるかもしれません。

    (リモートイベントレシーバ内では、sendemailが使える筈。。)

    それでもだめな場合に、提示頂いたAPIや、EWSAPIを呼ぶことを考えた方が良いかと思います。

    2016年5月10日 4:04
  • たけさと 様

    出来れば通知で表示、不可能であればメール送信での実装を意図しておりました。
    Javascriptのサンプルページありがとうございます。参考にさせて頂きます。

    Takashi Shinohara 様にご提案頂いたワークフローを開発環境にて作成し、
    意図した内容でメール送信を行えた事をご報告致します。
    また、メールが送信された事に対する通知がSharePoint内で通知される事を確認出来たので、
    この方法で機能を実装したいと思います。

    蛇足ですが、SharePointホスト型アプリではリモートイベントレシーバは使用不可の認識でした。

    なんとか要件を満たすことが出来たため、これにてクローズとさせて頂きます。
    SurferOnWww 様、たけさと 様、Takashi Shinohara 様、ご回答頂きありがとうございました。

    2016年5月10日 4:52