Question

magutan on Tue, 19 Aug 2014 07:23:22


SharePoint2010のイベントレシーバー内で、メッセージボックスを表示することは可能でしょうか?

SharePointの開発をVC#で行っています。

Windowフォームではないので、Messagebox.Showメソッドが使えないといったことは理解しております。
またASP.NETの観点(?)からして、メッセージボックスを表示する方法は簡単ではないことも、ネットで色々と探して知りました。

それを承知で、実現可能の是非を見極めたく、投稿しております。

ネットで調べた中では、「JavaScriptを追加で埋め込み(?)、alertコマンドで実現できる」といった手法を見ましたが、自分の環境で実現することができなかったので、イベントレシーバー内だから実現ができないのか、そもそもできないのか、単純に自分の書き方に問題があるのか…判断に困っているところです。

どなたかご教授いただけないでしょうか?
よろしくお願いいたします。

Sponsored



Replies

yama chan on Tue, 19 Aug 2014 09:03:29


イベントレシーバーの中ではメッセージボックスを出すことは出来ません。
JavScriptで実装するのが正しいのかと思います。

予算が有ればサードパーティ製品を買った方が楽だと思いますよ。
http://www.boostsolutions.jp/formvalidation.html

magutan on Wed, 20 Aug 2014 00:21:31


yama chan さん

返信ありがとうございます。
やはりJavaScriptで行うのですね。

技術的には実現できることがわかっただけでも自分には大きな前進です。

あとは実現方法ですが…JavaScriptを追加で埋め込む(?)といった手法になるのでしょうか。
下記のサイトにある方法を参考にしてみましたが、ClientScriptの使い方が間違っているようで、実現ができませんでした。

■参考にしたサイト
http://stackoverflow.com/questions/19465242/showing-message-box-in-vs-c-sharp-2010

この中にあるソースコードで、
ClientScript.RegisterStartupScript(
    this.GetType(), "myalert", "alert('" + messageString + "');", true);
※「messageString」は引数で渡されるString型データ。

というのがあり、第1引数で指定している「this.GetType()」に誤りがあるようで、エラーとなってしまいます。

他の引数は以下の認識です。誤りはないと思っていますが念のために記載しておきます。
第2引数:追加する内容の識別子。(function名?)
第3引数:実行するJavaScriptソースコード
第4引数:true時は「<script>~</script>」を自動生成して追加。false時は何も行わない。

元の質問の趣旨から少しそれるようですが、イベントレシーバー内(VC#)でJavaScriptを追加して実行することは可能なのでしょうか?

SurferOnWww on Wed, 20 Aug 2014 01:06:40


> 第1引数で指定している「this.GetType()」に誤りがあるようで、エラーとなってしまいます。

エラーメッセージには重要な情報が含まれています。省略しないで、そのままコピペしてアップしてください。


自分は SharePoint の知識はなくイベントレシーバーと言うのが何だか分かりませんが、普通の ASP.NET Web Forms ベースの Web アプリと同様に ClientScriptManager オブジェクトを取得して使えると言う理解で良いのですよね。もし、そのあたりが未確認でしたら確認お願いします。

ClientScript プロパティですが、これは Page.ClientScript の Page を省略した書き方で、これにより ClientScriptManager オブジェクトを取得します。「イベントレシーバー」とかでそういうことができるのかどうか。

Page.ClientScript プロパティ
http://msdn.microsoft.com/ja-jp/library/system.web.ui.page.clientscript(v=vs.100).aspx

ClientScriptManager クラス
http://msdn.microsoft.com/ja-jp/library/system.web.ui.clientscriptmanager(v=vs.100).aspx

もし、ClientScriptManager クラスが使えないとすると、直接ページ内に JavaScript のコードを書けないのでしょうか?

そもそも、どういうシナリオ・目的で alert を出したいのですか?

magutan on Wed, 20 Aug 2014 11:05:44


SurferOnWww さん

返信ありがとうございます。

> そもそも、どういうシナリオ・目的で alert を出したいのですか?

SharePointのイベントレシーバーを利用し、SharePointでファイルを管理しているドキュメントライブラリにファイルをアップロードした時、このレシーバーでファイルが追加されたイベントでデータベースを参照して値を取得する処理を行います。
このデータベースの参照に失敗した時、エラーメッセージをメッセージボックスのようなダイアログ形式で表示することが目的です。
SharePointの画面上に表示するのではなく、一時的なダイアログで行うことを仕様としています。


さて、質問した内容ですが自己解決しましたので、備忘録を兼ねてこの場に残しておきます。
JavaScriptを使用する内容ではありませんが、メッセージボックスのようにエラーメッセージを一時的なダイアログ形式で表示することができました。
(ただしイベントレシーバー限定と思われます)

■ソースコード
properties.Status = SPEventReceiverStatus.CancelWithError;  // エラーを発生させる
properties.ErrorMessage = "エラーが発生しました。管理者へ連絡してください。"; // エラーメッセージの内容
properties.Cancel = true;      // イベントレシーバーの発生した処理をキャンセル(必要に応じて)

調べてくださった方々、お騒がせしました。
もっと情報収集すべきでした。