none
[SP2013] Provisionning d'une Content By Search WebPart par code RRS feed

  • Question

  • Bonjour tout le monde, 

    J'ai un petit problème avec le provisionning de ma Content Search WP.

    Pour une raison qui est propre à mon projet, je dois ajouter une CSWP à ma page avec des paramètres prédéfinis par code. 

    Voici mon code (version simplifiée) : 

    if (!wpm.WebParts.OfType<ContentBySearchWebPart>().Any()) { cswp = new ContentBySearchWebPart(); DataProviderScriptWebPart dataProvider = new DataProviderScriptWebPart() { PropertiesJson = cswp.DataProviderJSON }; dataProvider.Properties["QueryTemplate"] = "MyQuery"; dataProvider.Properties["FallbackSort"] = new List<ResultSort>() { new ResultSort("MyManagedProperty", SortDirection.Descending) };

    cswp.DataProviderJSON = dataProvider.PropertiesJson; wpm.AddWebPart(cswp, Constants.WebPartZones.SectionBody, 2); wpm.SaveChanges(cswp); }

    Je passe par un DataProviderScriptWebPart pour manipuler directement les propriétés adéquates avant de le réaffecter à la propriété DataProviderJSON. 

    Mon problème c'est que ça ne fonctionne pas ^^". 

    Pour m'assurer de ce qui se passe je vérifie la query de la webpart. Là, je trouve : 

    QueryText

    Jusque là, ça me confirme que ça ne marche pas ... 

    Histoire d'aller jusqu'au bout, j'ai exporté ma WebPart pour vérifier quels étaient les paramètres effectifs, et là quelle n'est pas ma surprise de trouver les bons paramètres : 

    Je me pose donc deux questions : 

    * Connaîtriez-vous une méthode plus fiable et fonctionnelle pour provisionner une CSWP par code ?

    * Sauriez-vous m'expliquer pourquoi, alors que l'ensemble des paramètres de la WP est bon, celle-ci ne fonctionne pas correctement ? 

    Je suis ouvert à tout commentaire ^^, 

    Jc


    • Modifié JcBrabant jeudi 3 octobre 2013 18:43
    jeudi 3 octobre 2013 18:41

Réponses

  • Hello tout le monde, 

    au final, après une bonne nuit de sommeil, j'ai trouvé pourquoi. 

    Il faut faire attention, lorsqu'on spécifie une Query Template, de ne pas oublier de préciser la source sur laquelle on veut chercher. 

    Il suffisait donc de rajouter ces lignes (SourceID devrait suffir à lui seul) :

    dataProvider.Properties["SourceID"] = "8413cd39-2156-4e00-b54d-11efd9abdb89";
    dataProvider.Properties["SourceName"] = "Local SharePoint Results";
    dataProvider.Properties["SourceLevel"] = "ssa";
    

    Normal quoi :)

    • Marqué comme réponse JcBrabant vendredi 4 octobre 2013 08:05
    vendredi 4 octobre 2013 08:05