Export (0) Print
Expand All

Using FetchXML

banner art

[Applies to: Microsoft Dynamics CRM 4.0]

Fetch is a proprietary query language that is used in Microsoft Dynamics CRM. It is based on a schema that describes the capabilities of the language. The FetchXML language supports similar query capabilities as query expression. It is used primarily as a serialized form of query expression, used to save a query as a user owned saved view in the userquery entity or as an organization owned view in the savedquery entity. A FetchXML query can be executed by using the Fetch method. There are also messages to convert between query expression and FetchXML.

Generally, the RetrieveMultiple method performs faster than the Fetch method because it does not have to parse the query.

Microsoft Dynamics CRM 4.0 supports a new attribute on the link-entity node called visible. Setting visible to false will hide the linked entity in the advanced find user interface. It will still participate in the execution of the query and will return the appropriate results.

The following table lists the messages that work with the FetchXml language.

MessageDescription
ExecuteFetchExecutes a query.
FetchXmlToQueryExpression Converts from FetchXML to query expression.
QueryExpressionToFetchXml Converts from query expression to FetchXML.
ValidateSavedQueryValidates a saved query (view).

Warning   You should avoid using all-attributes in a fetch query because of the impact on a subsequent update of records. In an update, this will set all field values, even if they are unchanged, and often triggers cascaded updates to child records.

Example

The following code examples show how to use FetchXML. The first FetchXML statement retrieves all accounts. The second retrieves all accounts where the last name is not equal to Cannon. Notice that in either case, the privileges of the logged on user will affect the set of records returned. The Fetch method only retrieves records for which the logged on user has read access.

[C#]
// Set up the CRM Service.
CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0; 
token.OrganizationName = "AdventureWorksCycle";
 
CrmService service = new CrmService();
service.Url = ""http://<servername>:<port>/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

// Retrieve all accounts.
// Be aware that using all-attributes may adversely affect performance
// and cause unwanted cascading in subsequent updates.
// A best practice is to retrieve the least amount of data required.
string fetch1 = "<fetch mapping='logical'>";
fetch1 += "<entity name='account'><all-attributes/>";
fetch1 += "</entity></fetch>";

// Fetch the results.
String result1 = service.Fetch(fetch1);

// Retrieve all accounts owned by the user who has read access rights to the accounts and
// where the last name of the user is not Cannon.
string fetch2 = @"
   <fetch mapping='logical'>
      <entity name='account'>
<attribute name='accountid'/>
<attribute name='name'/>
<link-entity name='systemuser' to='owninguser'>
   <filter type='and'>
      <condition attribute='lastname' operator='ne' value='Cannon' />
   </filter>
</link-entity>
      </entity>
   </fetch>
   ";

// Fetch the results.
String result2 = service.Fetch(fetch2);
[Visual Basic .NET]
' Set up the CRM Service.
Dim service As New CrmService()
service.Credentials = System.Net.CredentialCache.DefaultCredentials

' Retrieve all accounts.
' Be aware that using all-attributes may adversely affect performance
' and cause unwanted cascading in subsequent updates.
' A best practice is to retrieve the least amount of data required.
Dim fetch1 As String = _
      "<fetch mapping='logical'>" + _
"<entity name='account'>" + _
   "<all-attributes/>" + _
"</entity>" + _
      "</fetch>"

' Fetch the results.
Dim result1 As String = service.Fetch(fetch1)

' Retrieve all accounts owned by the user who has read access rights to the accounts and
' where the last name of the user is not Cannon.

Dim fetch2 As String = _
      "<fetch mapping='logical'>" + _
"<entity name='account'>" + _
   "<attribute name='accountid'/>" + _
   "<attribute name='name'/>" + _
   "<link-entity name='systemuser' to='owninguser'>" + _
      "<filter type='and'>" + _
"<condition attribute='lastname' operator='ne' value='Cannon' />" + _
      "</filter>" + _
   "</link-entity>" + _
"</entity>" + _
      "</fetch>"

' Fetch the results.
Dim result2 As String = service.Fetch(fetch2)

 

See Also

Reference

Other Resources


© 2010 Microsoft Corporation. All rights reserved.


Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft