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

イベントの購読

拡張ポイントはリボン同様にエクステンションのOnActivateメソッド内で定義します。 ExtensionPointsプロパティのEventsプロパティにアクセスすることイベントの購読を定義できます。

購読できるイベントの概要

ExtensionPointsはコードベースでマニフェストのイベント購読を実装するものです。購読できるイベントについてはマニフェストファイルのイベントを参照して下さい。

イベント購読の実装


public class SampleExtensionEntryPoint : ExtensionBase
{
/// <summary>
/// アクティベート時の処理です。
/// </summary>
protected override void OnActivate()
{
// イベント
ExtensionPoints.Events.Application.RegisterOnAfterStart<ApplicationAfterStartEvent>();
}
}

購読したイベントはベースクラスから派生したイベントハンドラのクラスでOnHandleメソッドを実装することで処理を実現します。

/// <summary>
/// アプリケーション実行イベント
/// </summary>
public class ApplicationAfterStartEvent : ApplicationAfterStartEventHandlerBase
{
/// <summary>
/// イベントハンドラの処理です。
/// </summary>
/// <param name="c"></param>
/// <param name="p"></param>
protected override void OnHandle(IEventContext c, AfterStartEventParams p)
{
// イベント処理を実装します。
Output.WriteLine(ExtensionName, $"Events: ApplicationAfterStart Event. Version: {App.Version}");
}
}

購読できるイベント

アプリケーション

アプリケーションの起動と終了前のイベントを購読できます。

// イベント
ExtensionPoints.Events.Application.RegisterOnAfterStart<ApplicationAfterStartEvent>();
ExtensionPoints.Events.Application.RegisterOnBeforeQuit<ApplicationBeforeQuitEvent>();

プロジェクト

プロジェクトの新規作成、開く、保存といったイベントを購読できます。

ExtensionPoints.Events.Project.RegisterOnAfterNew<ApplicationAfterStartEvent>();
ExtensionPoints.Events.Project.RegisterOnBeforeOpen<ProjectBeforeOpenEvent>();
ExtensionPoints.Events.Project.RegisterOnAfterOpen<ProjectAfterOpenEvent>();
ExtensionPoints.Events.Project.RegisterOnBeforeOpen<ProjectBeforeSaveEvent>();
// ...

モデル

モデルの作成や編集に関するイベントを購読できます。AddModelEventメソッドでイベントを購読するクラスを指定し、RegisterOn...メソッドで購読するモデル編集イベントを指定します。

// "SoftwareComponent"のメタモデルにモデル作成後のイベントを追加します
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnAfterNew<SoftwareComponentAfterNewEvent>();

イベント購読には次のようなメソッドを用います。

  • RegisterOnBeforeNew
  • RegisterOnAfterNew
  • RegisterOnAfterNewRelation
  • RegisterOnModelEdited
  • RegisterOnFieldChanged
  • RegisterOnBeforeDelete
  • など

イベントハンドラは次のように提供しているベースクラスから派生して実装します。

public class SoftwareComponentAfterNewEvent : ModelsAfterNewEventHandlerBase
{
protected override void OnHandle(IEventContext c, ModelAfterNewEventParams p)
{
Output.WriteLine(ExtensionName, $"SoftwareComponent created.");
}
}

クラス名はカンマ区切りで複数指定できます。

ExtensionPoints.Events.AddModelEvent("Actor,UseCase,UseCaseStep").RegisterOnAfterNew<UseCaseModelAfterNewEvent>();

メタモデル名を省略するとすべてのモデルに対してイベントを購読します。これはマニフェストファイルにおける*と同じ意味となります。

ExtensionPoints.Events.AddModelEvent().RegisterOnAfterNew<ModelAfterNewEvent>();

コマンド

Next Designのコマンド実行の前後に対してイベントを購読します。

// エクステンションで登録したコマンドに対して
ExtensionPoints.Events.AddCommandEvent("MyExtensionCommand").RegisterOnAfterExecute<MyExtensionCommandsAfterExecuteEvent>();

// システムのコマンドに対する
ExtensionPoints.Events.AddCommandEvent(NextDesignAppCommands.Home_CheckError).RegisterOnBeforeExecute<CheckErrorCommandBeforeExecuteEvent>();

イベントハンドラは次のように派生クラスを実装します。

public class CheckErrorCommandBeforeExecuteEvent : CommandsBeforeExecuteEventHandlerBase
{
protected override void OnHandle(IEventContext c, BeforeExecuteEventParams p)
{
// ...
}
}

ページ

ページの変更前後のイベントを購読できます。

ExtensionPoints.Events.Pages.RegisterOnBeforeChange<PagesBeforeChangeEvent>();
ExtensionPoints.Events.Pages.RegisterOnAfterChange<PagesAfterChangeEvent>();

イベントハンドラは次のように派生クラスを実装します。

public class PagesBeforeChangeEvent : PagesBeforeChangeEventHandlerBase
{
protected override void OnHandle(IEventContext c, PageBeforeChangeEventParams p)
{
// ...
}
}
public class PagesAfterChangeEvent : PagesAfterChangeEventHandlerBase
{
protected override void OnHandle(IEventContext c, PageAfterChangeEventParams p)
{
// ...
}
}

ナビゲータ

ナビゲータの変更イベントを購読できます。AddNavigatorEventメソッドでイベントハンドラを登録します。

ExtensionPoints.Events.AddNavigatorEvent().RegisterOnShow<NavigatorShowEvent>();

イベントハンドラは次のように派生クラスを実装します。

public class NavigatorShowEvent : NavigatorsShowEventHandlerBase
{
protected override void OnHandle(IEventContext c, NavigatorOnShowEventParams p)
{
Output.WriteLine(ExtensionName, $"Navigator: {p.TargetNavigatorName}");
}
}

購読するナビゲータの種類を指定する場合は次のようにEventTargetNavigatorType列挙体でナビゲータの種類を指定します。

// モデルナビゲータの表示イベントを購読します
ExtensionPoints.Events.AddNavigatorEvent(EventTargetNavigatorType.Model).RegisterOnShow<NavigatorShowEvent>();

エディタ

エディタの表示や選択イベントを購読できます。

ExtensionPoints.Events.AddEditorEvent().RegisterOnShow<EditorShowEvent>();

特定のビュー定義の場合のみイベントを購読する場合は次のようにビュー定義名を指定します。

ExtensionPoints.Events.AddEditorEvent("MyViewDefenition").RegisterOnShow<MyViewDefenitionEditorShowEvent>();

エディタのモデルの選択変更イベントも購読できます。

ExtensionPoints.Events.AddEditorEvent("MyViewDefenition").RegisterOnSelectionChanged<EditorsSelectionChangedEvent>();

情報ウィンドウ

情報ウィンドウの表示・非表示、選択変更、ダブルクリックを購読できます。購読には次のようなメソッドを持ちいます。

  • RegisterOnShow
  • RegisterOnHide
  • RegisterOnSelectionChanged
  • RegisterOnDoubleClick
ExtensionPoints.Events.AddInformationEvent(EventTargetInformationAreaType.Error).RegisterOnDoubleClick<ErrorDoubleClickEvent>();

イベントハンドラは次のように派生クラスを実装します。

public class ErrorDoubleClickEvent : InformationsDoubleClickEventHandlerBase
{
protected override void OnHandle(IEventContext c, InformationOnDoubleClickEventParams p)
{
Output.WriteLine(ExtensionName, $"Model: {p.Model.Name}");

// 標準のダブルクリック動作をさせないようにします
p.Consume();
}
}

イベントハンドラの定義

購読したイベントに対してイベントハンドラを定義するには、イベントハンドラを実装するを参照して下さい。