クラスを取得する
クラス名で取得する
IMetamodels
オブジェクトのGetClass
メソッドを用いることでクラス名からIClass
オブジェクトを取得できます。
public void GetClass(ICommandContext c, ICommandParams p)
{
// メタモデルを取得します
IMetamodels metamodels = c.App.Workspace.CurrentProject.Profile.Metamodels;
// 現在エディタで表示しているモデルのクラス名を指定して取得します
IModel model = c.App.Workspace.CurrentModel;
IClass cls = metamodels.GetClass(model.ClassName);
c.App.Output.WriteLine("sample", $"Class: {cls.DisplayName}");
// "Actor"のすべてのフィールドを取得します
IFieldCollection fields = cls.GetFields();
foreach (IField field in fields)
{
if (field.Name.StartsWith("___") || field.Name.StartsWith("$"))
{
// システムフィールドを無視します
continue;
}
c.App.Output.WriteLine("sample", $"Field: {field.DisplayName}");
}
}
注意
APIを利用してプロファイルの要素を取得した場合、システムで定義された要素も同時に取得できます。 システムで定義された要素は次のルールに従うため、不要ならば除外してください。
- クラス
- 完全修飾名(
IClass.FullName
)の接頭辞が「System.」 - 名前(
IClass.Name
)の接頭辞が「___」
- 完全修飾名(
- フィールド
- 名前(
IField.Name
)の接頭辞が「$」 - 名前(
IField.Name
)の接頭辞が「___」
- 名前(
モデルから取得する
モデルから取得する場合はIModel
オブジェクトのMetaclass
プロパティを用います。
public void GetClassFromModel(ICommandContext c, ICommandParams p)
{
// モデルを取得します
IModel model = c.App.Workspace.CurrentModel;
// MetaclassプロパティでIClassが取得できます
IClass cls = model.Metaclass;
}