Développer un composant basé sur l’éditeur en bloc : le composant Liste de produits

Cette section présente une vue d’ensemble de l’utilisation de l’éditeur en bloc et donne une description du composant Geometrixx existant en fonction de l’éditeur en bloc : le composant Liste de produits.

Le composant Liste de produits permet aux utilisateurs d’afficher et de modifier une table de données. Par exemple, vous pouvez utiliser le composant Liste de produits pour représenter les produits d’un catalogue. Les informations sont présentées dans un tableau HTML standard et toute modification est effectuée dans la boîte de dialogue Modifier, qui contient un widget BulkEditor. (Cet éditeur en bloc est le même que celui accessible sur /etc/importers/bulkeditor.html ou via le menu Outils). Le composant Liste de produits a été configuré pour des fonctionnalités d’éditeur en bloc limitées spécifiques. Chaque partie de l’éditeur en bloc (ou les composants dérivés de l’éditeur en bloc) peut être configurée.

Avec l’éditeur en bloc, vous pouvez ajouter, modifier, supprimer, filtrer et exporter les lignes, enregistrer les modifications et importer un ensemble de lignes. Chaque ligne est stockée en tant que nœud sous l’instance du composant Liste de produits elle-même. Chaque cellule est une propriété de chaque nœud. C’est un choix de conception qui peut être facilement modifié. Par exemple, vous pouvez stocker des nœuds ailleurs dans le référentiel. Le rôle du servlet de requête est de renvoyer la liste des nœuds à afficher ; le chemin de recherche est défini comme une instance Liste de produits.

Le code source AEM du composant Liste de produits est disponible dans le référentiel sous /apps/geometrixx/components/productlist et est composé de plusieurs parties comme tous les composants Adobe Experience Manager (AEM) :

  • Rendu HTML : le rendu est effectué dans un fichier JSP (https://experienceleague.adobe.com/apps/geometrixx/components/productlist/productlist.jsp?lang=fr). Le JSP lit les sous-nœuds du composant Liste de produits actuel et les affiche chacun sous la forme d’une ligne d’un tableau HTML.
  • Boîte de dialogue Modifier dans laquelle vous définissez la configuration de l’éditeur en masse. Configurez la boîte de dialogue de sorte à répondre aux besoins du composant : colonnes disponibles et actions possibles effectuées sur la grille ou sur la recherche. Consultez Propriétés de configuration de l’éditeur en bloc pour plus d’informations sur toutes les propriétés de configuration.

Voici une représentation XML des sous-nœuds de boîte de dialogue :

        <editor
            jcr:primaryType="cq:Widget"
            colsSelection="[ProductId,ProductName,Color,CatalogCode,SellingSku]"
            colsValue="[ProductId,ProductName,Color,CatalogCode,SellingSku]"
            contentMode="false"
            exportURL="/etc/importers/bulkeditor/export.tsv"
            extraCols="Selection"
            hideColsSelection="false"
            hideContentMode="true"
            hideDeleteButton="false"
            hideExportButton="false"
            hideExtraCols="true"
            hideImportButton="false"
            hideInsertButton="false"
            hideMoveButtons="false"
            hidePathCol="true"
            hideRootPath="true"
            hideSaveButton="false"
            hideSearchButton="false"
            importURL="/etc/importers/bulkeditor/import"
            initialSearch="true"
            insertedResourceType="geometrixx/components/productlist/sku"
            queryParams=""
            queryURL="/etc/importers/bulkeditor/query.json"
            saveURL="/etc/importers/bulkeditor/save"
            xtype="bulkeditor">
            <saveButton
                jcr:primaryType="nt:unstructured"
                text="Save modifications"/>
            <searchButton
                jcr:primaryType="nt:unstructured"
                text="Apply filter"/>
            <queryParamsInput
                jcr:primaryType="nt:unstructured"
                fieldDescription="Enter here your filters"
                fieldLabel="Filters"/>
            <searchPanel
                jcr:primaryType="nt:unstructured"
                height="200">
                <defaults
                    jcr:primaryType="nt:unstructured"
                    labelWidth="150"/>
            </searchPanel>
            <grid
                jcr:primaryType="nt:unstructured"
                height="275"/>
            <store jcr:primaryType="nt:unstructured">
                <sortInfo
                    jcr:primaryType="nt:unstructured"
                    direction="ASC"
                    field="CatalogCode"/>
            </store>
            <colModel
                jcr:primaryType="nt:unstructured"
                width="150"/>
            <colsMetadata jcr:primaryType="nt:unstructured">
                <Selection
                    jcr:primaryType="nt:unstructured"
                    checkbox="true"
                    forcedPosition="0"
                    headerText=""/>
                <ProductId
                    jcr:primaryType="nt:unstructured"
                    cellCls="productlist-cell-productid"
                    headerText="Product Id"/>
                <ProductName
                    jcr:primaryType="nt:unstructured"
                    cellStyle="background-color: #FFCC99;"
                    headerText="Product Name"/>
                <CatalogCode
                    jcr:primaryType="nt:unstructured"
                    cellStyle="background-color: #EDEDED;"
                    headerText="Catalog Code"/>
                <Color jcr:primaryType="nt:unstructured">
                    <editor
                        jcr:primaryType="nt:unstructured"
                        store="[Blue,Red,Yellow]"
                        triggerAction="all"
                        typeAhead="true"
                        xtype="combo"/>
                </Color>
                <SellingSku
                    jcr:primaryType="nt:unstructured"
                    headerText="Sku Id"/>
            </colsMetadata>
        </editor>

Propriétés de configuration de l’éditeur en bloc

Chaque partie de l’éditeur en bloc peut être configurée. Le tableau suivant répertorie toutes les propriétés de configuration de l’éditeur en bloc.

Nom de la propriétéDéfinition
rootPathChemin racine de la recherche
queryParamsRequête de recherche
contentModeTrue pour activer le mode de contenu : les propriétés sont lues sur le nœud jcr:content et non sur le nœud de résultat de la recherche.
colsValuePropriétés recherchées (valeurs cochées de colsSelection affichées sous forme de cases à cocher)
extraColsPropriétés recherchées supplémentaires (affichées dans une zone de texte séparé par des virgules)
initialSearchTrue pour effectuer une requête au chargement de la page
colsSelectionSélection des propriétés recherchées (affichée sous forme de cases à cocher)
showGridOnlyTrue pour afficher uniquement la grille et non le panneau de recherche (n’oubliez pas de définir initialSearch sur true)
searchPanelCollapsedTrue pour réduire le panneau de recherche par défaut
hideRootPathMasquer le champ de chemin racine
hideQueryParamsMasquer le champ de requête
hideContentModeMasquer le champ du mode de contenu
hideColsSelectionMasquer le champ de sélection des protocoles
hideExtraColsMasquer le champ des protocoles supplémentaires
hideSearchButtonBouton Masquer la recherche
hideSaveButtonBouton Masquer l’enregistrement
hideExportButtonBouton Masquer l’exportation
hideImportButtonBouton Masquer l’importation
hideResultNumberMasquer le texte du numéro de résultat de la recherche par grille
hideInsertButtonMasquer le bouton d’insertion de grille
hideDeleteButtonBouton Masquer la suppression de la grille
hidePathColMasquer la colonne « chemin » de la grille
queryURLChemin d’accès au servlet de requête
exportURLChemin d’accès au servlet d’exportation
importURLChemin d’accès au servlet d’importation
insertedResourceTypeType de ressource ajouté au nœud lorsqu’une ligne est insérée
saveButtonEnregistrer la configuration du widget de bouton
searchButtonConfiguration du widget du bouton de recherche
exportButtonConfiguration du widget du bouton Exporter
importButtonConfiguration du widget du bouton Importer
searchPanelConfiguration du widget du panneau de recherche
gridConfiguration du widget Grille
storeConfiguration du magasin
colModelConfiguration du modèle de colonne de grille
rootPathInputConfiguration du widget rootPath
queryParamsInputConfiguration du widget queryParams
contentModeInputConfiguration du widget contentMode
colsSelectionInputcolsSelection widget config
extraColsInputConfiguration du widget extraCols
colsMetadata

Configuration des métadonnées de colonne. Les propriétés possibles sont (appliquées à toutes les cellules de la colonne) :

  • cellStyle : style html

  • cellCls : classe css

  • readOnly : true pour ne pas pouvoir modifier la valeur

  • case à cocher : true pour définir toutes les cellules de la colonne comme cases à cocher (valeurs true/false)

  • forcedPosition : valeur entière pour spécifier où la colonne doit être placée dans la grille (entre 0 et le nombre de colonnes -1)