Создание FLS для объекта Saleforce

Есть ли способ применить проверку создания FLS - Schema.sObjectType.Account.fields.Name.isCreateable() к следующему?

public static Account createAccount() {
    return new Account(
        Name = 'Test',
        OwnerId = UserInfo.getUserId()
    );
}

Интересно, есть ли способ подать заявку без повторной записи на следующее:

public static Account createAccount() {
    Account a = new Account();
    if (Schema.sObjectType.Account.fields.Name.isCreateable()) {
        a.Name = 'Test';
    }
    if (Schema.sObjectType.Account.fields.OwnerId.isCreateable()) {
        a.OwnerId = UserInfo.getUserId();
    }
    insert a;
}

person Paul P    schedule 04.02.2021    source источник


Ответы (1)


Вы можете создать общий метод, который может выполнять итерацию по каждому полю для проверки FLS.

  • если доступ доступен, сохраните
  • если доступ недоступен, удалите конкретное поле из экземпляра объекта.

Я создал общий метод для усечения недоступных для записи полей следующим образом:

    public static List<SObject> truncateNotWriteableFields(List<SObject> listSObject){

    Set<String> readOnlyFields = new Set<String>();
    List<SObject> listSObjectNew = new List<SObject>();
    if(listSObject.size() < 1){
        return listSObjectNew;
    }
    Schema.SObjectType sObjType = listSObject.getSObjectType();

    for(SObjectField field : sObjType.getDescribe().fields.getMap().values()){
        if(field.getDescribe().isAccessible() && !field.getDescribe().isUpdateable() && !field.getDescribe().isCreateable()){
            readOnlyFields.add(String.valueOf(field));
        }
    }
    readOnlyFields.remove('Id'); // avoid removal in update
    for(SObject obj : listSObject){
        Map<String, Object> objMap = (Map<String, Object>) JSON.deserializeUntyped( JSON.serialize( obj ) );
        objMap.keySet().removeAll(readOnlyFields);
        SObject objWithoutNotWritableFields = (SObject) JSON.deserialize( JSON.serialize( objMap ), SObject.class );
        system.debug('objWithoutNotWritableFields=>'+objWithoutNotWritableFields);
        listSObjectNew.add(objWithoutNotWritableFields);
    }
    
    return listSObjectNew;
}
person Jasneet Dua    schedule 04.02.2021