none
CAML - ProjectedField de type Note RRS feed

  • Question

  • Bonjour à tous,

    Je développe  pour SP 2010, un mini requêteur CAML qui permettra aux utilisateurs finaux de faire leur propre extraction de données. Il doit prendre en compte les jointures entre liste. Tout fonctionne à merveille, sauf pour quelques types de colonnes.

    D'après le msdn, certain type de colonne ne sont pas pris en charge (Type choix par exemple). On fera avec ou plutôt sans (Passage par un champs calculé pour récupérer la valeur de la colonne de type Choix.

    Par contre, d'aprs la doc MSDN, le type Note est pris en compte (au moins la première ligne). Mais lorsque j'ajoute un projectedField j'ai une exception levée.

    System.ArgumentException : {"La valeur n'est pas comprise dans la plage attendue."}.

    StackTrace : à Microsoft.SharePOint.Library.SPRequestInternalClass.GetListItemDataWithCallBack2.

     Est-ce que quelqu'un a une idée du problème? Est-il possible de récupérer toutes la valeurs du Champs note via une requête CAML?

    Merci d'avance

    NicoBzh

    Voici un extrait de la resquete CAML (la colonne Avis est la colonne de type Note, la colonne AvisProvisoire est un SPFIeldLookUp sur laquelle la jointure est basée.)

    <!--Join-->
    <Join Type='LEFT' ListAlias='AvisProvisoireList'><Eq><FieldRef Name='AvisProvisoire' RefType='Id' /><FieldRef  List='AvisProvisoireList' Name='Id' /></Eq></Join>
    
    <!--ProjectedField-->
    <Field Name='AvisProvisoire__Avis' Type='Lookup' List='AvisProvisoireList' ShowField='Avis' />
    
    <!-- viewField -->
    <FieldRef Name='Annee_rattachement_fiche'/><FieldRef Name='AvisProvisoire__Avis'/>
    • Modifié Nicolas Castel vendredi 27 avril 2012 10:16 suppression lignes à la fin
    vendredi 27 avril 2012 10:14

Réponses

  • Bonjour NicoBzh,

    J'ai fait un test de mon coté et je reproduis bien ce comportement.

    J'ai aussi remarqué un truc. Pendant la création d'un champ lookup dans une liste via l'interface graphique de sharepoint, parmis les colonnes proposées sous l'option  "Add a column to show each of these addiitonnal fields", auncun champ de type "note" n'est proposé. Il se pourrait donc que finalement ce type de champ ne soit pas supporté.

    Je n'est pas trouvé de solutions pour récupérer ce champ projeté en CAML, mais il resterait toujours la possibilité d'essayer en linq.

    Cordialement,

    Ludovic Caffin

    vendredi 27 avril 2012 11:52

Toutes les réponses

  • Bonjour NicoBzh,

    J'ai fait un test de mon coté et je reproduis bien ce comportement.

    J'ai aussi remarqué un truc. Pendant la création d'un champ lookup dans une liste via l'interface graphique de sharepoint, parmis les colonnes proposées sous l'option  "Add a column to show each of these addiitonnal fields", auncun champ de type "note" n'est proposé. Il se pourrait donc que finalement ce type de champ ne soit pas supporté.

    Je n'est pas trouvé de solutions pour récupérer ce champ projeté en CAML, mais il resterait toujours la possibilité d'essayer en linq.

    Cordialement,

    Ludovic Caffin

    vendredi 27 avril 2012 11:52
  • Merci pour le retour. J'avais bien peur de la réponse et ça complique un peu les choses!. Je vais donc essayer de passer par Linq sachant qu'il faut que ce soit entièrement dynamique et que cela fonctionne pour  n'importe quelle liste à la demande de l'utilisateur.

    Je m'y mets!

    NicoBzh

    vendredi 27 avril 2012 12:49
  • Bonjour,

    J'ai exactement le même problème.

    Effectivement avec LINQ cela fonctionne très bien. Avez vous trouvé une solution de contournement?

    Après recherche, j'ai appris que l'on pouvait extraire le code généré par LINQ, ce que j'ai fait: mais le problème arrive lorsque je fais un projectedField.

    Voici mon code en utilisant where:

     SPQuery _queryClientsVilles = new SPQuery();


                _queryClientsVilles.Query= "";
               
                _queryClientsVilles.Query = "<Where>"+
                                                "<And>"+
                                                    "<BeginsWith><FieldRef Name=\"ContentTypeId\" />"+
                                                         "<Value Type=\"ContentTypeId\">0x0100</Value>"+
                                                     "</BeginsWith><IsNotNull><FieldRef Name=\"Ville\" LookupId=\"TRUE\" />"+
                                                    "</IsNotNull>"+
                                                "</And>"+
                                             "</Where>";

    Code avec Joins :

                SPList _listClients = web.Lists["Client"];
                SPQuery _queryClientsVilles = new SPQuery();


                _queryClientsVilles.Query= "";
            
                // _queryClientsVilles.RowLimit = 10;
                _queryClientsVilles.Joins = @"<join Type='INNER' ListAlias='Ville'>     // ListAlias est l'entité avec laquelle la jointure va avoir lieu.
                                                    <Eq>
                                                        <FieldRef Name='VilleClient' RefType='ID'/>
                                                        <FieldRef List='Ville' Name='ID'/>
                                                    </Eq>
                                                </join>";
                                               


               _queryClientsVilles.ProjectedFields = @"<Field Name='VilleTitle' Type='Lookup' List='Ville' ShowField='Title'/>
                                                       <Field Name='VilleContentTypeId' Type='Lookup' List='Ville' ShowField='ContentTypeId' />";

               _queryClientsVilles.ViewFields = @"<FieldRef  Name='Title'/>
                                                  <FieldRef  Name='VilleTitle'/>";

               //_queryClientsVilles.ViewFieldsOnly = true; // Fetch only the data that we need.
                SPListItemCollection _mesElements = _listClients.GetItems(_queryClientsVilles);
              
                string _titreVille = "";
                
                foreach (SPListItem item in _mesElements)

    Quelqu'un peut il partager son expérience????

    Merci d'avance

    mardi 21 août 2012 12:46