Skip to main content

モデル間の関連を取得する

指定したフィールド名の関連を取得する場合は、IModelオブジェクトのGetRelationメソッドを用います。関連コレクションを取得する場合は、IModelオブジェクトのGetRelationsメソッドを用います。 フィールド名は所有、参照フィールド名どちらも指定することができます。

public void GetRelation(ICommandContext c, ICommandParams p)
{
// 現在表示しているモデルを取得します
IModel model = c.App.Workspace.CurrentModel;

// フィールド名を指定します
var fieldName = "FieldSomeName";

// 関連を取得します
IRelationship relationship = model.GetRelation(fieldName);
c.App.Workspace.Output.WriteLine("sample", $"Relationship-Class: {relationship.Metaclass.Name}");

// 複数の関連を取得したい場合、IModel.GetRelationsを用います
var fieldsName = "FieldsSomeName";
IRelationshipCollection relationships = model.GetRelations(fieldsName);
foreach(var r in relationships)
{
c.App.Workspace.Output.WriteLine("sample", $"Relationship-Class: {r.Metaclass.Name}");
c.App.Workspace.Output.WriteLine("sample", $" Relationship-Source: {r.Source.Name}");
c.App.Workspace.Output.WriteLine("sample", $" Relationship-Target: {r.Target.Name}");
}
}

モデルを指定して関連を取得したい場合は、IModelオブジェクトのGetRelationsOfメソッドを用います。 所有関連、参照関連に関係なく全ての関連を取得します。

public void GetRelationsOf(ICommandContext c, ICommandParams p)
{
// 現在表示しているモデルを取得します
IModel model = c.App.Workspace.CurrentModel;

// 表示中のモデルと関連を持つモデルを指定します
IModel targetModel = c.App.Workspace.CurrentProject.GetModelByPath("SomeModelPath");

// モデル間の関連を取得します
IRelationshipCollection relationships = model.GetRelationsOf(targetModel);
foreach(var relationship in relationships)
{
c.App.Workspace.Output.WriteLine("sample", $"Relationship-Class: {relationship.Metaclass.Name}");
}
}