Solution: SPQuery ne recherche pas de dossiers

La dernière semaine, j'ai été mise en œuvre une « évolution" solution pour un client qui utilise les BDC et SPQuery et s'est heurtée à quelques difficultés à utiliser SPQuery contre une bibliothèque de documents contenant des dossiers. Ligne de fond: attribuer "récursif" à l'attribut de point de vue de la requête.

Mon scénario:

  • Lundi, Télécharger un document et de fournir certaines données meta.
  • La semaine suivante, J'ai télécharger un nouveau document. Une grande partie des métadonnées de ce nouveau document se fonde sur le document que j'ai téléchargé le lundi (que nous appelons le « document maître »).
  • Nous avons créé une façade de service web qui fournit une interface facile à BDC à la liste afin que les utilisateurs peuvent facilement trouver ce document lundi par une recherche de titre.
  • Une colonne de données BDC fournit une interface utilisateur conviviale. (Cela fait partie de ma tentative à l'aide de la BDC pour une colonne de recherche plus conviviale).

La fonction finale de façade BDC utilise une requête comme celle-ci pour faire de la recherche:

 // Utilisé U2U outil pour aider à générer cette requête CAML.
      oQuery.Query =
        "<Où>";

      Si (titleFilter.Length > 0)
        oQuery.Query  =
          "  <Et>";

      oQuery.Query  =
        "    <Et>" +
        "      <GEQ>" +
        "        <FieldRef nom =  "DocumentId" />" +
        "        <Valeur de Type =  « Text »>" + minId + "</Valeur>" +
        "      </GEQ>" +
        "      <Leq>" +
        "        <FieldRef nom =  "DocumentId" />" +
        "        <Valeur de Type =  « Text »>" + maxId + "</Valeur>" +
        "      </Leq>" +
        "    </Et>";

      Si (titleFilter.Length > 0)
        oQuery.Query  =
          "    <Contient>" +
          "      <FieldRef nom =  "Title" />" +
          "      <Valeur de Type =  « Text »>" + titleFilter + "</Valeur>" +
          "    </Contient>" +
          "  </Et>";
      oQuery.Query  =
        "</Où>";

Au cours de la phase initiale de développement, cela fonctionnait très bien. Cependant, Nous avons présenté des dossiers dans le répertoire de résoudre certains problèmes et soudain, mon sélecteur de BDC ne renvoie aucun résultat. J'ai suivi cela au fait que le SPQuery ne reviendrait jamais aucun résultat. Nous avons utilisé les dossiers principalement pour permettre plusieurs fichiers portant le même nom d'être téléchargés, mais avec des données différentes de meta. Lorsque le fichier est téléchargé, Nous créons un dossier basé sur l'ID de l'élément de la liste et puis déplacez le fichier, il (J'ai écrit à ce sujet ici; Nous avons eu résultats mitigés avec cette approche, mais dans l'ensemble, Il fonctionne bien). L'utilisateur ne se soucient pas sur les dossiers et en fait, ne comprends pas vraiment qu'il y a tous les dossiers. Nous avons configuré toutes les vues de la bibliothèque pour afficher les éléments sans tenir compte des dossiers.

J'ai frappé ce problème elle deux fois plus que la réalisation technique a évolué et résolus différemment chaque fois. La première fois, Je n'étais pas en utilisant l'opérateur CONTAINS dans la requête. Sans un opérateur CONTAINS, J'ai été en mesure de résoudre le problème en spécifiant l'affichage sur le constructeur de la SPQuery. Au lieu d'utiliser le constructeur par défaut:

SPList oList = web.Listes[« Documents"];

SPQuery oQuery = Nouveau SPQuery();

J'ai utilisé à la place un constructeur spécifié d'un point de vue:

SPList oList = web.Listes[« Documents"];

SPQuery oQuery = Nouveau SPQuery(oList.Views[« Tous les Documents"]);

Qui a résolu le problème et j'ai commencé à obtenir mes résultats.

J'ai ensuite ajouté l'opérateur CONTAINS dans le mélange et qu'il est tombé à nouveau. Il s'avère que l'opérateur CONTAINS, pour autant que je peux dire, ne fonctionne pas avec le point de vue de la même façon que l'un GEQ plus simple / Opérateurs LEQ. J'ai fait quelques recherches et appris que ViewAttributes de la requête doit être défini sur « Récursive », comme dans:

oQuery.ViewAttributes = « Portée = "Recursive"";

Qui a résolu le problème pour CONTAINS. En fait, Cela a également résolu mon problème de recherche originale et si j'avais spécifié le récursif attribuent la première fois, Je n'aurait pas couru une fois de plus la question.

Le fait qu'une opinion fondée SPQuery fonctionne pour certains opérateurs (GEQ/LEQ) et pas d'autres (CONTIENT), couplé avec le fait que les IRC ne semblent pas travailler du tout avec conduit de bibliothèques de document contenant du dossier me faire croire que SPQuery a quelques problèmes d'orthogonalité.

Merci spécial:

</fin>

S'abonner à mon blog!

3 réflexions sur "Solution: SPQuery ne recherche pas de dossiers

  1. Pas de nom

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

    Réponse

Laisser une réponse

Votre adresse email ne sera pas publiée. les champs requis sont indiqués *