WITH DATA CATEGORY

You can search for Salesforce Knowledge articles and questions by their data category in a SOQL query. WITH DATA CATEGORY is an optional clause in a SELECT statement that’s used to filter records that are associated with one or more data categories and are visible to users.

If WITH DATA CATEGORY is specified, the query() returns only matching records that are associated with the specified data categories and are visible to the user. If unspecified, the query() only returns the matching records that are visible to the user.

CategoryData is an object and DATA CATEGORY is syntax in a SOQL WITH clause. WITH DATA CATEGORY is valid syntax, but WITH CategoryData is not supported.

A SOQL statement using a WITH DATA CATEGORY clause must also include a FROM {ObjectTypeName} clause where ObjectTypeName equals:

  • KnowledgeArticleVersion to query all article types
  • an article type API Name to query a specific article type
  • Question to query questions

When ObjectTypeName equals to KnowledgeArticleVersion or any article type API Name in the FROM clause, a WHERE clause must be specified with one of the following parameters:

  • PublishStatus to query articles depending on their status in the publishing cycle:
    • WHERE PublishStatus='online' for published articles
    • WHERE PublishStatus='archived' for archived articles
    • WHERE PublishStatus='draft' for draft articles
  • Id to query an article based on its id

For information on article types or questions, see “Knowledge Article Types” in Salesforce Help.

The WITH DATA CATEGORY clause does not support bind variables. The clause can have no more than three data category conditions.

The filteringExpression in the WITH DATA CATEGORY clause uses the following syntax:

The examples in this section are based on the following data category group:

The category filtering in the statements is noted.

  • SELECT Title FROM KnowledgeArticleVersion WHERE PublishStatus='online' WITH DATA CATEGORY Geography__c ABOVE usa__c
    • Where the filter is WITH DATA CATEGORY Geography__c ABOVE usa__c
  • SELECT Title FROM Question WHERE LastReplyDate > 2005-10-08T01:02:03Z WITH DATA CATEGORY Geography__c AT (usa__c, uk__c)
    • Where the filter is WITH DATA CATEGORY Geography__c AT (usa__c, uk__c)
  • SELECT UrlName FROM KnowledgeArticleVersion WHERE PublishStatus='draft' WITH DATA CATEGORY Geography__c AT usa__c AND Product__c ABOVE_OR_BELOW mobile_phones__c
    • Where the filter is WITH DATA CATEGORY Geography__c AT usa__c AND Product__c ABOVE_OR_BELOW mobile_phones__c

You can only use the AND logical operator. The following syntax is incorrect as OR is not supported: