Procédure : Personnaliser le composant WebPart Contenu par requête à l’aide de propriétés personnalisées

Dernière modification : mercredi 22 septembre 2010

S’applique à : SharePoint Server 2010

Vous pouvez utiliser le composant WebPart Contenu par requête pour créer des vues de données personnalisées interrogées à partir de nombreuses sources et présenter ces données à un emplacement unique. Une fois que vous avez ajouté le composant WebPart Contenu par requête à une page Web, vous pouvez personnaliser son comportement de recherche, les listes personnalisées et les types de contenu en définissant des propriétés personnalisées. Il existe 60 propriétés et méthodes disponibles pour la classe ContentByQueryWebPart, dont une grande partie peuvent être personnalisées. Cette rubrique présente quelques-unes de ces propriétés et inclut des exemples de syntaxe et d’utilisation au format CAML (Collaborative Application Markup Language) que vous pouvez ajouter à un fichier .webpart.

Certaines propriétés du composant WebPart Contenu par requête Microsoft SharePoint Server 2010 sont héritées de Microsoft SharePoint Foundation, tandis que d’autres sont spécifiques à SharePoint Server 2010. Cette section est consacrée aux propriétés introduites dans SharePoint Server 2010. Les deux catégories de base des propriétés du composant WebPart Contenu par requête SharePoint Server 2010 sont les suivantes :

  • Propriétés qui définissent ou substituent un aspect du comportement sous-jacent du composant WebPart. Dans certains cas, ces propriétés affectent également l'interface utilisateur.

  • Propriétés qui modifient l'interface du composant WebPart sans définition ou substitution du comportement sous-jacent.

Propriétés qui modifient l'interface utilisateur et le comportement

Les propriétés du premier groupe, telles que les substitutions, sont généralement plus puissantes car vous pouvez les utiliser pour modifier le comportement du composant WebPart. Si un utilisateur tente de modifier l’interface utilisateur ou de définir une autre propriété qui peut affecter le comportement auquel s’applique cette propriété, cette propriété est prioritaire dans l’interface utilisateur ; elle remplace les autres paramètres et détermine la façon dont le composant WebPart Contenu par requête se comporte. Ces propriétés sont utiles lorsque vous souhaitez effectuer les opérations suivantes :

  • ajouter des champs permanents et des options de champs ;

  • substituer le comportement par défaut de la requête de liste croisée afin que les modifications apportées aux champs et aux options de champ dans l’interface utilisateur soient permanentes et ne puissent pas être remplacées ou modifiées par d’autres modifications ;

  • renommer les noms de colonnes composés et longs en noms de variables de transformation XSLT plus courants et éviter de créer des transformations XSLT personnalisées pour chaque schéma.

Le Tableau 1 décrit certaines des propriétés qui modifient l’interface utilisateur et le comportement.

Tableau 1. Propriétés qui modifient l’interface utilisateur et le comportement

Propriété

Description

CommonViewFields

Demande des champs supplémentaires, ce qui est nécessaire car le composant WebPart Contenu par requête ne renvoie pas tous les champs de tous les éléments automatiquement. Vous devez demander à ce que les champs soient restitués dans une transformation XSLT.

Cette propriété est additive, ce qui signifie que vous pouvez ajouter plusieurs CommonViewField à un composant WebPart Contenu par requête et étendre ses propriétés de base, telles que FieldDescription et FieldLabel.

QueryOverride

Ignore les limites du comportement de requête imposées par l’interface utilisateur du composant WebPart Contenu par requête. Permet de spécifier la partie requête d’une requête de liste croisée en CAML.

Lorsque la propriété QueryOverride est définie, l’interface utilisateur de filtrage, de tri et de regroupement apparaît grisée dans le volet d’outils. Par exemple, le composant WebPart Contenu par requête active trois filtres par défaut. Vous pouvez en ajouter davantage et vous assurer que les champs personnalisés et le comportement défini soient permanents dans l’interface utilisateur.

WebsOverride

Détermine si la requête de liste croisée doit traiter les sous-sites récursivement. Par défaut, SharePoint Server 2010 traite les sous-sites récursivement, ce qui signifie que le site parent et ses sites enfants sont affichés.

Lorsque la propriété WebsOverride est définie, le composant WebPart Contenu par requête n’effectue pas de traitement récursif et affiche les résultats uniquement à partir du site spécifié.

ListsOverride

Substitue le comportement de liste dans SharePoint Server 2010 et prend en charge plusieurs types de listes, telles que les bibliothèques de pages, le type de base Liste générale et les types de listes spécifiques. Vous pouvez utiliser cette propriété personnalisée pour définir n’importe quel type de liste, y compris ceux qui ne sont pas énumérés dans l’interface utilisateur car le modèle n’est pas défini à la racine ou est un type de base.

Les types de listes sont définis dans la rubrique de référence Élément de liste du kit de développement Windows SharePoint Services 3.0.

ViewFieldsOverride

Permet au composant WebPart Contenu par requête de demander un ensemble de champs à partir de la requête que vous spécifiez, au lieu d’effectuer la demande automatiquement dans SharePoint Server 2010 pour les champs de base.

DataColumnRenames

Permet au composant WebPart Contenu par requête de renommer des colonnes avant que les données ne soient passées à la transformation XSLT pour le rendu.

Propriétés qui modifient l’interface utilisateur sans modifier le comportement

Vous pouvez également avoir besoin d'options plus légères pour personnaliser les champs, les options de champ, le regroupement et les options de filtre dans l'interface utilisateur. Ces personnalisations n'affectent pas le comportement sous-jacent et peuvent être remplacées par les propriétés du premier groupe qui modifient le comportement. Des personnalisations de ce type sont utiles si vous souhaitez effectuer les opérations suivantes :

  • offrir davantage d’options via un composant WebPart Contenu par requête que celles initialement définies, lorsqu’une instance du composant WebPart est ajoutée à la page ;

  • affecter un seul composant WebPart qui ne sera probablement pas soumis à une substitution ;

  • mettre davantage d’options à la disposition de l’utilisateur.

Le Tableau 2 décrit certaines des propriétés de ce groupe.

Tableau 2. Propriétés qui ne modifient pas le comportement

Propriété

Description

AdditionalFilterFields

AdditionalGroupAndSortFields

Comprend un ou plusieurs champs supplémentaires (propriété AdditionalFilterFields) ou des options de regroupement et de tri (propriété AdditionalGroupAndSortFields) qui n'apparaissent pas normalement dans l'interface utilisateur dans les listes déroulantes de filtre. Cela peut s'avérer utile si un champ n'est pas complété en tant que colonne de site mais s'il est présent dans certaines listes et doit être disponible dans l'interface utilisateur. Lorsque cette propriété est définie, l'interface utilisateur propose cette colonne pour le filtrage.

FilterField1

FilterType1

FilterValue1

FilterOperator1

Filter1ChainingOperator

Inclut une fonctionnalité pour filtrer les valeurs au-delà de celles prises en charge par l'interface utilisateur. Utilisez ces propriétés pour préremplir certaines valeurs de l'interface utilisateur par exemple, lorsque le composant WebPart est d'abord ajouté à la page. Par exemple, vous pouvez souhaiter spécifier les valeurs par défaut et appliquer un filtre sur la plage de dates par rapport à la date du jour.

Les différentes approches de personnalisation d'un composant WebPart Contenu par requête

Il existe plusieurs façons de définir ou de modifier des propriétés personnalisées dans un composant WebPart Contenu par requête ; la méthode que vous choisirez dépendra de vos objectifs et du point où vous vous trouvez dans le processus de conception du site Web et du site. Par exemple, si vous personnalisez une mise en page existante, vous pouvez utiliser Microsoft SharePoint Designer 2010 et personnaliser le composant WebPart Contenu par requête pendant que vous personnalisez la mise en page. Si vous créez un composant WebPart Contenu par requête personnalisé pour une mise en page existante, vous pouvez utiliser SharePoint Designer 2010 pour ajouter ou modifier des propriétés personnalisées.

Pour modifier les propriétés personnalisées d’un composant WebPart Contenu par requête existant, vous pouvez exporter le fichier .webpart, en faire une copie et renommer l’original, modifier les propriétés personnalisées dans la copie du fichier .webpart, puis l’importer dans une zone de composant WebPart dans votre page. Le fait de renommer le fichier .webpart d’origine garantit l’existence d’une copie du fichier .webpart d’origine pour les scénarios de mise à niveau ultérieurs.

Pour exporter un fichier .webpart, définissez ses propriétés personnalisées, puis importez-les.

  1. Ouvrez une session sur votre site Web.

  2. Dans le menu Actions du site, cliquez sur Modifier la page.

  3. Recherchez le composant WebPart Contenu par requête dans la page puis, dans le menu Edition du composant WebPart, cliquez sur Exporter.

  4. Enregistrez le fichier .webpart.

  5. Renommez le fichier .webpart, puis utilisez un éditeur de texte ou SharePoint Designer 2010 pour ouvrir le fichier renommé.

    Notes

    Le fait de renommer le fichier d'origine .webpart garantit qu'une copie du fichier d'origine .webpart existe pour les scénarios de mise à niveau futurs.

  6. Ajoutez ou modifiez les propriétés et les valeurs des propriétés, puis enregistrez vos modifications.

  7. Dans le menu Page, pointez sur Ajouter des composants WebPart, puis cliquez sur Parcourir.

  8. Sélectionnez le composant WebPart à importer à partir de la Liste des composants Web Part, puis cliquez sur OK.

  9. Faites glisser le composant WebPart vers une zone de composants WebPart sur la page.

Exemple

Description

Cette section décrit les propriétés personnalisées et fournit des exemples de mise en forme et de code pour les instructions de propriétés personnalisées et les requêtes CAML dans un composant WebPart Contenu par requête. Tout d’abord, cette section présente la mise en forme, les informations de champ de base et des conseils d’utilisation de la propriété CommonViewFields. Ensuite, elle présente une requête CAML complète et passe en revue les propriétés QueryOverride,ListsOverride,WebsOverride et ViewFieldsOverride définies par cette requête. Vous pouvez ajouter chacune des valeurs de propriétés présentées dans la requête CAML à son instruction <property value> respective dans le fichier .webpart. Pour finir, elle présente la propriété DataColumnRenames et les propriétés des options de filtre, de regroupement et de tri.

Propriété CommonViewFields

Vous pouvez utiliser deux formats lors de la personnalisation de la propriété CommonViewFields. Vous pouvez spécifier des champs par leur nom interne ou une combinaison de nom interne et de nom de champ, comme suit :

  • Nom interne de champ

  • Nom interne de champ, Type de champ

La notation utilisée pour les caractères spéciaux distingue le nom interne du nom utilisé dans l'interface utilisateur. Par exemple, un espace entre les mots est représenté par _x0020_ dans le nom interne. Vous pouvez voir le nom interne en affichant le paramètre de chaîne de requête dans une page Colonne de site, ou en affichant le code du composant WebPart après avoir créé le champ. Vous pouvez afficher le code du composant WebPart en définissant le composant WebPart pour appliquer un filtre sur un champ, en exportant le composant WebPart, puis en affichant les propriétés de filtre.

Notes

Pour obtenir une liste complémentaire de field types que la propriété CommonViewField peut demander, voir l’énumération SPFieldType dans le Kit de développement logiciel SDK SharePoint Foundation 2010. SharePoint Server 2010 inclut quatre champs supplémentaires (HTML, Image, Link et SummaryLink) que vous pouvez demander. Les constantes présentées par cette rubrique identifient les types de données qu’une propriété CommonViewFields peut inclure.

Vous pouvez également combiner les définitions CommonViewFields en instructions composées, ce qui est utile pour définir plusieurs champs dans une instruction de propriété. Utilisez un point-virgule pour séparer les champs lors de la combinaison des définitions dans une instruction. Par exemple :

Nom interne de champ ;Nom interne de champ, Type de champ

CommonViewFields est une propriété additive, ce qui signifie que vous pouvez ajouter un champ d’affichage commun au-dessus des champs de base que le composant WebPart Contenu par requête demande toujours. Les champs de base demandent des colonnes par défaut par GUID et dans l’interface utilisateur ils s’affichent sous forme de noms de colonnes de site. Le Tableau 3 répertorie les noms et les types des champs de base.

Tableau 3. Noms et types des champs de base

Nom

Type

Title

Texte

FileRef

Recherche

ID

Compteur

Modified

DateTime

Author

« Utilisateur »

Editor

Utilisateur

Created

DateTime

PublishingRollupImage

Image

Level

« Numéro »

Note

« Remarque »

Dans l’exemple suivant, la propriété CommonViewFields définit le GUID, que SharePoint Server 2010 utilise en interne pour faire référence au nom interne du champ, au type de champ, au nom interne de CommonViewField et à son type de base, suivi du GUID du type de base.

<property name="CommonViewFields" type="string">_Level,Number;PublishingRollupImage;</property>

Propriétés QueryOverride, ListsOverride, WebsOverride et ViewFieldsOverride

Chaque propriété de substitution (QueryOverride,ListsOverride,WebsOverride et ViewFieldsOverride) substitue un comportement de composant WebPart Contenu par requête par défaut. Pour substituer un comportement, créez une requête CAML qui définit les conditions que vous souhaitez définir.

Notes

Pour en savoir plus sur la syntaxe CAML et les commandes, voir Schémas principaux du langage CAML (Collaborative Application Markup Language) dans le Kit de développement logiciel SDK SharePoint Foundation 2010.

L’exemple suivant montre comment définir des propriétés personnalisées pour le composant WebPart Contenu par requête à l’aide d’une requête CAML. Celle-ci effectue les opérations suivantes :

  1. elle extrait un champ Created ;

  2. elle configure la requête de façon à extraire les éléments mis à jour au cours des sept derniers jours et les trie par ordre décroissant ;

  3. elle spécifie le type de liste à partir duquel effectuer les recherches ;

  4. elle extrait les données de manière récursive à partir du site Web spécifié et de ses enfants ;

  5. elle extrait les valeurs d’un champ spécifique à afficher pour chaque élément.

La requête entière est affichée, et elle est décrite en détail dans les sections suivantes.

 1 <ViewFields>
 2   <FieldRef Name="Title" Nullable="True" Type="Text"/>
 3   <FieldRef Name="Comments" Nullable="True" Type="Note"/>
 4 </ViewFields>
 5 <Lists ServerTemplate="850"></Lists>
 6 <Webs Recursive="True" />
 7 <RowLimit>15</RowLimit>
 8 <![CDATA[
 9    <Where>
10     <Gt>
11       <FieldRef Name="Created" Nullable="True" Type="DateTime"/>
12       <Value Type="DateTime"><Today OffsetDays="-7"/></Value>
13     </Gt>
14   </Where>
15   <OrderBy>
16       <FieldRef Name="Created" Nullable="True" Type="DateTime"
17       Ascending="FALSE"/>
18   </OrderBy>]]> 

Propriété QueryOverride

Les lignes 8-19 définissent la propriété QueryOverride.

 8 <![CDATA[
 9    <Where>
10     <Gt>
11       <FieldRef Name="Created" Nullable="True" Type="DateTime"/>
12       <Value Type="DateTime"><Today OffsetDays="-7"/></Value>
13     </Gt>
14   </Where>
15 <OrderBy>
16    <FieldRef Name="Created" Nullable="True" Type="DateTime"
17    Ascending="FALSE"/>
18 </OrderBy>
19 </Query>]]>

Dans l'exemple précédent :

  • Les lignes 8 à 10 définissent la requête et ouvre la clause <where>.

  • La ligne 11 fait référence à un champ de type de base avec le nom « Created » et du type de champ DateTime.

  • La ligne 12 affecte à ce champ la valeur DateTime et définit un décalage égal à -7, ce qui signifie que la valeur 7 est soustraite de la date sur laquelle la requête applique un filtre.

  • Les lignes 13 et 14 ferment la clause <where>.

  • La ligne 15 ouvre la clause <OrderBy>, ce qui détermine l'ordre de tri pour les champs spécifiés.

  • Les lignes 16 et 17 définissent l'ordre de tri pour le champ « Created ». Le composant WebPart affiche ces données par ordre décroissant.

Propriété ListsOverride

Vous pouvez également utiliser une requête CAML pour extraire des éléments à partir de listes SharePoint Foundation 2010 et SharePoint Server 2010. Le Tableau 4 montre trois exemples d’instructions CAML qui extraient des éléments à partir de types de listes distincts.

Tableau 4. Trois exemples d’instructions CAML qui extraient des éléments à partir de types de listes distincts

Type de liste

Instruction Property

Bibliothèques de pages

<![CDATA[
   <Lists ServerTemplate="850">
   </Lists>
]]>

Type de base Liste générale

<![CDATA[
         <Lists BaseType="0">
         </Lists>
]]>

Un type spécifique de liste

<![CDATA[
   <Lists>
     <List ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}"/>
   </Lists>
]]>

Dans l'exemple, la ligne 5 définit la propriété ListsOverride.

5 <Lists ServerTemplate="850"></Lists>

Dans ce cas, la requête utilise ServerTemplate="850" pour substituer la liste active en cours d’utilisation. Une énumération des types de listes disponibles se trouve dans la propriété Lists, dans le Kit de développement logiciel SDK SharePoint Foundation 2010.

Propriété WebsOverride

Vous pouvez utiliser la requête CAML pour définir la propriété WebsOverride afin d'extraire des éléments de manière récursive, comme indiqué dans l'exemple de code suivant.

<![CDATA[
   <Webs Recursive="True"/>
]]>

Ou extraire des éléments uniquement à partir des sites spécifiés.

<![CDATA[
   <Webs/>
]]>

Dans la ligne 6 de l’exemple, la propriété est définie pour extraire des éléments de manière récursive.

6 <Webs Recursive="True"/>

Propriété ViewFieldsOverride

Pour afficher des valeurs pour n'importe quel élément dans le composant WebPart, définissez la propriété ViewFieldsOverride pour qu'elle extrait des données d'un type spécifique à partir d'un champ spécifié, comme indiqué dans l'exemple de code suivant.

<![CDATA[
   <FieldRef Name="Comments" Nullable="True" Type="Note"/>
   <FieldRef Name="Created" Nullable="False" Type="User"/>
]]>

La définition Nullable="True" renvoie les éléments qui n'ont pas cette colonne.

Dans l'exemple de code, les lignes 1 à 4 définissent la propriété ViewFieldsOverride :

1 <ViewFields>
2   <FieldRef Name="Title" Nullable="True" Type="Text"/>
3   <FieldRef Name="Comments" Nullable="True" Type="Note"/>
4 </ViewFields>
  • La ligne 1 ouvre la clause < ViewFields >, qui définit la propriété ViewFieldsOverride.

  • Les lignes 2 et 3 font référence au champ Title (un champ de texte) et au champ Comments (un champ de remarques).

  • La ligne 4 ferme la section < ViewFields >.

Propriété DataColumnRename

Utilisez la propriété DataColumnRename pour renommer des colonnes par programme. Cette propriété peut aider à limiter la personnalisation de la transformation XSLT et du schéma, ou à effectuer des opérations en bloc ou personnalisées pour renommer une colonne. Par exemple, vous pouvez renommer un nom de colonne composé tel que KBArticleTitle pour choisir un nom de variable de transformation XSLT commun, tel que Title. Vous évitez ainsi de créer une transformation XSLT personnalisée pour chaque schéma personnalisé.

Séparez les valeurs de changement de nom de colonne par des points-virgules et respectez le format originalName,newName.

<![CDATA[<property name="DataColumnRenames" type="string">KBArticleTitle,Title</property>]]

Notes

Si vous renommez une colonne avec un nom qui existe déjà, l'opération de changement de nom échoue.

Options de champs supplémentaires, de filtre, de regroupement et de tri

Définissez les propriétés dans ce groupe pour ajouter des champs, des regroupements, des options de regroupement et de tri, des filtres et des options de filtre. Vous pouvez spécifier les champs en indiquant leur nom interne, leur GUID, une combinaison de nom interne et de nom complet ou un GUID et un nom complet.

Définissez les propriétés AdditionalFilterFields et AdditionalGroupAndSortFields à l'aide de l'un des formats suivants :

  • internalName

  • internalName,DisplayName

  • GUID

  • GUID,DisplayName

Vous pouvez également combiner les définitions AdditionalFilterFields et AdditionalGroupAndSortFields en instructions composées, ce qui est utile pour définir plusieurs champs dans une instruction de propriété. Utilisez des points-virgules pour séparer les champs lors de la combinaison des définitions dans une instruction, comme indiqué ci-après :

internalName;GUID; internalName,DisplayName;GUID,DisplayName

La définition de la propriété AdditionalFilterFields permet d'ajouter un champ de filtre Created dans l'interface utilisateur, comme indiqué dans l'exemple de code suivant.

<![CDATA[<property name="AdditionalFilterFields" type="string">Created</property>]]

La définition de la propriété AdditionalGroupAndSortFields vous permet d’ajouter une option Created aux listes de regroupement et de tri dans l’interface utilisateur.

<!CDATA[<property name="AdditionalGroupAndSortFields" type="string">Created</property>]]

Propriétés de filtre

Vous pouvez utiliser les propriétés personnalisées pour étendre des valeurs de filtre au-delà de ce que l'interface utilisateur prend en charge. La définition ou la modification d'un champ de filtre, d'un type de filtre, d'une valeur de filtre ou des propriétés des opérateurs de chaînage de filtre permet d'ajouter un comportement de filtres ou de le modifier dans l'interface utilisateur.

Notes

Les propriétés de filtre ne remplacent pas l'interface utilisateur ; elles la préremplissent avec les valeurs par défaut.

Les propriétés des champs de filtres, des types de filtres et des valeurs de filtres sont toujours du type string :

  • <property name="FilterField1" type="string" />

  • <property name="FilterType1" type="string" />

  • <property name="FilterValue1" type="string" />

  • <property name="FilterOperator1" type="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart+FilterFieldQueryOperator, Microsoft.SharePoint.Publishing, Version=12.0.0, Culture=neutral" PublicKeyToken=71e9bce111e9429c"/>

L’exemple de code de filtre suivant affiche un filtre du type Created au format DateTime et affiche les éléments qui ont été créés après le 25 octobre 2011 :

  • <property name="FilterField1" type="string">Created</property>

  • <property name="FilterType1" type="string">DateTime</property>

  • <property name="FilterValue1" type="string">Today-7</property>

  • <property name="FilterOperator1" type="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart+FilterFieldQueryOperator, Microsoft.SharePoint.Publishing, Version=12.0.0, Culture=neutral" PublicKeyToken=71e9bce111e9429c"/>

Utilisez le format suivant pour définir le paramètre type Dans l'opérateur de filtre et les instructions des propriétés des opérateurs de chaînage : PropertyName, namespace, Version, Culture, PublicKeyToken.

  • <property name="FilterOperator1" type="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart+FilterFieldQueryOperator, Microsoft.SharePoint.Publishing, Version=12.0.0, Culture=neutral" PublicKeyToken=71e9bce111e9429c"/>

  • <property name="Filter1ChainingOperator" type="Microsoft.SharePoint.Publishing.WebControls.ContentByQueryWebPart+FilterField, Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">Eq</property>

Les valeurs valides pour l'opérateur de filtre et les propriétés des opérateurs de chaînage diffèrent, comme suit :

  • Les propriétés des opérateurs de filtre montrent les boutons And et Or dans l'interface utilisateur.

  • Les propriétés des opérateurs de chaînage de filtre remplissent le deuxième champ dans les listes Afficher les éléments quand dans la section Filtres supplémentaires de l'interface utilisateur.

Le Tableau 5 fournit des valeurs valides pour les propriétés des opérateurs de filtre.

Tableau 5. Valeurs valides pour les propriétés des opérateurs de filtre

Valeur

Valeur d'affichage

And

And

Or

Or

Le Tableau 6 fournit des valeurs valides pour les propriétés des opérateurs de chaînage de filtre.

Tableau 6. Valeurs valides pour les propriétés des opérateurs de chaînage de filtre

Valeur

Valeur d'affichage

Eq

est égal à

Neq

n'est pas égal à

Gt

est supérieur à

Geq

est supérieur ou égal à

Lt

est inférieur à

Leq

est inférieur ou égal à

BeginsWith

commence par

Contains

contient

Voir aussi

Tâches

Procédure : personnaliser le format XSL pour le composant WebPart Contenu par requête

Procédure : Afficher des champs personnalisés dans un composant WebPart Contenu par requête

Procédure : personnaliser le format RSS pour le composant WebPart Contenu par requête

Référence

SPSiteDataQuery

ContentByQueryWebPart