クラスの一覧を取得する
すべてのクラス一覧を取得する
IMetamodelsオブジェクトのAllClassesプロパティを用いることですべてのクラスを取得します。
public void GetAllClasses(ICommandContext c, ICommandParams p)
{
    // メタモデルを取得します
    IMetamodels metamodels = c.App.Workspace.CurrentProject.Profile.Metamodels;
    // すべてのクラスを取得します
    IClassCollection classes = metamodels.AllClasses;
    
    foreach (var cls in classes)
    {
        if(cls.FullName.StartsWith("System."))
        {
            // システムで定義されたクラスを無視します
            continue;
        }
        
        c.App.Output.WriteLine("sample", $"Class: {cls.Name}");
    }
}
注意
APIを利用してプロファイルの要素を取得した場合、システムで定義された要素も同時に取得できます。 システムで定義された要素は次のルールに従うため、不要ならば除外してください。
- パッケージ
- 完全修飾名(IPackage.FullName)の接頭辞が「System.」
 
- 完全修飾名(
- クラス
- 完全修飾名(IClass.FullName)の接頭辞が「System.」
- 名前(IClass.Name)の接頭辞が「___」
 
- 完全修飾名(
- フィールド
- 名前(IField.Name)の接頭辞が「$」
- 名前(IField.Name)の接頭辞が「___」
 
- 名前(
パッケージ直下のクラス一覧を取得する
パッケージ名を指定して、そのパッケージ直下のクラス一覧を取得する例です。
public void GetClassesFromPackage(ICommandContext c, ICommandParams p)
{
    // メタモデルを取得します
    IMetamodels metamodels = c.App.Workspace.CurrentProject.Profile.Metamodels;
    // すべてのパッケージからパッケージを指定します
    var packageName = "SomePackageName";
    IPackageCollection packages = metamodels.AllPackages;
    IPackage targetPackage = packages.FirstOrDefault(p => p.Name == packageName);
    if(targetPackage == null)
    {
        c.App.Output.WriteLine("sample", $"指定されたパッケージは存在し  ません");
        return;
    }
    
    // パッケージ直下のクラスの名前を出力します
    IClassCollection classes = targetPackage.OwnedClasses;
    foreach (var cls in classes)
    {
        if(cls.FullName.StartsWith("System."))
        {
            // システムで定義されたクラスを無視します
            continue;
        }
        
        c.App.Output.WriteLine("sample", $"Class: {cls.DisplayName}");
    }
}
パッケージ配下のすべてのクラスを取得する
パッケージ名を指定して、そのパッケージ配下のすべてのクラスを取得する例です。
public void GetAllClassesFromPackage(ICommandContext c, ICommandParams p)
{
    // メタモデルを取得します
    IMetamodels metamodels = c.App.Workspace.CurrentProject.Profile.Metamodels;
    // すべてのパッケージからパッケージを指定します
    var packageName = "SomePackageName";
    IPackageCollection allPackages = metamodels.AllPackages;
    IPackage targetPackage = allPackages.FirstOrDefault(p => p.Name == packageName);
    if(targetPackage == null)
    {
        c.App.Output.WriteLine("sample", "指定されたパッケージは存在しません");
        return;
    }
    // パッケージ直下のクラスの名前を出 力します
    // 配下のパッケージと自身を和集合とし、その直下のクラスの列挙を取得します
    IEnumerable<IPackage> packages = GetAllSubPackages(targetPackage);
    var classes = packages.SelectMany(p => p.OwnedClasses);
    foreach (var cls in classes)
    {
        if(cls.FullName.StartsWith("System."))
        {
            // システムで定義されたクラスを無視します
            continue;
        }
        
        c.App.Output.WriteLine("sample", $"Class: {cls.DisplayName}");
    }
}
private IEnumerable<IPackage> GetAllSubPackages(IPackage targetPackage)
{
    if(!targetPackage.SubPackages.Any())
    {
        return new []{ targetPackage };
    }
    return new []{ targetPackage }.Union(targetPackage.SubPackages.SelectMany(p => GetAllSubPackages(p)));
}