OData system query options using the OData endpoint
Applies To: Dynamics CRM 2013
You can refine the results of your query by using system query options. The following table lists the query string options defined in the OData protocol that are implemented in the OData endpoint for Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online.
Option |
Description |
---|---|
$expand |
Directs that related records should be retrieved in the record or collection being retrieved. |
$filter |
Specifies an expression or function that must evaluate to true for a record to be returned in the collection. |
$orderby |
Determines what values are used to order a collection of records. |
$select |
Specifies a subset of properties to return. |
$skip |
Sets the number of records to skip before it retrieves records in a collection. |
$top |
Determines the maximum number of records to return. |
$expand
Directs that related records should be retrieved in the record or collection being retrieved.
If you want to retrieve related records, locate the name of the entity relationship that defines this relationship. You may have to view the entity relationship information in the application to correctly identify the relationship or the conceptual schema definition language (CSDL) for the Organization Data Service.
For example, to retrieve opportunity records related to accounts, use the opportunity_customer_accounts entity relationship. The query /AccountSet?$expand=opportunity_customer_accounts returns the opportunity records and the account records.
If you’re limiting the columns returned, you must also include the name of the navigation property in the query. For example, the query /AccountSet?$select=Name,opportunity_customer_accounts&$expand=opportunity_customer_accounts returns only the account name and the expanded opportunity records.
Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online doesn’t support querying a multilevel relationship property. For example, this query, intended to retrieve information about the owning user of opportunities related to accounts, won’t work: /AccountSet?$expand=opportunity_customer_accounts/opportunity_owning_user.
By default, you can define up to six relationships to expand. This query, expanding both the opportunities and system user that owns the account, will work, /AccountSet?$select=Name,opportunity_customer_accounts,user_accounts&$expand=opportunity_customer_accounts,user_accounts.
Note
The number of related records returned is subject to the same limitation on the number of records returned. For more information, see Limitations on number of records returned. You can increase the number of relationships to expand by changing the ServerSettings MaxExpandCount setting value.
More information: OData: Filter System Query Option ($expand)
$filter
Specifies an expression or function that must evaluate to true for a record to be returned in the collection.
If you’re retrieving additional sets of data using the next link, you shouldn’t change the $filter query option value because this causes unpredictable results.
The OData specification for the Filter System Query Option describes the operators used to create an expression to evaluate in the filter. Microsoft Dynamics CRM uses all the logical operators and a subset of the functions available, but doesn’t support use of the arithmetic operators. Filters can use grouped conditions indicated by parentheses. Comparisons of time values must use the following format: datetime’<time value>’, for example datetime'2010-07-15' or datetime'2010-07-15T16:19:54Z'.
The following table lists the operators supported by Microsoft Dynamics CRM.
Operator |
Description |
Example |
---|---|---|
eq |
Equal |
/AccountSet?$filter=Address1_City eq 'Redmond' |
ne |
Not equal |
/AccountSet?$filter=Address1_City ne null |
gt |
Greater than |
/AccountSet?$filter=CreditLimit/Value gt 1000 |
ge |
Greater than or equal |
/AccountSet?&$filter=CreditLimit/Value ge 1000 |
lt |
Less than |
/AccountSet?$filter=CreditLimit/Value lt 1000 |
le |
Less than or equal |
/AccountSet?$filter=CreditLimit/Value le 1000 |
and |
Logical and |
/AccountSet?$filter=CreditLimit/Value ge 1000 and Address1_StateOrProvince eq 'TX' |
or |
Logical or |
/AccountSet?$filter=AccountCategoryCode/Value eq 2 or AccountRatingCode/Value eq 1 |
not |
Logical Negation |
/AccountSet?$filter=(AccountCategoryCode/Value ne null) and not (AccountCategoryCode/Value eq 1) |
You can use the $filter query option to filter for the value of an EntityReference attribute. For example, if you have the Id value for a SystemUser record, you can retrieve a list of all the account records that a user is assigned by using the following filter:
/AccountSet?$filter=OwnerId/Id eq (guid'" + SystemUserId + "')
The following table lists the functions supported by Microsoft Dynamics CRM.
Function |
Example |
---|---|
startswith |
/AccountSet?$filter=startswith(Name, 'a') |
substringof |
/AccountSet?$filter=substringof('store',Name) |
endswith |
/AccountSet?$filter=endswith(Name, '(sample)') |
More information: OData: Filter System Query Option ($filter)
$orderby
Determines what values are used to order a collection of records. By default, the order is ascending. Use desc to reverse the order or asc to explicitly set the default.
If you’re retrieving additional sets of data using the next link, you shouldn’t change the $orderby query option value because this causes unpredictable results.
Note
You can select up to 12 columns using $orderby.
When ordering by complex types, such as EntityReference or OptionSetValue, only the attribute name should be specified. For example, to order by the primary contact of an account, use the query $orderby=PrimaryContactId. Specifying $orderby=PrimaryContactId/Name will give you a Bad Request HTTP error (HTTP Error Code 400).
The following sample lists account records by country/region in ascending order, and by city in descending order:
/AccountSet?$select=Address1_Country,Address1_City,Name&$orderby=Address1_Country,Address1_City desc&$filter=(Address1_Country ne null) and (Address1_City ne null)
More information: OData: Filter System Query Option ($orderby)
$select
Specifies a subset of properties to return and the order in which the columns of data will be organized. The default is to return all columns that correspond to $select=*.
If you use $expand to include related data and you use $select to limit the columns returned, you must also include the name of the navigation property in the query. For example, the following query, /AccountSet?$select=Name,opportunity_customer_accounts&$expand=opportunity_customer_accounts, returns only the account name and the expanded opportunity records.
Note
There is a maximum path length of 2048 characters for POST and GET requests in Internet Explorer. You can easily reach this limit if you were to include every attribute in the account entity in the $select option. For more information, see Microsoft KB 208427
More information: OData: Filter System Query Option ($select)
$skip
Sets the number of records to skip before retrieving records in a collection.
If you’re retrieving additional sets of data using the next link, you shouldn’t change the $skip query option value because this causes unpredictable results.
More information: OData: Filter System Query Option ($skip)
$top
Determines a maximum number of records to return.
If you’re retrieving additional sets of data using the next link, you shouldn’t change the $top query option value because this will cause unpredictable results.
More information: OData: Filter System Query Option ($top)
Unsupported system query options
Microsoft Dynamics CRM 2013 and Microsoft Dynamics CRM Online doesn’t support using the following system query options:
$inlinecount
$count
$format
See Also
Query Microsoft Dynamics CRM 2013 data using the OData endpoint
OData: URI Conventions