モデルを移動する
所有関係にあるモデルを移動する方法について説明します。
指定位置に移動する
自モデルの親モデルを指定のモデルに変更する場合は、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メソッドと同様です。