Access related fields
A collection of related objects (IRelationship) can be obtained using the GetRelations method of the IModel object. IRelationship inherits from IModel and allows access to fields.
public void GetRelationFields(ICommandContext c, ICommandParams p)
{
    IModel model = c.App.Workspace.CurrentModel;
    //Relations
    foreach (IRelationship transition in model.GetRelations("Transitions"))
    {
        //Get related fields
        var trigger = transition.GetFieldString("Trigger");
        //Write to output
        c.App.Output.WriteLine("sample", $"Trigger: {trigger}");
    }
}
The related model (IModel) can be accessed through the Source and Target properties of the IRelationship object.
public void GetRelationEnds(ICommandContext c, ICommandParams p)
{
    IModel model = c.App.Workspace.CurrentModel;
    //Relationship
    foreach (IRelationship transition in model.GetRelations("Transitions"))
    {
        //Source and destination models
        IModel source = transition.Source;
        IModel target = transition.Target;
        //Write to output
        c.App.Output.WriteLine("sample", $"Source: {source.Name}");
        c.App.Output.WriteLine("sample", $"Target: {target.Name}");
    }
}
Field definition information (IField) on the source and destination metamodels can be accessed using the SourceField and TargetField properties of the IRelationship object.
public void GetRelationEndFields(ICommandContext c, ICommandParams p)
{
    IModel model = c.App.Workspace.CurrentModel;
    //Relationship
    foreach (IRelationship transition in model.GetRelations("Transitions"))
    {
        //Source and destination fields
        IField sourceField = transition.SourceField;
        IField targetField = transition.TargetField;
        //Write to output
        c.App.Output.WriteLine("sample", $"SourceField: {sourceField.Name}");
        c.App.Output.WriteLine("sample", $"TargetField: {targetField.Name}");
    }
    //...
}