none
[Webpart] Problème de SPQuery (Date) RRS feed

  • Question

  • Bonjour,

    J'essaie de créer un composant webpart (une liste avec case à cocher).

    J'ai filtré mes données avec un SPQuery, mais ça n'affiche rien à part mes en-têtes de colonne.

    Par contre je n'ai pas de problème pour afficher ma liste si je vire le SPQuery

    Voici le bout de code:

        [Guid("be30e818-c062-48b8-b8fb-4ad63bcfcb4d")]  
        public class ma_classe : System.Web.UI.WebControls.WebParts.WebPart  
        {  
          
            private Panel _Pnl_Liens = new Panel();  
            private SPWeb spweb = SPContext.Current.Web;          
              
            public ma_classe()  
            {  
            }   
              
            private void charge_list_liens(Panel _Pnl_Liens)  
            {  
                HtmlTable _Grille_Liens = new HtmlTable();  
     
                SPList _List_liens = spweb.Lists["liens"];  
     
                SPQuery _Ma_Query_li = new SPQuery();  
     
                _Ma_Query_li.Query = "<Where>" +  
                                            "<And>" +  
                                                "<Geq>" +  
                                                    "<FieldRef Name='Created' /><Value Type='DateTime'>[Today-3Month(s)]</Value>" +  
                                                "</Geq>" +  
                                                "<Eq>" +  
                                                    "<FieldRef Name='Actif' /><Value Type='Boolean'>0</Value>" +  
                                                "</Eq>" +  
                                            "</And>" +  
                                        "</Where>" +  
                                        "<OrderBy>" +  
                                            "<FieldRef Name='Title' />" +  
                                        "</OrderBy>";  
     
     
     
     
                SPListItemCollection _List_liens_Filtre = _List_liens.GetItems(_Ma_Query_li);  
     
                // Chargement des données  
                foreach (SPListItem _Item_liens in _List_liens_Filtre)  
                {  
                    HtmlTableRow _ligne_liens = new HtmlTableRow();  
     
                    // Case à cocher  
                    Ajout_Case_Cocher(_ligne_liens);  // Procédure  
     
                    // Titre  
                    Ajout_cell(_ligne_liens, _Item_liens, "Title"); // Procédure  
     
                    // Date de création  
                    Ajout_cell(_ligne_liens, _Item_liens, "Created");  // Procédure  
     
                    // Créé par/Auteur  
                    Ajout_cell(_ligne_liens, _Item_liens, "Author");  // Procédure  
     
                    // Thème  
                    Ajout_cell(_ligne_liens, _Item_liens, "theme");  // Procédure  
     
     
                    // Ajout de la ligne dans la table  
                    _Grille_Liens.Rows.Add(_ligne_liens);  
     
                }  
                // Ajout de la grille ds le panel  
                _Pnl_Liens.Controls.Add(_Grille_Liens);  
            }  
              
              
            protected override void CreateChildControls()  
            {  
                base.CreateChildControls();  
                  
                charge_list_liens(_Pnl_Liens);  
                this.Controls.Add(_Pnl_Liens);  
            }                        



    Merci d'avance
    lundi 2 mars 2009 18:15

Réponses

  • Bonjour,

    Pour passer une date dans une requête CAML, il faut utiliser le format ISO8601.

    Quelquechose comme ça devrait mieux fonctionner :

    query.Query = "<Where>" +  
                     "<And>" +  
                         "<Geq>" +  
                             "<FieldRef Name='Created' />" +  
                             "<Value Type='DateTime'>" + SPUtility.FormatDate(web, DateTime.Now.AddMonths(-3), SPDateFormat.ISO8601) + "</Value>" +  
                         "</Geq>" +  
                         "<Eq>" +  
                            "<FieldRef Name='Actif' /><Value Type='Boolean'>0</Value>" +  
                         "</Eq>" +  
                      "</And>" +  
                      "</Where>"+  
                   "<OrderBy>" +  
                       "<FieldRef Name='Title' />" +  
                   "</OrderBy>";  

    J'espère que cela résoudra votre problème :)
    lundi 2 mars 2009 19:04

Toutes les réponses

  • Bonjour,

    Pour passer une date dans une requête CAML, il faut utiliser le format ISO8601.

    Quelquechose comme ça devrait mieux fonctionner :

    query.Query = "<Where>" +  
                     "<And>" +  
                         "<Geq>" +  
                             "<FieldRef Name='Created' />" +  
                             "<Value Type='DateTime'>" + SPUtility.FormatDate(web, DateTime.Now.AddMonths(-3), SPDateFormat.ISO8601) + "</Value>" +  
                         "</Geq>" +  
                         "<Eq>" +  
                            "<FieldRef Name='Actif' /><Value Type='Boolean'>0</Value>" +  
                         "</Eq>" +  
                      "</And>" +  
                      "</Where>"+  
                   "<OrderBy>" +  
                       "<FieldRef Name='Title' />" +  
                   "</OrderBy>";  

    J'espère que cela résoudra votre problème :)
    lundi 2 mars 2009 19:04
  • Merci.

    J'obtiens bien mes données.

    C'est tjrs un peu prise de tête l'utilisation des dates...
    mardi 3 mars 2009 14:06