クラスのフィールドを取得する
フィールド名を指定して取得する
フィールド名を指定してクラスからフィールドを取得するには、IClass
オブジェクトのGetField
メソッドを用います。
public void GetField(ICommandContext c, ICommandParams p)
{
// メタモデルを取得します
IMetamodels metamodels = c.App.Workspace.CurrentProject.Profile.Metamodels;
// "Actor"のクラスを取得します
IClass cls = metamodels.GetClass("Actor");
// "ユースケース"のフィールドを取得します
var field = cls.GetField("MainUseCases");
// フィールドの型名を出力します
c.App.Output.WriteLine("sample", $"Field: {field.Type}");
}
フィールドの一覧を取得する
クラスからフィールドの一覧を取得するには、IClass
オブジェクトのGetFields
メソッドを用います。
public void GetFields(ICommandContext c, ICommandParams p)
{
// メタモデルを取得します
IMetamodels metamodels = c.App.Workspace.CurrentProject.Profile.Metamodels;
// "Actor"のクラスを取得します
IClass cls = metamodels.GetClass("Actor");
// "Actor"のクラスのフィールドを取得します
IFieldCollection fields = cls.GetFields();
foreach (var field in fields)
{
// システムフィールドは除外します
if (field.Name.StartsWith("___") || field.Name.StartsWith("$") || field.HasTags("System,System.Core")) continue;
c.App.Output.WriteLine("sample", $"Field: {field.DisplayName}");
}
}
システム定義のフィールドかどうかを判断する
APIを利用してフィールドを取得した場合、システムで定義されたフィールドも同時に取得できます。 システムで定義されたフィールドは次のルールに従うため、不要ならば除外してください。
- 名前(
IField.Name
)の接頭辞が「$」 - 名前(
IField.Name
)の接頭辞が「___」 - フィールドのタグに
System
やSystem.Core
が設定されている
下記のようなメソッドを用意すると便利です。
private bool IsSystemField(IField field)
{
// システムフィールドは除外します
return field.Name.StartsWith("___") || field.Name.StartsWith("$") || field.HasTags("System,System.Core");
}