Pregunta

En CAML puedo consultar SharePoint Listitems usando el " Contiene '' elemento, pero no hay '' no contiene '' elemento que podría usar.

Entonces, ¿cuál es la mejor manera de obtener los elementos que no contienen una cadena? ¿Hay una mejor manera que recorrer todos y cada uno de los elementos?

¿Fue útil?

Solución

La misma restricción se aplica a BeginWith. No conozco ninguna buena solución tristemente. Lo que podría hacer: haga una consulta de contención, recorra cada elemento y obtenga los ID, luego haga otra gran consulta para '' ID NotEqual 1 o ID NotEqual 2 o ID NotEqual 3 ...... '' Como la ID está indexada hasta donde yo sé, eso debería tener un impacto menor en la base de datos, pero aún huele muy mal.

Para una lista pequeña no importa, para listas más grandes usaría el SQL Server Profiler para ver cuál es el impacto.

Otros consejos

  

Entonces, ¿cuál es la mejor manera de obtener   elementos que no contienen una cadena?

Intente usar una columna calculada para reflejar el valor que está buscando creando el valor opuesto.

Por ejemplo, supongamos que la columna se llama IsCritical . Luego, agregue la columna como '' SÍ / NO '' y la fórmula como

=ISNUMBER(FIND("Critical"), [Title])

Luego en su consulta CAML

<Query>
<Where>
   <Eq>
     <FieldRef Name='IsCritical'/>
     <Value Type='Boolean'>0</Value>
   </Eq>
</Where>
</Query>

Un 0 en esta consulta refleja un poco "No es crítico". Sin embargo, no estoy seguro de cuál puede ser el rendimiento en lugar de tener una CAML nativa "No contiene". que lamentablemente no existe.

Consulte también Esquema de consulta CAML en MSDN

Este problema con 'Contiene' y 'Comienza con' también me molesta. Espero que en la próxima versión de Sharepoint caml se extienda para ser una herramienta real, no solo una piedra en nuestra pierna.

La forma en que lo hago es especificar la consulta tanto como sea posible y luego filtrar las filas que no coinciden con las condiciones en el código C #. A veces es bastante feo, ya que a veces tienes que procesar 100 filas para terminar con 1 resultado que coincida con las condiciones.

@drax: esperemos que CAML desaparezca, punto. Definitivamente es uno de los peores aspectos de la programación SP actual.

INTENTAR NO INCLUYE

<NotIncludes>
<FieldRef Name='FileLeafRef' />
                                            <Value Type='Text'>stringvalue</Value>
                                        </NotIncludes>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top