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

コマンド

概要

  • コマンドを定義して、エクステンションに実装したコマンドハンドラと関連付けることで、リボンの拡張ポイントなどから独自処理を呼び出せます。
  • コマンドの有効/無効条件として、モデルの選択状態やモデルのクラス、対象のビュー定義を指定できます。

コマンドの詳細

  • プロパティ

    キー説明値域必須か
    idコマンドを一意に識別する ID。配置されている全エクステンションでユニークな文字列IDを表す文字列必須
    titleコマンドのタイトル1任意の文字列-
    descriptionコマンドの説明1任意の文字列-
    groupコマンドが属するグループ1グループ名を表すの文字列-
    execFuncエントリーポイントに実装されるコマンドハンドラ名メソッド名を表す文字列必須
    canExecWhenコマンドの有効条件。詳細は下位プロパティの通りオブジェクト-
    canExecWhen.uiStateUIの状態を表す次のいずれかの値。
    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);
}

Footnotes

  1. 現バージョンではエクステンションの動作に影響せず表示もされません。 2 3 4

  2. canExecFunc に設定可能な関数のシグネチャは次の通りです。bool function-name(ICommandContext context, ICommandParams parameters)。設定された関数が見つからない場合は false と評価されます。 2

  3. スクリプト方式のエクステンションで canExecFunc を設定した場合は常に true と評価されます。スクリプト方式のエクステンションでは canExecWhen のみを設定してください。 2