the industrial

ブログと言うより自分のためのメモ以外の何モノでもないです。でも読んでくださってありがとうございます。

ApexCode で Field Level Security チェックを行う

isCreateable / isUpdateable

例えば Some__c というカスタムオブジェクトがあるとして、 full_name__c というカスタム項目を永続化したい場合、事前に下記の様なメソッドでField Level Security チェックを行う。

public static void isCreateable(List<String> fieldNames, Schema.DescribeSObjectResult sObj) {
    Map<String, Schema.SObjectField> fieldMap = sObj.fields.getMap();
    for (String fieldName : fieldNames) {
        Schema.SObjectField sObjField = fieldMap.get(fieldName);
        if (sObjField == null) {
            throw new SomeColumnNotFoundException();
        }
        if (!sObjField.getDescribe().isCreateable()) {
            throw new SomeFlsException();
        }
    }
}

呼び出し側

isCreateable(new List<String> { 'full_name__c' }, Schema.SObjectType.Some__c);

Schema.DescribeSObjectResultSchema.SObjectType.Some__c でカスタムオブジェクトのTypeを呼び出した際の抽象化された型。

もしかしてカスタム項目もString型で指定せず、ちゃんとした型で指定出来るかも?

isCreateableisUpdateable にしてあげれば、UPDATEも同じようにチェック出来る。

isDeletable

削除チェックはもうちょっと単純。

public static void isDeletable(Schema.DescribeSObjectResult sObj) {
    if (!sObj.isDeletable()) {
        throw new SomeFlsException();
    }
}

呼び出し側

isDeletable(Schema.SObjectType.Some__c);