文字列型のフィールド値を置換する
この例はすべての文字列フィールドの特定文字を強制的に置換するサンプルです。プロジェクトのすべてのモデルを取得し、フィールドの型が文字列型の場合に、文字列を置き返しています。
public void ReplaceStrings(ICommandContext c, ICommandParams p)
{
    // すべてのモデルを取得します
    var models = c.App.Workspace.CurrentProject.GetAllChildren();
    // モデル毎に処理します
    foreach(var model in models)
    {
        // メタクラスのフィールド情報を取得します
        var fields = model.Metaclass.GetFields();
        // 文字列型の場合のみ処理します
        var strFields = fields.Where(f => f.Type == "String");
        foreach(var field in strFields)
        {
            // システムフィールドは除外します
            if (field.Name.StartsWith("___") || field.Name.StartsWith("$") || field.HasTags("System,System.Core")) continue;
            // 文字列を取得します
            var currentString = model.GetFieldString(field.Name);
            // 文字列を置き換えます
            var replacedString = currentString.Replace("\v", "\r\n");
            if(currentString != replacedString)
            {
                model.SetField(field.Name, replacedString);
            }
        }
    }
}
次の例はすべての文字列フィールドを***でマスクする例です。
public void MaskStrings(ICommandContext c, ICommandParams p)
{
    var models = c.App.Workspace.CurrentProject.GetAllChildren();
    // すべてのモデルに対して処理をします
    foreach ( var model in models)
    {
        // メタクラスのフィールド情報を取得します
        var fields = model.Metaclass.GetFields();
        if ( fields == null ) continue;
        foreach(var field in fields)
        {
            // システムフィールドは除外します
            if (field.Name.StartsWith("___") || field.Name.StartsWith("$") || field.HasTags("System,System.Core")) continue;
            // 文字列 型以外は無視します
            if ( field.Type != "String" )  continue;
            // 文字列をマスクします
            model.SetField(field,"***");
        }
    }
}
ヒント
フィールドがシステムのフィールドかどうかは次の条件で判断できます。
- フィールド名が___または$で始まる場合。
- フィールドのタグにSystemやSystem.Coreが設定されている場合
下記のコードを参考にしてください。
IField field;
//...
// システムフィールドは除外します
if (field.Name.StartsWith("___") || field.Name.StartsWith("$") || field.HasTags("System,System.Core")) continue;