Изучение методов Apex для получения полей объекта по имени API

При разработке Salesforce часто необходимо получить поля объектов по их именам API. Эту задачу можно решить с помощью различных методов Apex. В этой статье блога мы рассмотрим несколько методов, а также примеры кода, демонстрирующие получение полей объекта с помощью Apex. Давайте погрузимся!

Метод 1. Использование класса схемы
Класс Schema в Apex предоставляет мощные методы для доступа к метаданным об объектах Salesforce. Одним из таких методов является getGlobalDescribe(), который возвращает карту всех объектов в организации. Вот пример того, как получить поля объекта с помощью этого метода:

Map<String, Schema.SObjectType> globalDescribe = Schema.getGlobalDescribe();
Schema.SObjectType objType = globalDescribe.get('ObjectName');
Schema.DescribeSObjectResult objDescribe = objType.getDescribe();
Map<String, Schema.SObjectField> fieldsMap = objDescribe.fields.getMap();
for (String fieldName : fieldsMap.keySet()) {
    System.debug('Field Name: ' + fieldName);
}

Метод 2: использование Dynamic Apex
Dynamic Apex позволяет писать код, который может адаптироваться к различным типам объектов во время выполнения. Используя класс Typeи метод getSObjectType(), вы можете динамически получать поля объекта. Вот пример:

String objectName = 'ObjectName';
Type objectType = Type.forName('Schema.' + objectName);
if (objectType != null) {
    Schema.DescribeSObjectResult objDescribe = objectType.newInstance().getSObjectType().getDescribe();
    Map<String, Schema.SObjectField> fieldsMap = objDescribe.fields.getMap();
    for (String fieldName : fieldsMap.keySet()) {
        System.debug('Field Name: ' + fieldName);
    }
}

Метод 3. Использование API инструментов
API инструментов Salesforce предоставляет набор служб RESTful для получения метаданных об объектах Salesforce. Вы можете использовать Tooling API в Apex для получения полей объекта. Вот пример того, как получить поля объекта с помощью Tooling API:

HttpRequest request = new HttpRequest();
request.setEndpoint(URL.getSalesforceBaseUrl().toExternalForm() + '/services/data/v52.0/tooling/query/?q=' + 
                   'SELECT+EntityDefinition.QualifiedApiName,QualifiedApiName+FROM+FieldDefinition' + 
                   '+WHERE+EntityDefinition.QualifiedApiName+=+\'ObjectName\'');
request.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId());
request.setMethod('GET');
Http http = new Http();
HttpResponse response = http.send(request);
if (response.getStatusCode() == 200) {
    Map<String, Object> result = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
    List<Map<String, Object>> records = (List<Map<String, Object>>) result.get('records');

    for (Map<String, Object> record : records) {
        String fieldName = (String) record.get('QualifiedApiName');
        System.debug('Field Name: ' + fieldName);
    }
}

Получение полей объекта по имени API — распространенное требование при разработке Salesforce. В этой статье мы рассмотрели три различных метода достижения этой цели с помощью Apex. Класс Schema, Dynamic Apex и Tooling API предоставляют разработчикам гибкие возможности для получения полей объектов на основе их имен API. Используя эти методы, вы можете оптимизировать процесс разработки и создавать надежные приложения Salesforce.

Не забудьте выбрать метод, который лучше всего подходит для вашего конкретного случая использования. Приятного кодирования!