SharePoint 2010 ItemAdding イベント レシーバーでのエラー処理

こんばんは。奥田です。
今日は SharePoint 2010 でイベント レシーバーを開発する際の不思議な現象についてです。
昨日今日と実施させていただいた [Visual Studio 2010 による SharePoint 2010 開発] セミナーで、お客様からいただいた質問なのですが。。

ItemAdding イベントレシーバーを開発し、次のようなコードを書いた場合に、うまく動作してくれない現象についてです。

public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
if(なんかの処理){
properties.Cancel = true;
properties.ErrorMessage = “エラー
“;
   
}
}

if 文に入り、イベントをキャンセルし、 「エラー」 と表示してほしいところなのですが、次のようなエラーとなります。
ererror1

コードを次のように変更し、カスタムのエラーページにリダイレクトさせると問題なく動作するのですが。。

public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
if(なんかの処理){
    properties.Status = SPEventReceiverStatus.CancelWithRedirectUrl;
    properties.RedirectUrl = “/_layouts/CustomErrorPage/ErrorPage.aspx”;
}
}
ererror3

ちなみに同じロジックを Deleting とか他のメソッドで実行すると、問題なく動作。

properties.Cancel = true;
properties.ErrorMessage = “エラー“;

どうして ItemAdding だけがこうなるのかよくわからないのですが。。

いろいろ試した結果、web.config の <SharePoint><SafeMode> 要素の CallStack 属性を “false” に変更すると、ItemAdding 時の既定のエラーページを使ったエラー表示も動作しました。。
理由がわからないのが気持ちわるいですが、、ItemAdding のエラー処理は Custom Error Page を作ったほうがよさそうですね。

奥田理恵

SharePoint 2010 ItemAdding イベント レシーバーでのエラー処理」への1件のフィードバック

  1. こんにちは。
    まさにその講習を受講させていただいた黒宮です。
    いつもお世話になっております。

    あの時は色々と調べても分からず、
    「分かったらブログに載せます」と仰っていたのを、ふと思い出して見させていただいたら、
    本当に載っていて(失礼!?w)、驚きました。

    結論としては、
    「根本原因は分からないけど、対処法はある」という
    SharePointにありがち(汗)な感じな現象なのですね。
    調査いただき、ありがとうございました。

    やっぱり、SharePoint開発は一筋縄ではいかないですね…。
    なので、やっぱり奥田さんのようなプロフェッショナルな方のご支援が必須ですね!
    今後ともよろしくお願い致します。

    返信

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中