Salesforce Spring '21 新功能 SOQL FIELDS()方法介绍

2021-11-16 17:09:49 浏览数 (1)

使用过Oracle或者Sql Server的朋友们都知道,语句【SELECT * FROM 表】可以查询整个表的项目,之前Salesforce是不支持此功能的,只能每个项目都写一遍,非常麻烦,随着2021年2月14日,Spring '21的正式上线,此类功能终于可以使用了,它就是今天要介绍的SOQL FIELDS()方法,前提是当前用户对于取得项目必须具备参照权限,

具体有以下三种方式,

·FIELDS(ALL) -取得所有项目

·FIELDS(CUSTOM) -取得所有自定义项目

·FIELDS(STANDARD) -取得所有标准项目

1.下面我们来简单测试一下FIELDS(STANDARD)

SELECT FIELDS(STANDARD) FROM Opportunity

2.FIELDS(CUSTOM)和标准项目组合起来,也是没有问题

SELECT Name,FIELDS(CUSTOM) FROM Opportunity LIMIT 200

3.制限问题

通过上边的SOQL语句我们看到使用【LIMIT 200】指定了件数限制,如果不指定件数的话又会怎样呢。

通过实验我们发现,不指定的情况下会发生下边错误,

「The SOQL FIELDS function must have a LIMIT of at most 200」

所以方法【FIELDS(ALL) 】和【FIELDS(CUSTOM)】是必须要指定件数限制的,

另外,方法【FIELDS(ALL) 】和【FIELDS(CUSTOM)】还有一个最大的制限就是在Apex中不支持使用,我们可以在匿名框中试一试。

实行结果:

「The SOQL FIELDS function is not supported with an unbounded set of fields in this API. 」

4.Apex内全项目查询方法

根据上边的实验结果,想必大家有点失望,在Apex内居然只可以使用FIELDS(STANDARD),如果把所有自定义项目都写一遍,即麻烦,看着也不美观,那么有没有解决方案呢,我们可以试着下边的做法。

首先做一个Apex共通类,用于取得指定Object的全部自定义项目,然后进行查询操作,如下

代码语言:javascript复制
 public with sharing class GetAllCustomFieldsUtil {
    public String getAllCustomFields(String objName) {
        String customQuery = '';
        String delimiter = ', ';
        Schema.SObjectType objType = Schema.getGlobalDescribe().get(objName);
        Map<String, sObjectField> fieldsMap = objType.getDescribe().fields.getMap();
        for (String fieldName : fieldsMap.keySet()) {
            if (fieldName.endsWith('__c')) {
                customQuery  = delimiter   fieldName;
            }
        }
        System.debug('query = '   customQuery);
        return customQuery;
    }
}

0 人点赞