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

モデルを移動する

所有関係にあるモデルを移動する方法について説明します。

指定位置に移動する

自モデルの親モデルを指定のモデルに変更する場合は、IModelオブジェクトのMoveToメソッドを用います。新しい親モデル、移動先のフィールドの名前、移動方向と基準位置を指定します。

public void MoveTo(ICommandContext c, ICommandParams p)
{
// 移動対象のモデルを取得します
IModel model = c.App.Workspace.CurrentModel;

// 新しい親モデルを取得します
// モデルパスを指定してモデルを取得する場合
IModel newOwner = model.OwnerProject.GetModelByPath("サンプルプロジェクト/ユースケースモデル");

// 移動対象のモデルを新しい親モデルの子要素として移動します
// 新しい親モデルの"Actors"フィールドの末尾に移動する場合
model.MoveTo(newOwner, "Actors", "last", 0);
}

移動先の親モデルとフィールドに現在と同じものを指定すると、自モデルの順序を変更することができます。

public void ChangeOrder(ICommandContext c, ICommandParams p)
{
// 移動対象のモデルを取得します
IModel model = c.App.Workspace.CurrentModel;

// 現在の親モデルと所有フィールドを指定して、移動対象のモデルを移動します
// この場合、移動対象モデルのフィールド内の順序を変更します
// モデルを先頭に移動する場合
model.MoveTo(model.Owner, model.GetOwnerField().Name, "first", 0);
}

IModelオブジェクトのMoveToメソッドの第3引数、第4引数には、それぞれ移動先における追加方向、追加基準位置を指定します。

追加方向(direction)
文字列で方向を指定します。指定できる値は以下のいずれかです。

指定できる値追加方向
first先頭
last末尾
before
after

追加基準位置(index)
先頭位置を0とするインデックスを整数で指定します。追加方向の指定値によって、追加位置が変わります。

追加方向の値追加位置
firstインデックスの値に関係なく先頭
lastインデックスの値に関係なく末尾
before指定したインデックス位置
after指定したインデックス位置の次の位置

自分の子要素として移動する

指定のモデルの親モデルを自モデルに変更する場合は、IModelオブジェクトのTakeメソッドを用います。

public void TakeModel(ICommandContext c, ICommandParams p)
{
// 移動先の親モデルを取得します
IModel model = c.App.Workspace.CurrentModel;

// 移動対象のモデルを取得します
// モデルパスを指定してモデルを取得する場合
IModel target = model.OwnerProject.GetModelByPath("サンプルプロジェクト/システム要件/非機能要件");

// 移動先の親モデルの子要素として移動対象のモデルを移動します
// 移動先の親モデルの"SubRequirements"フィールドの末尾に移動する場合
model.Take("SubRequirements", target, "first", 0);
}

移動方向と基準位置の詳細は、IModelオブジェクトのMoveToメソッドと同様です。