При разработке 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.
Не забудьте выбрать метод, который лучше всего подходит для вашего конкретного случая использования. Приятного кодирования!