Newer Version Available

This content describes an older version of this product. View Latest

WITH filteringExpression

You can filter records based on field values, for example, to filter according to category or to query and retrieve changes that are tracked in a user’s profile feed by using WITH filteringExpression. This optional clause can be added to a SELECT statement of a SOQL query.

Unlike the WHERE clause, which only supports fields from the object specified in the FROM clause, WITH allows you to filter by other related criteria. For example, you can use the WITH clause to filter articles based on their classification in one or more data category groups. The WITH clause can only be used in the following cases:

  • To filter records based on their categorization. See WITH DATA CATEGORY filteringExpression.
  • To query and retrieve record changes tracked in a user profile feed. See Custom Object__Feed in the Object Reference for Salesforce.
  • To filter records based on user access permissions on fields or objects being queried within Apex code. See Filter SOQL Queries Using WITH SECURITY_ENFORCED in the Apex Developer Guide.
  • To specify user mode access for Apex database operations. Apex code runs in system mode by default, which means that it runs with substantially elevated permissions over the user running the code. To enhance the security context of Apex, you can specify user mode access. Field-level security (FLS) and object permissions of the running user are respected in user mode, unlike in system mode. User mode always applies sharing rules; in system mode they’re controlled by class sharing keywords. See Enforce User Mode for Database Operations (Beta) in the Apex Developer Guide.

If WITH is specified, the query returns only records that match the filter and are visible to the user. If unspecified, the query returns only the matching records that are visible to the user.

The filtering expression in this statement is highlighted in bold. The syntax is explained in the following sections.

  • SELECT Title FROM KnowledgeArticleVersion WHERE PublishStatus='online' WITH DATA CATEGORY Geography__c ABOVE usa__c
  • SELECT Id FROM UserProfileFeed WITH UserId='005D0000001AamR' ORDER BY CreatedDate DESC, Id DESC LIMIT 20

Using RecordVisibilityContext

You can also use RecordVisibilityContext to filter WITH clauses. This feature is available in API version 48.0 and later.

For example:

Or:

The following fields can be used as parameters:

Field Description Default
maxDescriptorPerRecord The maximum number of descriptors to return per record. If the actual number of descriptors for a specific record exceeds that value, then a "tooManyDescriptors" visibility attribute is returned for that record.
  • orgs with CRM Analytics: 150
  • other orgs: 400
supportsDomains Whether the Visibility Service is allowed to generate "domain" visibility attributes. true
supportsDelegates Whether the Visibility Service is allowed to generate "delegate" visibility attributes. true

At least one field is necessary. This query is invalid:

This query is valid:

For more information, see RecordVisibility in the Object Reference.