none
Requete caml+ champ de liste RRS feed

  • Question

  • Bonjour,

    j'ai une page aspx qui contient un champ de recherche contenant des différentes périodes.

    je veux faire un requête caml qui me permet de tester si la valeur du champ [Date-suivi] est égale au moins à une des dates de cette période .

    j'ai récupéré toutes les dates de la période choisie dans un tableau et j'ai essayé de chercher si mon champ est égal à une de ces valeurs avec la requête suivante mais rien ne marche :"<Where><And><Eq><FieldRef Name='" + list.Fields["Matricule"].InternalName + "' /> <Value Type='Text'>" + matriculeUtilisateur + "</Value></Eq><Eq><FieldRef Name='" + list.Fields["Date-suivi"].InternalName + "'<In><Values><Value Type='Text'>"+var0+"</Value><Value Type='Text'>"+var1+"</Value></Values></In></Eq></And></where>";
     

    Merci d'avance


    ghada

    jeudi 10 mai 2012 09:19

Réponses

  • Problème résolu :)))

     DateTime Datedebut = DateTime.Parse(datedebut);
                           DateTime Datefin = DateTime.Parse(datefin);
                          
                           

                               string isoDate = SPUtility.CreateISO8601DateTimeFromSystemDateTime(Datedebut);

                               string isoDate1 = SPUtility.CreateISO8601DateTimeFromSystemDateTime(Datefin);
                               /* Recuperation des ref-doc des documents qui se trouvent dans la semaine sélectionnée */

                               SPList list = oSPWeb.Lists["Historique-ET04"];
                               SPQuery spQuery2 = new SPQuery();



                               spQuery2.Query = "<Where><And><Eq><FieldRef Name='" + list.Fields["Matricule"].InternalName + "' /><Value Type='Text'>" + matriculeUtilisateur + " </Value> </Eq><And><Gt><FieldRef Name='" + list.Fields["Date-suivi"].InternalName + "' /><Value Type='DateTime'>" + isoDate + "</Value></Gt><Lt><FieldRef Name='" + list.Fields["Date-suivi"].InternalName + "' /><Value Type='DateTime'>" + isoDate1 + "</Value></Lt></And></And></where>";                      
                           SPListItemCollection oListCollection1 = list.GetItems(spQuery2);


    ghada

    vendredi 11 mai 2012 15:47

Toutes les réponses

  • Bonjour,

    La syntaxe de votre reqête ne semble pas être correcte. cf msdn http://msdn.microsoft.com/en-us/library/ff625761.aspx

    En essayant cette syntaxe?

    <Where>

    <And> <Eq><FieldRef Name='" + list.Fields["Matricule"].InternalName + "' /> <Value Type='Text'>" + matriculeUtilisateur + " </Value> </Eq> <In> <FieldRef Name='" + list.Fields["Date-suivi"].InternalName + "' /> <Values> <Value Type='Text'>"+var0+"</Value> <Value Type='Text'>"+var1+"</Value> </Values> </In> </And> </where>


    
    NicoBzh
    jeudi 10 mai 2012 15:34
  • Toujours le même problème :((

    ghada

    jeudi 10 mai 2012 20:23
  • Bonjour

    Pour mieux comprendre serait il possible d'avoir un exemple des données dans les listes ?


    Blog Sharepoint : www.paslatek.net Twitter : @LimozinLionel

    vendredi 11 mai 2012 06:42
  • Bonjour,

    j'ai fait ce bout de  code :


                           DateTime[] stringArray = new DateTime[7];
                           for (int k = 0; k < 7; k++)
                           {
                               DateTime s = Datedebut.AddDays(k);
                               
                               stringArray[k] =s;
                           }
                               DateTime var0 = stringArray[0];
                               DateTime var1 = stringArray[1];
                               DateTime var2 = stringArray[2];
                               DateTime var3 = stringArray[3];
                               DateTime var4 = stringArray[4];
                               DateTime var5 = stringArray[5];
                               DateTime var6 = stringArray[6];

                                      

                               /* Recuperation des ref-doc des documents qui se trouvent dans la semaine sélectionnée */

                               SPList list = oSPWeb.Lists["Historique-ET04"];
                               SPQuery spQuery2 = new SPQuery();
                               


                               spQuery2.Query = "<Where><And><Eq><FieldRef Name='" + list.Fields["Matricule"].InternalName + "' /><Value Type='Text'>" + matriculeUtilisateur + " </Value> </Eq><Eq><FieldRef Name='" + list.Fields["Date-suivi"].InternalName + "' /><Value Type='DateTime'>" + var1 + " </Value> </Eq></And></where>";                      
                           SPListItemCollection oListCollection1 = list.GetItems(spQuery2);
                           int n = oListCollection1.Count;

    le problème est que n est tjrs égal à 0 malgré que j'ai un élément qui contient ces 2 conditions . le problème est dans la comparaison de date du champ[Date-suivi] et les variables var0 et var1.

    comment je peux le faire?

    Merci


    ghada

    vendredi 11 mai 2012 08:49
  • Alors,

    Déjà je trouve un peu bizarre de vouloir chercher les fichiers qui ont une date de suivi egale à une date, puis à une autre, puis à une autre, comme ça 7 fois. Une comparaison de type "inferieur ou egal" ou "supérieur ou egal" me semblerait plus simple. Ceci dit j'imagine que votre besoin est peut être d'avoir les fichier qui doivent etre traité à N, puis N+1, puis N+2, etc... donc soit...

    Enfin pour votre problème j'aurais 2 pistes :

    - dans votre code vous utilisez une comparaison de DateTime qui par défaut compare aussi l'heure. Etes -vous sur que les heures correspondent ?

    - Sharepoint traite les champs de type Date en les stockant en GMT+0, dans la récupération des données via SPQuery vous récupérez donc des dates en GMT+0. Si votre champs DateDebut n'est pas lui même en GMT+0 vous avez sans doute un décalage de 2H actuellement... peut être est-ce pour ça que les fichiers ne remontent pas...? La solution consisterai ds ce cas à convertir vos dates de comparaisons en GMT+0


    Blog Sharepoint : www.paslatek.net Twitter : @LimozinLionel

    vendredi 11 mai 2012 09:01
  • 
    

    Bonjour,

    En complément, ce Thread semble répondre au problème posé.

    CAML Query - DateTime

    NicoBZh

    vendredi 11 mai 2012 09:25
  • Bonjour,

    Merci infiniment pour votre aide et vous avez raison pour la comparaison de type "inferieur ou egal" ou "supérieur ou egal" .

    Est ce que vous pouvez me dire comment je peux faire la requête de  comparaison des dates seulement sans les heures avec supérieur et inférieur ??

    Merci d'avance


    ghada

    vendredi 11 mai 2012 10:23
  • Problème résolu :)))

     DateTime Datedebut = DateTime.Parse(datedebut);
                           DateTime Datefin = DateTime.Parse(datefin);
                          
                           

                               string isoDate = SPUtility.CreateISO8601DateTimeFromSystemDateTime(Datedebut);

                               string isoDate1 = SPUtility.CreateISO8601DateTimeFromSystemDateTime(Datefin);
                               /* Recuperation des ref-doc des documents qui se trouvent dans la semaine sélectionnée */

                               SPList list = oSPWeb.Lists["Historique-ET04"];
                               SPQuery spQuery2 = new SPQuery();



                               spQuery2.Query = "<Where><And><Eq><FieldRef Name='" + list.Fields["Matricule"].InternalName + "' /><Value Type='Text'>" + matriculeUtilisateur + " </Value> </Eq><And><Gt><FieldRef Name='" + list.Fields["Date-suivi"].InternalName + "' /><Value Type='DateTime'>" + isoDate + "</Value></Gt><Lt><FieldRef Name='" + list.Fields["Date-suivi"].InternalName + "' /><Value Type='DateTime'>" + isoDate1 + "</Value></Lt></And></And></where>";                      
                           SPListItemCollection oListCollection1 = list.GetItems(spQuery2);


    ghada

    vendredi 11 mai 2012 15:47