php 使用SOQL选择Salesforce对象的所有字段

h9vpoimq  于 2023-05-16  发布在  PHP
关注(0)|答案(4)|浏览(131)

我想做一些可以在SQL中完成的事情:

select * from table

如何使用SOQL实现这一点?
我将无法使用Apex代码,因为我从PHP页面运行SOQL查询。

fykwrbwg

fykwrbwg1#

默认情况下,SOQL不支持以这种方式选择所有字段:

SELECT * From sObject

检查下面接受对象名称的泛型类,并在此基础上给出一个SOQL查询,用于将所有字段选择为String。

顶点类:

public inherited sharing class GenerateDynamicSOQLQuery {

    public static string getSOQLQuery(String strObjectName) {
        if(!String.isBlank(strObjectName)) {
            String strQuery = 'SELECT ';
            list<Schema.DescribeSObjectResult> objDiscribe = Schema.describeSObjects(new List<String>{strObjectName});
            map<String, Schema.SObjectField> objFileds = objDiscribe[0].fields.getMap();
            list<String> lstOfFieldNames = new list<String>(objFileds.keySet());
            strQuery = strQuery + String.join(lstOfFieldNames, ', ') + ' FROM ' +strObjectName;
            return strQuery;
        }
        else {
            return null;
        }
    }
}

**Demo:**要获取生成的查询的输出,请打开“Execute Anonymous”窗口,然后执行以下代码:

String strQuery = GenerateDynamicSOQLQuery.getSOQLQuery('Account');
//strQuery += ' WHERE Industry = \'Banking\' LIMIT 1';
strQuery += ' LIMIT 1';
System.debug('Account Records ====>  '+Database.query(strQuery));

查询结果将在调试日志中。

fkvaft9z

fkvaft9z2#

您可以使用API提供的 meta数据来确定对象的哪些字段可供当前用户使用。
有关EnterprisePartner WSDL,请参阅PHP Toolkit 20.0 DescribeSObject Sample。您需要fields数组中的Name。将它们与逗号分隔符一起追加,以形成可访问字段的完整列表。

sy5wg1nm

sy5wg1nm3#

您可以使用FIELDS()作为完整的字段列表。例如:

SELECT FIELDS(ALL) FROM Account LIMIT 200
SELECT FIELDS(CUSTOM) FROM Account LIMIT 200
SELECT FIELDS(STANDARD) FROM Account

您还可以将FIELDS()与字段列表中的其他字段名称混合使用。例如:

SELECT Name, Id, FIELDS(CUSTOM) FROM Account LIMIT 200
SELECT someCustomField__c, FIELDS(STANDARD) FROM Account

注:最大限值为200 -参见文档here

vs3odd8k

vs3odd8k4#

此SOQL查询没有200的限制:

SELECT Label,
       QualifiedApiName
  FROM FieldDefinition
 WHERE EntityDefinition.QualifiedApiName = 'Account'

相关问题