イベント
概要
- Next Design 内部処理イベントを受け取って、独自機能を追加できます。
- 購読する Next Design 内部処理イベントを宣言して、それらのイベントにイベントハンドラを関連付けることで、内部処理に連動して独自処理を実行できます。
購読可能なイベント一覧
購読可能なイベントの一覧を以下に示します。
詳細については、 API > 概要 > イベント を参照してください。
アプリケーション
エリア名: application
イベント名
イベント名 説明 onAfterStart アプリケーション起動後イベント onBeforeQuit アプリケーション終了前イベント
プロジェクト
エリア名: project
イベント名
イベント名 説明 onAfterNew プロジェクト新規作成後イベント onBeforeOpen プロジェクトオープン前イベント onAfterOpen プロジェクトオープン後イベント onBeforeSave プロジェクト保存前イベント onAfterSave プロジェクト保存後イベント onBeforeClose プロジェクトクローズ前イベント onAfterClose プロジェクトクローズ後イベント onBeforeReload プロジェクトリロード前イベント onAfterReload プロジェクトリロード後イベント
モデル
エリア名: models
イベント名
イベント名 説明 onBeforeNew モデル追加前イベント onAfterNew モデル追加後イベント onFieldChanged フィールド値変更後イベント onBeforeDelete モデル削除前イベント onBeforeChangeOwner モデル親変更前イベント onAfterChangeOwner モデル親変更後イベント onBeforeChangeOrder モデル順序変更前イベント onAfterChangeOrder モデル順序変更後イベント onBeforeNewRelation 関連追加前イベント onAfterNewRelation 関連追加後イベント onValidate モデル検証時イベント onError エラー追加時イベント onModelEdited モデル編集イベント onUndoRedo アンドゥ・リドゥイベント
コマンド
エリア名: commands
イベント名
イベント名 説明 onBeforeExecute コマンド実行前イベント onAfterExecute コマンド実行後イベント 購読可能なコマンド
エディタ
エリア名: editors
イベント名
イベント名 説明 onShow エディタ表示イベント onHide エディタ非表示イベント onSelectionChanged エディタ内モデル選択イベント
ページ
エリア名: pages
イベント名
イベント名 説明 onBeforeChange ページ変更前イベント onAfterChange ページ変更後イベント
ナビゲータ
エリア名: navigators
イベント名
イベント名 説明 onShow ナビゲータ表示イベント onHide ナビゲータ非表示イベント onSelectionChanged ナビゲータ内モデル選択イベント
情報ウィンドウ
エリア名: informations
イベント名
イベント名 説明 onShow 情報ウィンドウページ表示イベント onHide 情報ウィンドウページ非表示イベント onSelectionChanged 情報ウィンドウページ表示要素選択イベント onDoubleClick 情報ウィンドウページ表示要素ダブルクリックイベント
イベントの共通事項
購読しないイベントはマニフェストに記述する必要ありません。
マニフェスト内で同じイベントを重複定義した場合は、次の優先順位で該当するイベントが有効となります。
(1) イベントフィルタの値に、クラス名もしくは対象名を指定しているイベント
(2) イベントフィルタの値に、クラスの完全修飾名を指定しているイベント(モデルのイベントフィルタのみ対象)
(3) イベントフィルタの値に、ワイルドカード:*
を指定、もしくは、イベントフィルタを省略しているイベントさらに、同じ優先順位内でイベントを重複定義した場合は、最初に定義されたイベントが有効となります。
イベントを重複定義し、優先順位が高いイベント定義の中でイベントハンドラが空のイベントを記述すると、そのイベント購読が解除されます。(例:
"onAfterNew": ""
)複数のエクステンションで同じイベントを購読している場合、エクステンション間でのイベント発火順序は制御できません。 イベントの発火順序はマニフェストの読み込み順になります。
複数のエクステンションで同じイベントを購読していて、そのイベントをいずれかのエクステンションでキャンセルした場合、残りのエクステンションではイベント発火しません。
イベントフィルタ
- モデルに対しては、イベントフィルタの値にメタモデルのクラス名(またはクラスの完全修飾名)を指定することで購読するイベントを絞り込みできます。
- エディタに対しては、イベントフィルタの値にビュー定義名を指定することで購読するイベントを絞り込みできます。
- 情報ウィンドウに対しては、イベントフィルタの値にページ名を指定することで購読するイベントを絞り込みできます。
- このイベントフィルタの仕組みを利用して購読するイベントを絞り込むことにより、不必要なイベントに対して無駄にイベントハンドラが呼び出されてレスポンスが低下することを回避できます。
モデルのイベントフィルタ
- class プロパティに対象モデルのメタモデルでのクラス名を指定することで、特定クラスのモデルでのみイベント購読可能です。
- クラス名の代わりにクラスの完全修飾名も指定できます。
- 複数クラスを対象とする場合はクラス名をカンマ区切りで指定します。
- 値にワイルドカード:
*
を指定、もしくは、プロパティを省略すると、全モデル共通でのイベント購読も可能です。 - 継承元クラス名は指定できません。モデルのクラス名を指定する必要があります。
エディタのイベントフィルタ
- viewDefinition プロパティに対象ビュー定義名を指定することで、特定のビュー定義でのみイベント購読可能です。
- 複数のビュー定義を対象とする場合はビュー定義名をカンマ区切りで指定します。
ナビゲータのイベントフィルタ
- navigator プロパティに対象ナビゲータ名を指定することで、特定ナビゲータでのみイベント購読可能です。
- 対象ナビゲータ名として、次の値を指定できます。
Model
: モデルナビゲータProductLine
: プロダクトラインナビゲータScm
: 構成管理ナビゲータProject
: プロジェクトナビゲータProfile
: プロファイルナビゲータ
- 値にワイルドカード:
*
を指定、もしくは、プロパティを省略すると、全ナビゲータでイベント購読が可能です。 - 複数ナビゲータを対象とする場合はナビゲータ名をカンマ区切りで指定します。
情報ウィンドウのイベントフィルタ
- information プロパティに対象ページ名を指定することで、特定ページでのみイベント購読可能です。
- 対象ページ名として、次の値を指定できます。
Error
: エラーページSearchResult
: 検索結果ページOutput
: 出力ページ
- 値にワイルドカード:
*
を指定、もしくは、プロパティを省略すると、全ページでイベント購読が可能です。 - 複数ページを対象とする場合はページ名をカンマ区切りで指定します。
イベントの定義例
下記例では、購読しないイベント(イベントハンドラが空のイベント)も記述してありますが、実際に記述の必要はありません。
{
"name": "Manifest Test",
"main": "main.cs",
"lifecycle": "project",
"extensionPoints" :
{
"events" :
{
"application" :
{
"onAfterStart": "",
"onBeforeQuit": ""
},
"proejct" :
{
"onAfterNew": "",
"onBeforeOpen": "",
"onAfterOpen": "",
"onBeforeSave": "ProjectOnBeforeSave",
"onAfterSave": "",
"onBeforeClose": "",
"onAfterClose": "",
"onBeforeReload": "",
"onAfterReload": ""
},
"models" :
[
{
"class": "*",
"onBeforeNew": "",
"onAfterNew": "AllModel_OnNew",
"onFieldChanged": "",
"onBeforeDelete": "",
"onBeforeChangeOwner": "",
"onAfterChangeOwner": "",
"onBeforeChangeOrder": "",
"onAfterChangeOrder": "",
"onBeforeNewRelation": "",
"onAfterNewRelation": "",
"onValidate": "",
"onError": "AllModel_OnError"
},
{
"class": "UseCase",
"onAfterNew": "UseCase_OnNew",
"onFieldChanged": "UseCase_OnFieldChanged",
"onBeforeDelete": "UseCase_OnBeforeDelete",
"onValidate": "UseCase_OnValidate",
"onError": ""
},
{
"class": "AnalysisFunctionType,SoftwareFunctionType",
"onAfterNew": "FunctionType_OnNew"
}
] ,
"commands" :
[
{
"commandId": "myExtension.createBlock",
"onBeforeExecute": "CommandOnBeforeCreateBlock",
"onAfterExecute": ""
},
{
"commandId": "myExtension.updateBlock",
"onBeforeExecute": "",
"onAfterExecute": "CommandOnAfterUpdateBlock"
}
],
"editors" :
[
{
"viewDefinition": "*",
"onShow": "",
"onHide": "",
"onSelectionChanged": ""
},
{
"viewDefinition": "logicalFunctionDiagaram",
"onShow": "",
"onHide": "",
"onSelectionChanged": ""
},
{
"viewDefinition": "logicalFunctionDetailForm",
"onShow": "",
"onSelectionChanged": ""
}
],
"pages" :
{
"onBeforeChange": "",
"onAfterChange": ""
},
"navigators" :
[
{
"navigator": "Model",
"onShow": "",
"onHide": "",
"onSelectionChanged": ""
},
{
"navigator": "Profile",
"onShow": "",
"onHide": "",
"onSelectionChanged": ""
}
],
"informations" :
[
{
"information": "*",
"onShow": "",
"onHide": "",
"onSelectionChanged": "",
"onDoubleClick": ""
}
]
},
"commands": [
{
"id": "myExtension.createBlock",
"execFunc": "createBlock"
},
{
"id": "myExtension.updateBlock",
"execFunc": "updateBlock"
},
{
"id": "myExtension.generateCode",
"execFunc": "generateCode"
}
]
}
}
イベントハンドラの実装例
public void ProjectOnBeforeSave(IEventContext context, IEventParams eventParams)
{
var projectBeforeSaveEventParams = eventParams as ProjectBeforeSaveEventParams;
if (( projectBeforeSaveEventParams != null) && (projectBeforeSaveEventParams.Project.Name == "temporary" ))
{
projectBeforeSaveEventParams.Cancel();
}
}
note
イベントの種類に応じたイベントパラメータの詳細については、 API > 概要 > イベント から各イベントエリアごとのインタフェースを参照してください。