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

関連のフィールドにアクセスする

関連オブジェクト(IRelationship)のコレクションはIModelオブジェクトのGetRelationsメソッドで取得できます。IRelationshipIModelを継承しており、フィールドにアクセスできます。

public void GetRelationFields(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;

// 関連
foreach ( IRelationship transition in model.GetRelations("Transitions") )
{
// 関連のフィールドを取得します
var trigger = transition.GetFieldString("Trigger");

// アウトプットに出力します
c.App.Output.WriteLine("sample", $"Trigger: {trigger}");
}
}

関連先のモデル(IModel)は、IRelationshipオブジェクトのSourceプロパティやTargetプロパティでアクセスできます。

public void GetRelationEnds(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;

// 関連
foreach ( IRelationship transition in model.GetRelations("Transitions") )
{
// 関連元、関連先のモデル
IModel source = transition.Source;
IModel target = transition.Target;

// アウトプットに出力します
c.App.Output.WriteLine("sample", $"Source: {source.Name}");
c.App.Output.WriteLine("sample", $"Target: {target.Name}");
}
}

関連元と関連先のメタモデル上のフィールド定義情報(IField)はIRelationshipオブジェクトのSourceFieldプロパティ、TargetFieldプロパティでアクセスできます。

public void GetRelationEndFields(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;

// 関連
foreach ( IRelationship transition in model.GetRelations("Transitions") )
{
// 関連元、関連先のフィールド
IField sourceField = transition.SourceField;
IField targetField = transition.TargetField;

// アウトプットに出力します
c.App.Output.WriteLine("sample", $"SourceField: {sourceField.Name}");
c.App.Output.WriteLine("sample", $"TargetField: {targetField.Name}");
}
//...
}