Event Subscription
Overview
Event extension points are defined within the extension's OnActivate method, similar to the ribbon.
You can define event subscriptions by accessing the Events property of the ExtensionPoints property.
For information on events you can subscribe to, please refer to Events in the Manifest.
public class SampleExtensionEntryPoint : ExtensionBase
{
/// <summary>
/// This is the processing that occurs when the extension is activated.
/// </summary>
protected override void OnActivate()
{
// Event
ExtensionPoints.Events.Application.RegisterOnAfterStart<ApplicationAfterStartEvent>();
}
}
Subscribed events are handled by implementing the OnHandle method in an event handler class derived from the base class.
///<summary>
///Application execution event
///</summary>
public class ApplicationAfterStartEvent : ApplicationAfterStartEventHandlerBase
{
/// <summary>
/// Event handler processing.
/// </summary>
/// <param name="c"></param>
/// <param name="p"></param>
protected override void OnHandle(IEventContext c, AfterStartEventParams p)
{
//Implement event handling.
Output.WriteLine(ExtensionName, $"Events: ApplicationAfterStart Event. Version: {App.Version}");
}
}
Implementing Event Subscription
Application
You can subscribe to events before the application starts and before it shuts down.
//Event
ExtensionPoints.Events.Application.RegisterOnAfterStart<ApplicationAfterStartEvent>();
ExtensionPoints.Events.Application.RegisterOnBeforeQuit<ApplicationBeforeQuitEvent>();
Command
You can subscribe to events before and after the execution of Next Design commands.
//Command
//Adds an event to the "MyExtensionCommand" command implemented in the extension.
ExtensionPoints.Events.AddCommandEvent("MyExtensionCommand").RegisterOnBeforeExecute<MyExtensionCommandsBeforeExecuteEvent>();
ExtensionPoints.Events.AddCommandEvent("MyExtensionCommand").RegisterOnAfterExecute<MyExtensionCommandsAfterExecuteEvent>();
By setting the corresponding identifier in the argument of the AddCommandEvent method, you can also subscribe to events for system commands.
ExtensionPoints.Events.AddCommandEvent(NextDesignAppCommands.Home_CheckError).RegisterOnBeforeExecute<CheckErrorCommandBeforeExecuteEvent>();
Project
You can subscribe to events such as creating a new project, opening a project, and saving a project.
//project
ExtensionPoints.Events.Project.RegisterOnAfterNew<ProjectAfterNewEvent>();
ExtensionPoints.Events.Project.RegisterOnBeforeOpen<ProjectBeforeOpenEvent>();
ExtensionPoints.Events.Project.RegisterOnAfterOpen<ProjectAfterOpenEvent>();
ExtensionPoints.Events.Project.RegisterOnBeforeSave<ProjectBeforeSaveEvent>();
ExtensionPoints.Events.Project.RegisterOnAfterSave <ProjectAfterSaveEvent>();
ExtensionPoints.Events.Project.RegisterOnBeforeClose<ProjectBeforeCloseEvent>();
ExtensionPoints.Events.Project.RegisterOnAfterClose<ProjectAfterCloseEvent>();
ExtensionPoints.Events.Project.RegisterOnBeforeReload<ProjectBeforeReloadEvent>();
ExtensionPoints.Events.Project.RegisterOnAfterReload<ProjectAfterReloadEvent>();
The Post-Project Open event (RegisterOnAfterOpen) and Post-Project Reload event (RegisterOnAfterReload) occur before the background loading of model files is complete. Referencing project-wide models in these event handlers will cause the necessary model files to load, potentially increasing the time it takes to open the project. For details, please refer to Changes in V5.1.
Model
You can subscribe to events related to model creation and editing. Specify the class to subscribe to events for with the AddModelEvent method, and specify the model editing events to subscribe to with the RegisterOn... method.
//Model
//Add events to the "SoftwareComponent" metamodel:
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnBeforeNew<ModelsBeforeNewEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnAfterNew<ModelsAfterNewEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnFieldChanged<ModelsFieldChangedEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnBeforeDelet e<ModelsBeforeDeleteEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnBeforeChangeOwner<ModelsBeforeChangeOwnerEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnAfterChangeOwner<ModelsAfterChangeOwnerEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnBeforeChangeOrder<ModelsBeforeChangeOrderEvent>();
ExtensionPoints.Events.AddModelEvent("Softwa reComponent").RegisterOnAfterChangeOrder<ModelsAfterChangeOrderEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnBeforeNewRelation<ModelsBeforeNewRelationEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnAfterNewRelation<ModelsAfterNewRelationEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnValidate<ModelsValidateEvent>();
ExtensionPoints.Eve nts.AddModelEvent("SoftwareComponent").RegisterOnError<ModelsErrorEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnSelectionChanged<ModelsSelectionChangedEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnModelEdited<ModelsModelEditedEvent>();
ExtensionPoints.Events.AddModelEvent("SoftwareComponent").RegisterOnUndoRedo<ModelsUndoRedoEvent>();
Multiple class names can be specified separated by commas.
ExtensionPoints.Events.AddModelEvent("Actor,UseCase,UseCaseStep").RegisterOnAfterNew<ModelsAfterNewEvent>();
Omitting the metamodel name subscribes to the event for all models. This is equivalent to * in the manifest.
ExtensionPoints.Events.AddModelEvent().RegisterOnAfterNew<ModelsAfterNewEvent>();
Editor
You can subscribe to editor display and selection events.
//Editor
//Add events to the view "MyViewDefenition"
ExtensionPoints.Events.AddEditorEvent("MyViewDefenition").RegisterOnShow<EditorsShowEvent>();
ExtensionPoints.Events.AddEditorEvent("MyViewDefenition").RegisterOnHide<EditorsHideEvent>();
ExtensionPoints.Events.AddEditorEvent("MyViewDefenition").RegisterOnSelectionChanged<EditorsSelectionChangedEvent>();
Omitting the editor name subscribes to events for all views.
ExtensionPoints.Events.AddEditorEvent().RegisterOnShow<EditorsShowEvent>();
Pages
You can subscribe to events before and after page changes.
ExtensionPoints.Events.Pages.RegisterOnBeforeChange<PagesBeforeChangeEvent>();
ExtensionPoints.Events.Pages.RegisterOnAfterChange<PagesAfterChangeEvent>();
Navigator
You can subscribe to navigator change events. Register an event handler with the AddNavigatorEvent method.
//Navigator
ExtensionPoints.Events.AddNavigatorEvent().RegisterOnShow<NavigatorsShowEvent>();
ExtensionPoints.Events.AddNavigatorEvent().RegisterOnHide<NavigatorsHideEvent>();
ExtensionPoints.Events.AddNavigatorEvent().RegisterOnSelectionChanged<NavigatorsSelectionChangedEvent>();
To specify the navigator tab to subscribe to, specify the navigator type using the EventTargetNavigatorType enumeration as follows:
//Subscribe to the display event of the Model Navigator
ExtensionPoints.Events.AddNavigatorEvent(EventTargetNavigatorType.Model).RegisterOnShow<NavigatorsShowEvent>();
Information Window
You can subscribe to the display/hide, selection change, and double-click of the information window.
//Navigator
ExtensionPoints.Events.AddInformationEvent().RegisterOnShow<InformationsShowEvent>();
ExtensionPoints.Events.AddInformationEvent().RegisterOnHide<InformationsHideEvent>();
ExtensionPoints.Events.AddInformationEvent().RegisterOnSelectionChanged<InformationsSelectionChangedEvent>();
ExtensionPoints.Events.AddInformationEvent().RegisterOnDoubleClick<InformationsDoubleClickEvent>();
To specify the tab of the information window to subscribe to, specify the type of information window using the EventTargetInformationAreaType enumeration as follows:
ExtensionPoints.Events.AddInformationEvent(EventTargetInformationAreaType.Error).RegisterOnDoubleClick<InformationsDoubleClickEvent>();