メインコンテンツまでスキップ

イベント

概要

  • 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アンドゥ・リドゥイベント
コマンド
エディタ
  • エリア名: 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 : 出力ページ
  • 値にワイルドカード: * を指定、もしくは、プロパティを省略すると、全ページでイベント購読が可能です。
  • 複数ページを対象とする場合はページ名をカンマ区切りで指定します。

イベントの定義例

下記例では、購読しないイベント(イベントハンドラが空のイベント)も記述してありますが、実際に記述の必要はありません。

manifes.json
{
"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 > 概要 > イベント から各イベントエリアごとのインタフェースを参照してください。