Освоение динамического SOQL: выход из одиночной кавычки и не только

Динамический SOQL — это мощная функция разработки Salesforce, которая позволяет разработчикам динамически создавать запросы во время выполнения. Однако одна из распространенных проблем, с которыми сталкиваются разработчики, — это экранирование одинарной кавычки в динамических запросах SOQL. В этой статье блога мы рассмотрим различные способы обхода одинарных кавычек и предоставим вам практические примеры кода, которые помогут преодолеть это препятствие и улучшить ваши навыки работы с динамическим SOQL.

Метод 1: использование String.replaceAll()
Один простой способ избежать одинарной кавычки — использовать метод replaceAll(). Этот метод заменяет все вхождения определенного символа или регулярного выражения в строке другим символом или строкой. Вот пример:

String searchKey = 'Salesforce\'s products';
String escapedSearchKey = searchKey.replaceAll('\'', '\\\'');

Метод 2: использование String.escapeSingleQuotes()
Salesforce предоставляет встроенный метод escapeSingleQuotes(), который автоматически экранирует символ одинарной кавычки в строке. Этот метод упрощает процесс, автоматически обрабатывая экранирование. Вот пример:

String searchKey = 'Salesforce\'s products';
String escapedSearchKey = String.escapeSingleQuotes(searchKey);

Метод 3: использование String.format()
Другой подход — использовать метод String.format(), который позволяет форматировать строку, заменяя заполнители соответствующими значениями. Используя этот метод, вы можете безопасно избежать одинарной кавычки. Вот пример:

String searchKey = 'Salesforce\'s products';
String escapedSearchKey = String.format('%1$s', searchKey);

Метод 4: использование переменных привязки Apex
Эффективным способом избежать необходимости полностью экранировать одинарные кавычки является использование переменных привязки Apex. Переменные привязки — это заполнители в запросе, которые позже заменяются фактическими значениями. Salesforce автоматически выполняет любое необходимое экранирование при использовании переменных привязки. Вот пример:

String searchKey = 'Salesforce\'s products';
List<Account> accounts = [SELECT Id, Name FROM Account WHERE Name = :searchKey];

В этой статье мы рассмотрели несколько методов экранирования одинарной кавычки в динамических запросах SOQL. Независимо от того, решите ли вы использовать переменные привязки replaceAll(), escapeSingleQuotes(), String.format()или Apex, теперь у вас есть набор инструментов, полный методов решения этой распространенной проблемы.. Освоив эти методы, вы сможете писать более надежные и безошибочные динамические запросы SOQL в своих проектах разработки Salesforce.