微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

FLS 为 Salesforce 对象创建

如何解决FLS 为 Salesforce 对象创建

有没有办法将 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;
}

解决方法

您可以创建一个可以迭代每个字段以检查 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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。