コマンド
概要
- コマンドを定義して、エクステンションに実装したコマンドハンドラと関連付けることで、リボンの拡張ポイントなどから独自処理を呼び出せます。
- コマンドの有効/無効条件として、モデルの選択状態やモデルのクラス、対象のビュー定義を指定できます。
コマンドの詳細
-
プロパティ
キー 説明 値域 必須か id コマンドを一意に識別する ID。配置されている全エクステンションでユニークな文字列 IDを表す文字列 必須 title コマンドのタイトル1 任意の文字列 - description コマンドの説明1 任意の文字列 - group コマンドが属するグループ1 グループ名を表すの文字列 - execFunc エントリーポイントに実装されるコマンドハンドラ名 メソッド名を表す文字列 必須 canExecWhen コマンドの有効条件。詳細は下位プロパティの通り オブジェクト - canExecWhen.uiState UIの状態を表す次のいずれかの値。 Always
: 常に有効(プロパティ省略時の既定値)。ProjectOpened
: プロジェクトが開いている場合に有効。ModelSelected
: モデルが選択されている場合に有効。ModelSelectedInEditor
: エディタ上でモデルが選択されている場合に有効。"Always", "ProjectOpened", "ModelSelected", "ModelSelectedInEditor" - canExecWhen.profiles 対象プロジェクトのプロファイル名 プロファイル名を表す文字列 - canExecWhen.metamodels 選択されているモデルのクラス名、もしくは、その継承元クラス名。値に *
を指定、もしくは、プロパティを省略すると全モデルで有効。uiState プロパティがModelSelected
,ModelSelectedInEditor
以外の場合は無視されます。"*"、または、クラス名を表す文字列。複数の場合はカンマ区切りで指定。 - canExecWhen.viewDefinitions 対象のビュー定義名。値に *
を指定、もしくは、プロパティを省略すると全ビュー定義で有効。uiState プロパティがModelSelectedInEditor
以外の場合は無視されます。"*"、または、ビュー定義名を表す文字列。複数の場合はカンマ区切りで指定。 - canExecFunc コマンドの有効条件を評価するメソッド名。2 canExecWhen と同時に設定された場合はこちらが優先されます。ただし、.NET DLL 方式のエクステンションでのみ設定した関数が評価されます。3 メソッド名を表す文字列 -
コマンドの定義例
{
"extensionPoints": {
"commandGroups" :
[
{
"name": "codegen",
"title": "コード生成"
}
],
"commands" :
[
{
"id": "myExtension.generateCode",
"title": "Generate Code",
"description": "generate code description",
"group": "codegen",
"execFunc": "GenerateCode",
"canExecWhen" :
{
"uiState": "ModelSelected",
"metamodels": "FunctionalComponent,Component",
"viewDefinitions": "*"
}
},
{
"id": "myExtension.checkError",
"execFunc": "CheckError"
}
]
}
}
コマンドハンドラの実装例
public void GenerateCode(ICommandContext commandContext, ICommandParams commandParams)
{
// コマンドハンドラの実装コード
}
コマンドパラメータの使用例
エクステンションの内部からマニフェストの拡張ポイントに定義されているコマンドを実行する場合、パラメータを指定できます。
void ExecSomeCommands()
{
// パラメータを生成
var execParams = App.CreateCommandParams();
execParams.AddParam("value1"); // execParams[0] で値参照可能
execParams.AddParam("value2"); // execParams[1] で値参照可能
// execParams.AddParamWithName("param1", "value1"); // execParams["param1"] で値参照可能
// execParams.AddParamWithName("param2", "value2"); // execParams["param2"] で値参照可能
// パラメータ指定でコマンドを実行する
App.ExecuteCommand("otherExtension.someCommand", execParams);
}