Usar FetchXML para crear una consulta

FetchXML es un lenguaje de consulta patentado basado en XML de Microsoft Dataverse utilizado para consultar datos utilizando la API web o el SDK para .NET. Se basa en un esquema que describe las funciones del idioma. El idioma FetchXML admite funciones de consulta similares a las expresiones de consulta. Además, se usa como formulario serializado de consulta, usado para guardar una consulta como una vista guardada propiedad del usuario en la Tabla UserQuery y como una vista guardada propiedad de la organización en la Tabla SavedQuery.

Crear la cadena de consulta FetchXML

Para ejecutar una consulta FetchXML, primero debe crear la cadena de consulta XML. Después de crear la cadena de consulta, useIOrganizationService RetrieveMultiple método para ejecutar la cadena de consulta. Los privilegios del usuario que inició la sesión afectan el conjunto de registros devueltos. Solo se devolverán los registros a los que tiene acceso de lectura el usuario que inició sesión

La cadena de consulta de FetchXML debe adaptarlas a la definición del esquema para el lenguaje FetchXML. Para obtener más información, consulte Esquema Fetch XML.

Puede guardar una consulta al crear un registro de SavedQuery. Defina visible en el nodo de link-entity en false para ocultar la tabla vinculada en la interfaz de usuario Búsqueda avanzada. Aún así participará en la ejecución de la consulta y devolverá los resultados apropiados.

Advertencia

No se recuperan todas las columnas en una consulta debido al efecto negativo en el rendimiento. Este valor es "true" si la consulta se usa como parámetro de una solicitud de actualización. En una actualización, si están incluidas todas las columnas, se definen todos los valores de campo, incluso si no se cambian. Con frecuencia, esto activa las actualizaciones en cascada para los registros secundarios.

Cadenas de consulta FetchXML de ejemplo

En el siguiente ejemplo, la instrucción FetchXML recupera todas las cuentas:

  
<fetch mapping='logical'>   
   <entity name='account'>  
      <attribute name='accountid'/>   
      <attribute name='name'/>   
   </entity>  
</fetch>  
  

En el siguiente ejemplo, la instrucción FetchXML recupera todas las cuentas donde el apellido del usuario que es propietario no es igual a Cannon:

  
<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>  
  

En el siguiente ejemplo, la instrucción FetchXML utiliza Count para definir el número máximo de registros de devolución de la consulta. En este caso las primeras 3 cuentas se devuelven desde la consulta,

<fetch mapping='logical' count='3'>  
  <entity name='account'>  
   <attribute name='name' alias='name'/>  
  </entity>
</fetch>  

Este ejemplo muestra una combinación interna entre EntityMap y AttributeMap donde EntityMapID coincide.

<fetch version='1.0' mapping='logical' distinct='false'>  
   <entity name='entitymap'>  
      <attribute name='sourceentityname'/>  
      <attribute name='targetentityname'/>  
      <link-entity name='attributemap' alias='attributemap' to='entitymapid' from='entitymapid' link-type='inner'>  
         <attribute name='sourceattributename'/>  
         <attribute name='targetattributename'/>  
      </link-entity>  
   </entity>  
 </fetch>  

Importante

Una consulta de FetchXML tiene un límite de un máximo de 15 tablas de vínculos permitidas.

Ejecutar la consulta FetchXML

Puede ejecutar una consulta FetchXML mediante la API web o el SDK para .NET.

Uso de la API web

Puede pasar una cadena FetchXml con código URL al entityset correspondiente mediante el parámetro de cadena de la consulta fetchXml. Más información: Usar FetchXml con API web.

Usar SDK para .NET

Use el IOrganizationService.RetrieveMultiple método pasando un FetchExpression donde la Query propiedad contiene la consulta FetchXml.

El siguiente código muestra cómo ejecutar una consulta FetchXML con el servicio de la organización:

  
// Retrieve all accounts owned by the user with 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> ";   
  
EntityCollection result = _serviceProxy.RetrieveMultiple(new FetchExpression(fetch2));
foreach (var c in result.Entities)
{
   System.Console.WriteLine(c.Attributes["name"]);
}  

Importante

Cuando trabaje con código como el ejemplo anterior, siempre asegúrese de que su cadena sea una cadena XML codificada válida. Esto es especialmente cierto con respecto a la posibilidad de contener caracteres especiales en valores de condición como &<> codificados como &amp;&lt;&gt;.

Puede convertir una consulta de FetchXML en una expresión de consulta con el mensaje de FetchXmlToQueryExpressionRequest.

Resultados de la consulta FetchXML

Cuando se ejecuta una consulta de FetchXML usando el método OrganizationServiceProxy.RetrieveMultiple(QueryBase) se autentica el usuario. Método, el valor devuelto es un EntityCollection que contiene los resultados de la consulta. A continuación puede iterar a través de la colección de tablas. El ejemplo anterior usa el bucle de foreach para iterar a través de la recopilación de resultados de la consulta de FetchXML.

Usar caracteres comodín en condiciones que utilizan valores de cadena

Puede usar caracteres comodín cuando construye consultas usando condiciones en valores de cadena. Más información: Usar caracteres comodín en condiciones para valores de cadena

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).