Soluzione: SPQuery non cerca le cartelle

La scorsa settimana stavo implementando applicazione una "evoluzione" soluzione per un client che utilizza BDC e SPQuery e ha incontrato qualche difficoltà utilizzando SPQuery contro una raccolta di documenti contenenti le cartelle. Linea di fondo: assegnare "ricorsivo" all'attributo vista della query.

Mio scenario:

  • Lunedi ', Sono di caricare un documento e fornire alcuni dati di meta.
  • La settimana seguente, Caricare un nuovo documento. Gran parte dei meta dati di questo nuovo documento è basato sul documento che ho caricato il lunedì (che noi chiamiamo il "documento master").
  • Abbiamo creato una facciata di servizio web che fornisce un'interfaccia di BDC-friendly alla lista in modo che gli utenti possono facilmente individuare tale documento lunedì tramite una ricerca del titolo.
  • Una colonna di dati BDC fornisce un'interfaccia utente amichevole. (Questo è parte del mio tentativo utilizzando BDC per una colonna di ricerca più amichevole).

Il servizio di facciata BDC finale utilizza una query come questa a fare la ricerca:

 // Usato U2U strumento per aiutare a generare questa query CAML.
      oQuery.Query =
        "<Dove>";

      Se (titleFilter.Length > 0)
          = oQuery.Query
          "  <E>";

        = oQuery.Query
        "    <E>" +
        "      <Geq>" +
        "        <FieldRef Name =  "DocumentId" />" +
        "        <Tipo di valore =  "Text">" + minId + "</Valore>" +
        "      </Geq>" +
        "      <LEQ>" +
        "        <FieldRef Name =  "DocumentId" />" +
        "        <Tipo di valore =  "Text">" + maxId + "</Valore>" +
        "      </LEQ>" +
        "    </E>";

      Se (titleFilter.Length > 0)
          = oQuery.Query
          "    <Contiene>" +
          "      <FieldRef Name =  "Title" />" +
          "      <Tipo di valore =  "Text">" + titleFilter + "</Valore>" +
          "    </Contiene>" +
          "  </E>";
        = oQuery.Query
        "</Dove>";

Durante la fase iniziale di sviluppo, Questo ha funzionato grande. Tuttavia, abbiamo introdotto le cartelle nella directory per risolvere alcuni problemi e improvvisamente, la mia selezione BDC non restituisce alcun risultato. Ho rintracciato questo dovuto al fatto che il SPQuery non ritornerei mai alcun risultato. Abbiamo usato le cartelle principalmente per consentire più file con lo stesso nome per essere caricato, ma con diversi metadati. Quando il file viene caricato, si crea una cartella basata sull'ID della voce di elenco e quindi sposta il file ci (Che scrisse qui; abbiamo avuto risultati misti con questo approccio, ma su tutta la, si sta lavorando bene). L'utente non importa sulle cartelle e infatti, davvero non capisco che ci sono tutte le cartelle. Abbiamo configurato tutte le viste sulla libreria per mostrare gli elementi senza riguardo per le cartelle.

Mi ha colpito questo problema due volte come l'implementazione tecnica evoluta e risolto esso diversamente ogni volta. La prima volta, Non stavo usando l'operatore contiene nella query. Senza un operatore contiene, Sono stato in grado di risolvere il problema specificando la vista su contructor di SPQuery. Invece di utilizzare il costruttore predefinito:

SPList oList = web.Liste["Documenti"];

SPQuery oQuery = Nuovo SPQuery();

Invece utilizzato un costruttore che ha specificato una vista:

SPList oList = web.Liste["Documenti"];

SPQuery oQuery = Nuovo SPQuery(oList.Views["Tutti i documenti"]);

Che ha risolto il problema e ho cominciato ad avere i miei risultati.

Ho poi aggiunto l'operatore contiene nel mix e si è rotto nuovamente. Si scopre che l'operatore contiene, per quanto posso dire, non funziona con vista allo stesso modo l'una più semplice GEQ / Operatori LEQ. Ho fatto qualche ricerca e ho imparato che ViewAttributes della query deve essere impostata su "Ricorsiva", come in:

oQuery.ViewAttributes = "Scope = "Recursive"";

Che risolto il problema per CONTAINS. Infatti, questo anche risolto il mio problema di ricerca originale e se avevo specificato il ricorsiva attributo la prima volta, Non vorrei avere correre la questione ancora.

Il fatto che un SPQuery basati su Vista funziona per alcuni operatori (GEQ/LEQ) e non gli altri (CONTIENE), accoppiato con il fatto che gli indicatori KPI non sembrano funzionare a tutti con cartella contenente documento librerie porta me a credere che SPQuery ha alcuni problemi di ortogonalità.

Ringraziamento speciale:

  • La buona gente di U2U e il loro strumento di query.
  • Grande di Michael Hoffer "Learning by doing" post del blog, Commenti e risposte.

</fine>

Iscriviti al mio blog!

3 pensieri su "Soluzione: SPQuery non cerca le cartelle

  1. Senza nome

    http://www.batteryfast.co.uk/asus/w3v.htm asus w3v battery,
    http://www.batteryfast.co.uk/asus/w3000a.htm Asus w3000a battery,
    http://www.batteryfast.co.uk/asus/w3000.htm asus w3000 battery,
    http://www.batteryfast.co.uk/asus/w3000v.htm Asus w3000v battery,
    http://www.batteryfast.co.uk/asus/a31-s5.htm asus a31-s5 battery,
    http://www.batteryfast.co.uk/asus/a32-s5.htm asus a32-s5 battery,
    http://www.batteryfast.co.uk/asus/s52n.htm Asus s52n battery,
    http://www.batteryfast.co.uk/asus/s5000.htm asus s5000 battery,
    http://www.batteryfast.co.uk/asus/s5200n.htm Asus s5200n battery,
    http://www.batteryfast.co.uk/asus/s5n.htm Asus s5n battery,
    http://www.batteryfast.co.uk/asus/90-naa1b1000.htm Asus 90-naa1b1000 battery,
    http://www.batteryfast.co.uk/asus/s2691061.htm asus s2691061 battery,
    http://www.batteryfast.co.uk/asus/a42-v6.htm asus a42-v6 battery,
    http://www.batteryfast.co.uk/asus/a32-u5.htm asus a32-u5 battery,
    http://www.batteryfast.co.uk/asus/u5f.htm Asus u5f battery,
    http://www.batteryfast.co.uk/asus/u5a.htm Asus u5a battery,
    http://www.batteryfast.co.uk/asus/u5f.htm Asus u5f battery,
    http://www.batteryfast.co.uk/asus/u5.htm Asus u5 battery,
    http://www.batteryfast.co.uk/compaq/nw8000.htm Compaq nw8000 battery,
    http://www.batteryfast.co.uk/compaq/nc8000.htm Compaq nc8000 battery,
    http://www.batteryfast.co.uk/compaq/v1000.htm Compaq v1000 battery,
    http://www.batteryfast.co.uk/compaq/nc6000.htm Compaq nc6000 battery,
    http://www.batteryfast.co.uk/compaq/nx5000.htm Compaq nx5000 battery,
    http://www.batteryfast.co.uk/compaq/n600.htm Compaq n600 batteria,
    http://www.batteryfast.co.uk/compaq/n600c.htm Compaq n600c battery,
    http://www.batteryfast.co.uk/compaq/n610c.htm Compaq n610c battery,
    http://www.batteryfast.co.uk/compaq/n610v.htm Compaq n610v batteria,
    http://www.batteryfast.co.uk/compaq/n620c.htm Compaq n620c batteria,
    http://www.batteryfast.co.uk/compaq/e500.htm Compaq e500 battery,
    http://www.batteryfast.co.uk/compaq/e500s.htm Compaq e500s battery,
    http://www.batteryfast.co.uk/compaq/v300.htm Compaq v300 battery,
    http://www.batteryfast.co.uk/compaq/v500.htm Compaq v500 batteria,
    http://www.batteryfast.co.uk/compaq/pp2060.htm Compaq pp2060 battery,
    http://www.batteryfast.co.uk/compaq/nx9000.htm Compaq nx9000 battery,
    http://www.batteryfast.co.uk/compaq/nx9005.htm Compaq nx9005 battery,
    http://www.batteryfast.co.uk/compaq/nx9010.htm Compaq nx9010 akku,
    http://www.batteryfast.co.uk/compaq/nx9020.htm Compaq nx9020 akku,
    http://www.batteryfast.co.uk/compaq/n110.htm Compaq n110 battery,
    http://www.batteryfast.co.uk/compaq/n110s.htm Compaq n110s battery,
    http://www.batteryfast.co.uk/compaq/pp2101x.htm Compaq pp2101x battery,
    http://www.batteryfast.co.uk/compaq/presario-2100.htm compaq presario 2100 batteria,
    http://www.batteryfast.co.uk/compaq/ze4000.htm Compaq ze4000 batteria,
    http://www.batteryfast.co.uk/compaq/f4809a.htm Compaq f4809a batteria,
    http://www.batteryfast.co.uk/compaq/f4812a.htm Compaq f4812a battery,
    http://www.batteryfast.co.uk/dell/inspiron-700m.htm dell inspiron 700m battery,
    http://www.batteryfast.co.uk/dell/inspiron-710m.htm dell inspiron 710m battery,
    http://www.batteryfast.co.uk/dell/latitude-x200.htm dell latitude x200 battery,
    http://www.batteryfast.co.uk/dell/8u443.htm dell 8u443 battery,
    http://www.batteryfast.co.uk/dell/312-0058.htm dell 312-0058 batteria,

    Risposta

Lasciare una risposta

L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *