Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
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 varios elementos de condición al filtro. El atributo contenedor filtertype determina si se deben cumplir todas las condiciones (and) o cualquiera (or). 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 operator atributo para evaluar un valor de columna de fila. Puede elegir entre muchos valores de operador de condición.
Por ejemplo, la consulta siguiente devuelve registros de cuenta donde address1_city es igual a "Redmond". Se 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 registros de cuenta donde address1_city es igual a "Redmond", "Seattle" o "Bellevue". Utiliza <filter type='or'> con tres elementos de condición, cada uno de los cuales utiliza 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>
También puede representar la consulta anterior mediante el operador in con un solo condition elemento. Esta condición contiene varios elementos de valor para especificar los valores que se van 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 del operador
Los operadores no pueden requerir parámetros, un único parámetro o varios parámetros. El operador determina cómo se establece el valor que se va a evaluar.
Sin parámetros
Algunos operadores no requieren ningún parámetro. Por ejemplo, use el operador eq-userid para evaluar cualquier identificador único y determinar si coincide con el identificador del usuario que realiza la llamada.
<condition attribute='ownerid'
operator='eq-userid' />
Parámetro único
Cuando un operador requiere un único parámetro, use el value atributo para establecer el valor que se va a evaluar.
Por ejemplo, use el operador eq para evaluar el statecode valor de columna de elección de un registro estableciendo el value atributo .
<condition attribute='statecode'
operator='eq'
value='0' />
Varios parámetros
Cuando un operador requiere varios parámetros, use el elemento value para especificar los valores que se van a evaluar. Por ejemplo, use el operador between para evaluar un número para determinar si está entre un conjunto de valores.
<condition attribute="numberofemployees"
operator="between">
<value>6</value>
<value>20</value>
</condition>
Filtros en la entidad de enlace
Cuando se aplica un filtro dentro de una entidad de vínculo, el filtro se aplica 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 link-entitylink-type es outer, es posible que desee aplicar el filtro después de la combinación estableciendo el valor del atributo conditionentityname . Si usa una entidad de vínculoalias, use el valor alias para establecer el atributo entityname. De lo contrario, establezca el valor del atributo entityname al valor del atributo link-entityname.
Por ejemplo, la consulta siguiente devuelve contactos sin una cuenta primaria o una 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 en valores de la misma fila mediante el valueof atributo . Por ejemplo, si desea buscar registros de contacto en los que el valor de la columna firstname coincide con el de la columna lastname, use 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. En el ejemplo siguiente se devuelven filas donde la columna contact fullname coincide con la columna account 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 link-entity debe usar un alias atributo y el valor del parámetro debe hacer referencia a ese alias y al nombre de valueof columna de la tabla relacionada.
Limitaciones en los filtros de comparación de columnas
Estos tipos de filtros tienen las siguientes limitaciones:
La condición solo puede usar estos operadores:
Operator Description 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 puede 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 los valores de los registros relacionados
Para filtrar los valores de los registros relacionados sin devolver esos valores, use un elemento link-entity dentro del elemento de filtro con uno de los atributos siguientes link-type :
| Nombre | Description |
|---|---|
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 primarias sin filas coincidentes en la entidad vinculada. |
all |
Úselo dentro de un elemento de filtro. Restringe los resultados a las filas primarias en las que existen filas con el valor de columna coincidente from en la entidad de vínculo, 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 se usan estos tipos de vínculo dentro de un elemento de filtro, estos filtros son condiciones secundarias que siguen el comportamiento definido por el type atributo del elemento primario .filter
Los filtros que usan estos tipos devuelven la fila primaria como máximo una vez, incluso si existen varias filas coincidentes en la entidad de vínculo. No devuelven valores de columna de las filas de la entidad vinculada.
Ejemplos de filtros en valores de registros relacionados
En los ejemplos siguientes se muestra el filtrado de valores de registros relacionados. Estos ejemplos incluyen las instrucciones SQL equivalentes para ayudar a explicar el comportamiento.
O bien, filtre con link-typeany
Esta consulta utiliza un filter de tipo or con un link-entity secundario de tipo any para devolver registros en contacto que:
- o se hace referencia a cualquiera de las columnas de búsqueda PrimaryContactId de al menos un registro de cuenta que tiene su columna Name igual a
Contoso, -
o que la columna picklist Contact.StateCode se establezca 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 usa el not any tipo de vínculo para devolver registros de la tabla de contactos a la que no hace referencia la columna de búsqueda PrimaryContactId de ningún registro de cuenta que tenga su columna Name igual a Contoso. Es posible que el registro de contacto aún sea referenciado por registros de cuenta con otros valores en la 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 el opuesto de lo que los nombres implican, y se suelen usar con filtros invertidos.
- Una entidad de vínculo de tipo
not alles equivalente aanyy devuelve registros primarios que tienen registros de entidad de vínculo que coinciden con los filtros. - Una entidad de vínculo de tipo
alldevuelve registros primarios cuando existen algunos registros de entidad de vínculo con un valor de columna coincidentefrom, pero ninguna de esas filas de entidad de vínculo satisface los filtros adicionales definidos dentro del elemento link-entity.
Esta consulta usa un link-entity de tipo not all para devolver registros de la tabla de contactos a la que hace referencia la columna de búsqueda PrimaryContactId de al menos un registro de cuenta que tiene su columna Name 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 usa un link-entity de tipo all para devolver registros de la tabla de contactos a la que hace referencia la columna de búsqueda PrimaryContactId de algún registro de cuenta, pero ninguno de esos registros de cuenta tiene su columna 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>
Restricciones de condición
Puede incluir hasta 500 elementos de condición total y entidad de vínculo en una consulta FetchXML. De lo contrario, verá este mensaje de 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 el número de condiciones mediante el operador in que puede usar con números, identificadores únicos y cadenas de hasta 850 caracteres.
Pasos siguientes
Obtenga información sobre cómo paginar los resultados.