Skip to main content

モデル編集の概要

エクステンションではAPIで次のようにモデル編集が可能です。

モデルを追加するにはIProjectオブジェクトのAddNewRootModelメソッドやIModelオブジェクトのAddNewModelメソッドを用います。また、フィールドへの値のセットはIModelオブジェクトのSetFieldメソッドを用います。

public void AddNewRootModel(ICommandContext c, ICommandParams p)
{
// プロジェクトにモデルを作成します
IModel ucModel = c.App.Workspace.CurrentProject.AddNewRootModel("UseCaseModel");

// ユースケースのモデルとアクタのモデルを作成します
IModel uc1 = ucModel.AddNewModel("UseCases", "UseCase");
uc1.SetField("Name", "定速走行する");
uc1.SetField("Description", "・・・");

IModel uc2 = ucModel.AddNewModel("UseCases", "UseCase");
uc2.SetField("Name", "追従走行する");

IModel ac1 = ucModel.AddNewModel("Actors", "Actor");
ac1.SetField("Name", "ドライバ");
IModel ac2 = ucModel.AddNewModel("Actors", "Actor");
ac2.SetField("Name", "コントロールパネル");
}

フィールドの値の取得はIModelオブジェクトのGetFieldメソッドやGetFieldStringメソッドを用います。

public void GetField(ICommandContext c, ICommandParams p)
{
// 現在のモデルを取得します
IModel model = c.App.Workspace.CurrentModel;

// "SomeField"のフィールド値を取得します
object someFieldValue = model.GetField("SomeField");

// 文字列型でフィールド値を取得します
string someStringField = model.GetFieldString("SomeField");
}

関連付けは IModelオブジェクトのRelateメソッドを使います。参照フィールドを指定した場合関連付けを行いますが、所有フィールドを指定した場合関連付けは行われません。

public void Relate(ICommandContext c, ICommandParams p)
{
// 関連付け対象のモデルを取得します
IModel uc1 = ..
IModel ac1 = ..
IModel ac2 = ..

// ユースケースの参照フィールドを指定してアクタと関連付けを行います
uc1.Relate("MainActor", ac1);

// ユースケースの所有フィールドを指定した場合、関連付けは行われません
uc1.Relate("SubActors", ac2);
}

IModelオブジェクトのSetFieldメソッドを用いても関連付けできます。参照フィールドを指定した場合は参照関連を追加、所有フィールドを指定した場合はモデルを移動します。詳しい利用方法は、こちらを参照してください。

public void Relate(ICommandContext c, ICommandParams p)
{
// 関連付け対象のモデルを取得します
IModel uc1 = ..
IModel ac1 = ..
IModel ac2 = ..

// ユースケースの参照フィールドを指定してアクタと関連付けを行います
uc1.SetField("MainActor", ac1);

// ユースケースの所有フィールドを指定してアクタをユースケース下に移動します
// 既に設定されていたモデルは削除されます
uc1.SetField("SubActors", ac2);
}

モデルの移動はIModelオブジェクトのMoveToメソッド、削除はIModelオブジェクトのDeleteメソッドを用います。

public void MoveToAndDelete(ICommandContext c, ICommandParams p)
{
// 操作対象のモデルを取得します
IModel uc1 = ..
IModel uc2 = ..

// ユースケースのシナリオを追加します
var scenario1 = uc1.AddNewModel("Scenarios", "Scenario");

// インデックスを指定して追加します
var scenario2 = uc1.AddNewModelAt("Scenarios", "Scenario", "after", 0);

// シナリオを移動します
scenario1.MoveTo(uc2, "Scenarios", "after", 0);

// シナリオを削除します
scenario2.Delete();
}