Finding Custom Labels with Specific Values Using SOQL
This guide explains how to use SOQL (Salesforce Object Query Language) to retrieve custom labels based on their values. Since custom labels are stored as key-value pairs, you can't directly query the value itself. Instead, you need a workaround, leveraging the Label
field which holds the key-value pairs.
Understanding the Challenge
The CustomLabel
object in Salesforce doesn't have a separate field for the value of a label. The Label
field contains both the developer name (key) and the value, separated by a colon. Therefore, we need to use string manipulation within our SOQL query to find labels based on their values.
SOQL Query Approach
We'll employ the LIKE
operator in our SOQL query to filter the Label
field. This operator allows us to search for a specific substring within the Label
field (which includes the value after the colon).
Here's the general structure:
SELECT DeveloperName, Label FROM CustomLabel WHERE Label LIKE '%YourValue%'
Replace 'YourValue'
with the value you're searching for. The %
wildcard character is crucial; it allows the query to find any label containing your specified value anywhere within the Label field string.
Example:
Let's say you have a custom label with the DeveloperName "My_Custom_Label" and a value of "Welcome to My App!". To find this label using SOQL, you would use the following query:
SELECT DeveloperName, Label FROM CustomLabel WHERE Label LIKE '%Welcome to My App%'
This query will return the DeveloperName
and the complete Label
(key:value pair) for any custom labels containing "Welcome to My App!".
Important Considerations:
-
Case Sensitivity: The
LIKE
operator is case-sensitive. If your value is "Welcome to My App!", searching for "%welcome to my app%" will not return a match. Consider using lower-case versions if case insensitivity is required. However, directly implementing case-insensitiveLIKE
in SOQL isn't possible; you'll have to handle it programmatically after retrieving the results (e.g., in Apex). -
Multiple Matches: If your value is a substring that appears in multiple labels, the query will return all matching labels.
-
Performance: For a large number of custom labels, this approach might impact query performance. Consider adding more specific criteria to refine your search if performance becomes an issue. Using more specific filter criteria improves query performance.
-
Error Handling: Always handle potential exceptions (e.g.,
QueryException
) within your code that executes this SOQL query. -
Alternative Approach (Apex): For more complex scenarios or if you need case-insensitive searches, consider using Apex to fetch all custom labels and then filter them programmatically in your Apex code using string manipulation techniques like
String.contains()
and case-insensitive comparisons. This offers greater flexibility but requires Apex programming.
Conclusion
While SOQL doesn't directly support querying custom label values, using the LIKE
operator and wildcard characters provides an effective way to retrieve labels based on their value. Remember to account for case sensitivity and potential performance impacts. For more complex scenarios, Apex provides a powerful alternative.