イベントのトラブルシューティング

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

この記事の内容
ドキュメント ライブラリとコンテンツ タイプ
リストとコンテンツ タイプ
ドキュメント ライブラリ
Web

イベントのプログラミングでは、イベント ハンドラーを実装する状況によっては、例外的動作が発生する場合があります。ここでは、コードを記述する際に発生する可能性のある、特定の状況に関連するイベントの動作について説明します。

イベントの動作は、次の 4 つのカテゴリに分かれています。

  • ドキュメント ライブラリとコンテンツ タイプ

  • リストとコンテンツ タイプ

  • ドキュメント ライブラリ

  • Web

ドキュメント ライブラリとコンテンツ タイプ

問題

説明

問題 1

ドキュメント ライブラリに特定のコンテンツ タイプの .aspx ページを作成され、ページには ItemAdding イベントと ItemAdded イベントが関連付けられているのに、これらのイベントが発生しません。

解決法: ファイルがドキュメント ライブラリのアップロードされるとき、そのファイルには既定のコンテンツ タイプが割り当てられます。ただし、ファイルをアップロードし、そのファイルにコンテンツ タイプ、たとえばコンテンツ タイプ "A" を割り当てると、ファイルがドキュメント ライブラリに追加された後に、ファイルのコンテンツ タイプを既定値からコンテンツ タイプ "A" に変更することになります。

このシナリオで、コンテンツ タイプ "A" に ItemAdding/ItemAdded および ItemUpdating/ItemUpdated へのイベント バインドがある場合、新しいコンテンツ タイプ "A" をファイルに割り当てたときに、ItemAdding/ItemAdded イベントは発生しません。ただし、ItemUpdating/ItemUpdated イベントは発生します。

ドキュメントのアップロード機能ではなく新しいドキュメント機能によってファイルがコンテンツ タイプから直接作成されている場合、ItemAdding/ItemAdded イベントは、ItemUpdating イベントと同様に適切に発生します。

問題 2

あるコンテンツ タイプにバインドされた ItemAdding イベントが、そのコンテンツ タイプではないドキュメントがアップロードされたときでも発生します。ドキュメント ライブラリにアップロードされたすべてのドキュメントが、まず、既定のドキュメント タイプに割り当てられることに注意してください。このため、ドキュメントをドキュメント ライブラリに追加すると、ItemAdding および ItemAdded イベントが既定のコンテンツ タイプにバインドされている場合は、これらのイベントが必ず発生します。

解決法: ドキュメントのコンテンツ タイプは更新フェーズの間に変更でき、コンテンツ タイプ識別子 (ID) はそれに従って調節されます。

問題 3

リスト フォームで項目を削除する要求に、関連するコンテンツ タイプ ID が用意されていません。このため、ItemDeleting イベントおよび ItemDeleted イベントは、指定されたコンテンツ タイプに対してのみ登録されている場合であっても、特定のコンテンツ タイプの項目に対してだけではなく、すべての項目に対して発生します。

解決法: 設計上、要求が特定のコンテンツ タイプにバインドされていない場合、SharePoint Foundation では、すべてのリスト項目に対してイベントが発生します。これにより、イベント レシーバーがリスト内のすべての項目に対して登録されているときは、すべての項目に対してイベントが発生できます。

この動作は、Delete イベントが関係するポリシーに影響を与えます。削除に関係するポリシーを実装し、そのポリシーをあるコンテンツ タイプに適用した後、そのコンテンツ タイプをリストにバインドした場合、そのポリシーは、ポリシーが適用されているコンテンツ タイプの項目だけではなく、リスト内のすべての項目に適用されます。

リストとコンテンツ タイプ

問題

説明

問題 1

リストにバインドされているあるコンテンツ タイプに対して ItemUpdating を登録すると、そのコンテンツ タイプではない項目がオブジェクト モデルをとおして更新された場合であっても、イベントが発生します。SharePoint Foundation では、コンテンツ タイプ ID として、項目のコンテンツ タイプ ID ではなく、0 (ゼロ) が返されることに注意してください。

解決法: ありません。

問題 2

種類が UserInformation のリストではリスト イベントが発生しません。

解決法: ありません。

ドキュメント ライブラリ

問題

説明

問題 1

新しいコンテンツ タイプを、イベントがバインドされているリストに追加するとき、これらのイベントがいくつか発生する可能性があります。これは、リストへのコンテンツ タイプのバインドでは、ファイル (Template.doc など) の追加、ドキュメントの更新、新しいフィールドの追加などの作業が途中で行わなわれることがあるからです。

解決法: この動作は、共有ドキュメントのドキュメント ライブラリに対してのみ発生し、カスタム ドキュメント ライブラリに対しては発生しません。共有ドキュメントの場合、コンテンツ タイプを追加すると、Forms/<Content Type> フォルダーが作成されて、Template.doc ファイルがこのフォルダーにコピーされ、これによりイベントが発生します。

問題 2

WebDAV を使用して、エクスプローラー ビューでドキュメントをドキュメント ライブラリに追加するとき、ItemAdding(SPItemEventProperties) メソッドおよび ItemAdded(SPItemEventProperties) メソッドが呼び出されるのは 1 回ですが、ItemUpdating(SPItemEventProperties) メソッドおよび ItemUpdated(SPItemEventProperties) メソッドは 2 回呼び出されます。

解決法: ありません。これは設計上の動作です。エクスプローラー フォルダー ビューでのファイルの追加処理に関与する内部プロセスでは、これらのメソッドを 2 回呼び出す必要があります。

問題 3

エクスプローラー ビューで WebDAV を使用してドキュメント ライブラリのファイルの名前を変更する場合、ファイルの拡張子も変更しない限り、名前の変更イベントによって、ItemUpdating(SPItemEventProperties) イベントおよび ItemUpdated(SPItemEventProperties) イベントが発生しません。

解決法: ありません。

Web

問題

説明

問題 1

WebAdding(SPWebEventProperties) メソッドおよび WebProvisioned(SPWebEventProperties) メソッドでは、親 Web がルート Web の場合、ServerRelativeUrl プロパティは空です。

解決法: WebAdding イベントの ServerRelativeUrl プロパティの適切な値は、親 Web の URL です。WebProvisioned イベントの適切な値は、新しく作成されたサブ Web の URL です。

問題 2

イベント レシーバーの状態を、WebDeleting(SPWebEventProperties) イベントまたは SiteDeleting(SPWebEventProperties) イベントで CancelNoError に設定すると、Web が削除されたことを示すエラー ページにリダイレクトされます。

解決法: ありません。イベントの発生後、コントロールによって、呼び出し元が返さるだけです。Web は削除されていません。

問題 3

イベント レシーバーの状態を、FieldAdding(SPWebEventProperties) イベントで CancelNoError に設定すると、フィールドをリストに追加するときに、列が存在しないことを示すエラー ページにリダイレクトされます。

解決法: ありません。イベントの発生後、コントロールによって、呼び出し元が返されるだけです。列は削除されていません。

問題 4

イベント レシーバーの状態を、ItemAttachmentDeleting(SPWebEventProperties) イベントで CancelNoError に設定した場合、アイテムから添付ファイルを削除しようとすると、"HRESULT からの例外" エラーと示されているエラー ページにリダイレクトされます。

解決法: ありません。イベントの発生後、コントロールによって呼び出し元が返されるだけです。