Filtrar filas mediante FetchXml
Para establecer condiciones en las filas de datos a devolver, use el elemento de filtro dentro de una entidad, vínculo-entidad u otro elemento filter
.
Para establecer las condiciones, agregue uno o más elementos de condición al filtro. El atributo que contiene filter
type
determina si todas (and
) o cualquiera (or
) de las condiciones deben cumplirse. El valor predeterminado es and
. Al anidar elementos de filtro, puede crear criterios de filtro complejos que combinen criterios evaluados mediante and
o or
.
Cada condition
tiene un atributo operator
para evaluar el valor de una columna de fila. Hay muchos valores de operador de condición entre los que puede elegir.
Por ejemplo, la siguiente consulta devuelve todos los registros de cuentas donde address1_city
es igual a 'Redmond'. Utiliza <filter type='and'>
con el operador eq.
<fetch>
<entity name='account'>
<attribute name='name' />
<filter type='and'>
<condition attribute='address1_city'
operator='eq'
value='Redmond' />
</filter>
</entity>
</fetch>
Esta consulta devuelve los registros de cuenta donde address1_city
es igual a 'Redmond', 'Seattle' o 'Bellevue'. Utiliza <filter type='or'>
con tres elementos de condición y cada uno usa el operador eq.
<fetch>
<entity name='account'>
<attribute name='name' />
<attribute name='address1_city' />
<filter type='or'>
<condition attribute='address1_city'
operator='eq'
value='Redmond' />
<condition attribute='address1_city'
operator='eq'
value='Seattle' />
<condition attribute='address1_city'
operator='eq'
value='Bellevue' />
</filter>
</entity>
</fetch>
La consulta anterior también se puede representar usando el operador in con un solo elemento condition
. Esta condición contiene múltiples elementos de valor para especificar los valores a comparar con address1_city
.
<fetch>
<entity name='account'>
<attribute name='name' />
<attribute name='address1_city' />
<filter type='and'>
<condition attribute='address1_city'
operator='in'>
<value>Redmond</value>
<value>Seattle</value>
<value>Bellevue</value>
</condition>
</filter>
</entity>
</fetch>
Parámetros de operador
Los operadores pueden no requerir ningún parámetro, un único parámetro o múltiples parámetros. El operador determina cómo se establece el valor a evaluar.
Sin parámetros
Algunos operadores no requieren ningún parámetro. Por ejemplo, puede utilizar el eoperador q-userid para evaluar cualquier identificador único y determinar si coincide con el Id. del usuario que llama.
<condition attribute='ownerid'
operator='eq-userid' />
Un solo parámetro
Cuando un operador requiere un solo parámetro, use el atributo value
para establecer el valor a evaluar.
Por ejemplo, puede utilizar el operador eq para evaluar el valor de la columna de elección statecode
de un registro estableciendo el atributo value
.
<condition attribute='statecode'
operator='eq'
value='0' />
Varios parámetros
Cuando un operador requiere múltiples parámetros, use el elemento de valor para especificar los valores a evaluar. Por ejemplo, puede utilizar el operador between para evaluar un número y determinar si se encuentra entre un conjunto de valores.
<condition attribute="numberofemployees"
operator="between">
<value>6</value>
<value>20</value>
</condition>
Filtros de vínculo-entidad
Cuando aplica un filtro en un vínculo-entidad, el filtro se aplicará con la combinación a menos que configure el filtro para que se produzca después de la combinación.
Cuando el valor del atributo vínculo-entidad link-type
es outer
, es posible que desee que el filtro se aplique después de la combinación configurando el valor del atributo condición entityname
. Si está usando un vínculo-entidad alias
, utilice el valor alias
para establecer el atributo entityname
. De lo contrario, establezca el valor del atributo entityname
en el valor del atributo vínculo-entidad name
.
Por ejemplo, la siguiente consulta devuelve contactos sin una cuenta primaria, o un cuenta primaria sin fax.
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter>
<condition entityname='a'
attribute='fax'
operator='null' />
</filter>
<link-entity name='account'
from='accountid'
to='parentcustomerid'
link-type='outer'
alias='a' />
</entity>
</fetch>
Filtrar por valores de columna en la misma fila
Puede crear filtros que comparen columnas con valores en la misma fila usando el atributo valueof
. Por ejemplo, si desea encontrar cualquier registro de contacto en el que el valor de la columna firstname
coincide con el valor de la columna lastname
, puede utilizar esta consulta:
<fetch>
<entity name='contact' >
<attribute name='firstname' />
<filter>
<condition attribute='firstname'
operator='eq'
valueof='lastname' />
</filter>
</entity>
</fetch>
Comparaciones de columnas de tablas cruzadas
Con solo FetchXML, puede comparar valores de campo en tablas relacionadas. El siguiente ejemplo devuelve filas donde la columna contacto fullname
coincide con la columna cuenta name
.
<fetch>
<entity name='contact'>
<attribute name='contactid' />
<attribute name='fullname' />
<filter type='and'>
<condition attribute='fullname'
operator='eq'
valueof='acct.name' />
</filter>
<link-entity name='account'
from='accountid'
to='parentcustomerid'
link-type='outer'
alias='acct'>
<attribute name='name' />
</link-entity>
</entity>
</fetch>
El elemento elemento vínculo-entidad debe usar un atributo alias
y el valor del parámetro valueof
debe hacer referencia a ese alias y al nombre de la columna en la tabla relacionada.
Limitaciones de los filtros de comparación de columnas
Existen limitaciones para este tipo de filtros:
Condición solo puede usar estos operadores:
Operator Descripción eq Los valores se comparan para igualdad. ne Los dos valores no son iguales. gt El valor es mayor que el valor comparado. ge El valor es mayor o igual que el valor comparado. lt El valor es menor que el valor comparado. le El valor es menor o igual que el valor comparado. Solo se pueden comparar dos columnas a la vez
No se admiten operaciones de condición extendida. Por ejemplo:
valueof='amount'+ 100
Las columnas deben ser del mismo tipo. Por ejemplo: no se puede comparar un valor de cadena con un valor numérico
Filtrar por valores en registros relacionados
Para filtrar valores en registros relacionados sin devolver esos valores, utilice un elemento de vínculo-entidad dentro del elemento de filtro con uno de los siguientes atributos link-type
:
Name | Descripción |
---|---|
any |
Úselo dentro de un elemento de filtro. Restringe los resultados a las filas principales con filas coincidentes en la entidad vinculada. |
not any |
Úselo dentro de un elemento de filtro. Restringe los resultados a las filas principales sin filas coincidentes en la entidad vinculada. |
all |
Úselo dentro de un elemento de filtro. Restringe los resultados a las filas principales donde existen filas con un valor de columna from coincidente en la entidad de enlace, pero ninguna de esas filas coincidentes satisface los filtros adicionales definidos para esta entidad de vínculo. Necesita invertir los filtros adicionales para encontrar filas principales donde cada fila de entidad de enlace coincidente satisfaga algunos criterios adicionales. |
not all |
Úselo dentro de un elemento de filtro. Restringe los resultados a las filas principales con filas coincidentes en la entidad vinculada. Este tipo de vínculo es equivalente a any a pesar del nombre. |
Cuando utiliza estos tipos de enlaces dentro de un elemento de filtro, estos filtros son condiciones secundarias que siguen el comportamiento definido por el atributo type
del filter
primario.
Los filtros que utilizan estos tipos devuelven la fila principal como máximo una vez, incluso si existen varias filas coincidentes en la entidad de vínculo. No permiten devolver valores de columna de las filas de la entidad de vínculo.
Ejemplos de filtros sobre valores en registros relacionados
Los siguientes ejemplos demuestran el filtrado de valores de registros relacionados. Estos ejemplos incluyen declaraciones SQL equivalentes para ayudar a explicar el comportamiento.
O bien, filtre con link-type
any
Esta consulta utiliza un filter
de tipo or
con un link-entity
secundario de tipo any
para devolver registros en contacto que:
- o bien son referenciados por la columna de búsqueda PrimaryContactId de al menos un registro de cuenta que tiene su columna de nombre igual a 'Contoso',
- o tienen la columna de lista de selección Contact.StateCode establecida en 1: Inactivo:
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='or'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='any'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
<condition attribute='statecode'
operator='eq'
value='1' />
</filter>
</entity>
</fetch>
link-type
not any
Esta consulta utiliza el tipo de vínculo not any
para devolver registros de la tabla contacto que no está referenciada por la columna de búsqueda PrimaryContactId de cualquier registro de cuenta que tenga su columna Nombre igual a 'Contoso'. Es posible que el registro de contacto siga siendo referenciado por registros de cuenta con otros valores de columna Nombre.
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='and'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='not any'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
</filter>
</entity>
</fetch>
link-type
not all
Nota
El significado de los tipos de vínculo all
y not all
es lo opuesto a lo que podrían implicar los nombres y, por lo general, se usan con filtros invertidos:
- Una entidad de vínculo de tipo
not all
es equivalente aany
y devuelve registros principales que tienen registros de entidad de vínculo que coinciden con los filtros. - Una entidad de vínculo de tipo
all
devuelve registros principales cuando existen algunos registros de entidad de enlace con un valor de columnafrom
coincidente pero ninguna de esas filas de entidad de vínculo satisface los filtros adicionales definidos dentro del elemento de entidad de vínculo.
Esta consulta utiliza un link-entity
del tipo not all
para devolver registros de la tabla contacto que están referenciados por la columna de búsqueda PrimaryContactId de como mínimo un registro de cuenta que tiene su Columna de nombre igual a 'Contoso':
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='and'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='not all'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
</filter>
</entity>
</fetch>
link-type
all
Esta consulta utiliza un link-entity
del tipo all
para devolver registros de la tabla contacto que son referenciados por la columna de búsqueda PrimaryContactId de algún registro de cuenta, pero ninguno de esos registros de cuenta tienen su Columna de nombre igual a 'Contoso':
<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter type='and'>
<link-entity name='account'
from='primarycontactid'
to='contactid'
link-type='all'>
<filter type='and'>
<condition attribute='name'
operator='eq'
value='Contoso' />
</filter>
</link-entity>
</filter>
</entity>
</fetch>
Límites de las condiciones
No puede incluir más de 500 elementos condición y vínculo-entidad en una consulta FetchXml. De lo contrario, verá este error:
Nombre:
TooManyConditionsInQuery
Código:0x8004430C
Número:-2147204340
Mensaje:Number of conditions in query exceeded maximum limit.
Debe reducir la cantidad de condiciones para ejecutar la consulta. Es posible que pueda reducir la cantidad de condiciones utilizando el operador in que se puede usar con números, identificadores únicos y cadenas de hasta 850 caracteres.
Pasos siguientes
Aprenda a paginar resultados.
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).