モデル間の関連を取得する
指定したフィールド名の関連を取得する場合は、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}");
}
}