Sie sehen sich Hilfeinhalte der folgenden Version an:

In diesem Abschnitt wird erläutert, wie Sie das Bulk Editor-Tool entwickeln und die Produktlisten-Komponente erweitern, die auf dem Bulk Editor basiert.

Abfrageparameter für den Bulk Editor

Wenn Sie den Bulk Editor verwenden, können Sie einige Abfrageparameter zur URL hinzufügen, um den Bulk Editor mit einer bestimmten Konfiguration aufzurufen. Wenn Sie den Bulk Editor immer mit einer bestimmten Konfiguration nutzen möchten, beispielsweise in der Produktlisten-Komponente, müssen Sie die Datei bulkeditor.jsp (zu finden unter /libs/wcm/core/components/bulkeditor) ändern oder eine Komponente mit der spezifischen Konfiguration erstellen. Änderungen, die über Abfrageparameter erfolgen, sind nicht dauerhaft.

Wenn Sie zum Beispiel folgende URL in den Browser eingeben:

http://<Servername>:<Portnummer>/etc/importers/bulkeditor.html?rootPath=/content/geometrixx/en&queryParams=geometrixx&initialSearch=true&hrp=true

wird der Bulk Editor ohne das Feld Stammverzeichnis angezeigt, da „hrp=true“ dieses Feld ausblendet. Mit dem Parameter „hrp=false“ (Standardwert) wird das Feld angezeigt.

Nachstehend finden Sie eine Liste der Abfrageparameter für den Bulk Editor:

Hinweis:

Jeder Parameter kann einen langen und einen kurzen Namen haben. Der lange Name für die Suche nach dem Stammverzeichnis ist z. B. rootPath, der kurze rp. Wenn der lange Name nicht definiert ist, wird der kurze aus der Anfrage ausgelesen.

     

 Parameter

(langer/kurzer Name)

 Typ
 Beschreibung
 rootPath / rp
 String   Suche nach dem Stammverzeichnis
 queryParams / qp
 String  Suchabfrage
 contentMode / cm
 Boolesch  Bei „true“ wird der Inhaltsmodus aktiviert.
 colsValue / cv
 String[]  gesuchte Eigenschaften (geprüfte Werte von colsSelection als Kontrollkästchen angezeigt)
 extraCols / ec
 String[]  gesondert gesuchte Eigenschaften (durch Kommas getrennt in einem Textfeld angezeigt)
 initialSearch / is
 Boolesch  Bei „true“ wird die Abfrage beim Laden der Seite ausgeführt.
 colsSelection / cs
 String[]  Auswahl der gesuchten Eigenschaften (als Kontrollkästchen angezeigt)
 showGridOnly / sgo
 Boolesch  Bei „true“ wird nur das Raster angezeigt, nicht das Suchfeld.
 searchPanelCollapsed / spc  Boolesch  Bei „true“ wird das Suchfeld beim Laden ausgeblendet.
 hideRootPath / hrp  Boolesch  Bei „true“ wird das Stammverzeichnis-Feld ausgeblendet.
 hideQueryParams / hqp  Boolesch  Bei „true“ wird das Abfrage-Feld ausgeblendet.
 hideContentMode / hcm  Boolesch  Bei „true“ wird das Inhaltsmodus-Feld ausgeblendet.
 hideColsSelection / hcs  Boolesch  Bei „true“ wird das Spaltenauswahl-Feld ausgeblendet.
 hideExtraCols / hec  Boolesch  Bei „true“ wird das Feld für gesonderte Spalten ausgeblendet.
 hideSearchButton  Boolesch  Bei „true“ wird die Suchschaltfläche ausgeblendet.
 hideSaveButton / hsavep  Boolesch  Bei „true“ wird die Schaltfläche zum Speichern ausgeblendet.
 hideExportButton / hexpb  Boolesch  Bei „true“ wird die Schaltfläche zum Exportieren ausgeblendet.
 hideImportButton / hib  Boolesch  Bei „true“ wird die Schaltfläche zum Importieren ausgeblendet.
 hideResultNumber / hrn  Boolesch  Bei „true“ wird der Text zur Anzahl der Raster-Suchergebnisse ausgeblendet.
 hideInsertButton / hinsertb  Boolesch  Bei „true“ wird die Schaltfläche zum Einfügen des Rasters ausgeblendet.
 hideDeleteButton / hdelb  Boolesch  Bei „true“ wird die Schaltfläche zum Löschen ausgeblendet.
 hidePathCol / hpc  Boolesch  Bei „true“ wird die Rasterspalte „Pfad“ ausgeblendet.

Entwickeln einer auf dem Bulk Editor basierenden Komponente: der Produktlisten-Komponente

In diesem Abschnitt finden Sie einen Überblick über die Verwendung des Bulk Editors und eine Beschreibung der vorhandenen Geometrixx-Komponente, die auf dem Bulk Editor basiert: der Produktlisten-Komponente.

Mit der Produktlisten-Komponente können Benutzer eine Tabelle mit Daten anzeigen und bearbeiten. Sie können beispielsweise mit der Produktlisten-Komponente Produkte in einem Katalog darstellen. Die Daten werden in einer standardmäßigen HTML-Tabelle angezeigt. Die Bearbeitung erfolgt über das Dialogfeld Bearbeiten, das ein Bulk Editor-Widget enthält. (Es handelt sich hierbei um denselben Bulk Editor, auf den Sie auch unter /etc/importers/bulkeditor.html oder über das Menü „Tools“ zugreifen können.) Die Produktlisten-Komponente wurde für eine spezifische, eingeschränkte Bulk Editor-Funktionalität konfiguriert. Alle Teile des Bulk Editors (oder Komponenten, die vom Bulk Editor abgeleitet werden) können konfiguriert werden.

Mit dem Bulk Editor können Sie Zeilen hinzufügen, ändern, löschen, filtern und exportieren, Änderungen speichern und einen Satz an Zeilen importieren. Jede Zeile wird als Knoten unter der Instanz der Produktlisten-Komponente gespeichert. Jede Zelle ist eine Eigenschaft eines jeden Knotens. Dies wurde bei der Entwicklung festgelegt und kann leicht geändert werden. Sie können Knoten beispielsweise auch an anderer Stelle im Repository speichern. Die Aufgabe des Abfrage-Servlets besteht darin, eine Liste der anzuzeigenden Knoten zurückzugeben; der Suchpfad ist als Produktliste-Instanz definiert.

Der Quellcode der Produktlisten-Komponente ist im Repository unter /apps/geometrixx/components/productlist zu finden und setzt sich aus mehreren Teilen zusammen, beispielsweise allen CQ5-Komponenten:

  • HTML-Rendering: Das Rendering erfolgt in einer JSP-Datei (/apps/geometrixx/components/productlist/productlist.jsp). Die JSP-Datei liest die untergeordneten Knoten der aktuellen Produktlisten-Komponente und zeigt jeden dieser Knoten als Zeile einer HTML-Tabelle an.

  • Dialogfeld „Bearbeiten“: Hier definieren Sie die Bulk Editor-Konfiguration. Passen Sie das Dialogfeld an die Anforderungen der Komponente an: verfügbare Spalten und mögliche Aktionen, die beim Raster oder bei der Suche ausgeführt werden sollen. Informationen zu allen Konfigurationseigenschaften finden Sie unter Konfigurationseigenschaften des Bulk Editors.

Hier sehen Sie eine XML-Darstellung der untergeordneten Knoten des Dialogfelds:

        <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>

Konfigurationseigenschaften des Bulk Editors

Jeder Teil des Bulk Editors kann konfiguriert werden. In der folgenden Tabelle sind alle Konfigurationseigenschaften für den Bulk Editor aufgeführt.

Eigenschaftsname Definition
rootPath Stammverzeichnis der Suche
queryParams Suchabfrage
contentMode Bei „true“ wird der Inhaltsmodus aktiviert: Die Eigenschaften werden auf dem Knoten jcr:content gelesen, nicht auf dem Suchergebnisknoten
colsValue gesuchte Eigenschaften (geprüfte Werte von colsSelection, als Kontrollkästchen angezeigt)
extraCols gesondert gesuchte Eigenschaften (durch Kommas getrennt in einem Textfeld angezeigt)
initialSearch Bei „true“ wird die Abfrage beim Laden der Seite ausgeführt.
colsSelection Auswahl der gesuchten Eigenschaften (als Kontrollkästchen angezeigt)
showGridOnly Bei „true“ wird nur das Raster angezeigt, nicht Suchfeld. (Denken Sie daran, initialSearch auf „true“ festzulegen.)
searchPanelCollapsed Bei „true“ wird das Suchfeld standardmäßig ausgeblendet.
hideRootPath Das Stammverzeichnis-Feld wird ausgeblendet.
hideQueryParams Das Abfrage-Feld wird ausgeblendet.
hideContentMode Das Inhaltsmodus-Feld wird ausgeblendet.
hideColsSelection Das Spaltenauswahl-Feld wird ausgeblendet.
hideExtraCols Das Feld für gesonderte Spalten wird ausgeblendet.
hideSearchButton Die Suchschaltfläche wird ausgeblendet.
hideSaveButton Die Schaltfläche zum Speichern wird ausgeblendet.
hideExportButton Die Schaltfläche zum Exportieren wird ausgeblendet.
hideImportButton Die Schaltfläche zum Importieren wird ausgeblendet.
hideResultNumber Der Text mit der Anzahl an Rastersuchergebnissen wird ausgeblendet.
hideInsertButton Die Schaltfläche zum Einfügen des Rasters wird ausgeblendet.
hideDeleteButton Die Schaltfläche zum Löschen des Rasters wird ausgeblendet.
hidePathCol Die Spalte „Pfad“ des Rasters wird ausgeblendet.
queryURL Pfad zum Abfrage-Servlet
exportURL Pfad zum Exportieren des Servlets
importURL Pfad zum Importieren des Servlets
insertedResourceType Ressourcentyp, der zu einem Knoten hinzugefügt wird, wenn eine Zeile eingefügt wird.
saveButton Konfiguration des Widgets für die Schaltfläche zum Speichern
searchButton Konfiguration des Widgets für die Schaltfläche zum Suchen
exportButton Konfiguration des Widgets für die Schaltfläche zum Exportieren
importButton Konfiguration des Widgets für die Schaltfläche zum Importieren
searchPanel Konfiguration des Widgets für das Suchfeld
grid Konfiguration des Widgets für das Raster
store Store-Konfiguration
colModel Konfiguration des Rasterspalten-Modells
rootPathInput Konfiguration des rootPath-Widgets
queryParamsInput Konfiguration des queryParams-Widgets
contentModeInput Konfiguration des contentMode-Widgets
colsSelectionInput Konfiguration des colsSelection-Widgets
extraColsInput Konfiguration des extraCols-Widgets
colsMetadata Konfiguration der Metadaten-Spalte. Mögliche Eigenschaften sind (auf alle Zellen der Spalten angewendet):
  • cellStyle: HTML-Stil
  • cellCls: CSS-Klasse
  • readOnly: Bei „true“ können keine Werte geändert werden.
  • checkbox: Bei „true“ werden alle Zellen der Spalte als Kontrollkästchen (Werte: true/false) definiert.
  • forcedPosition: Ganzzahlenwert, der festlegt, an welcher Stelle im Raster die Spalte positioniert werden soll (Wert zwischen 0 und der Anzahl der Spalten – 1).


Konfigurieren der Spalten-Metadaten

Sie können für jede Spalte Folgendes konfigurieren:

  • Anzeige-Eigenschaften: HTML-Stil, CSS-Klasse und Schreibschutz

  • ein Kontrollkästchen

  • eine erzwungene Position

CSS und schreibgeschützte Spalten

Der Bulk Editor verfügt über drei Spaltenkonfigurationen:

  • Klassenname des Zellen-CSS (cellCls): ein CSS-Klassenname, der zu jeder Zelle der konfigurierten Spalte hinzugefügt wird

  • Zellen-Stil (cellStyle): ein HTML-Stil, der zu jeder Zelle der konfigurierten Spalte hinzugefügt wird

  • Schreibschutz (readOnly): Jede Zelle der konfigurierten Spalte wird als schreibgeschützt festgelegt.

Die Konfiguration muss wie die folgende definiert werden:

"colsMetadata": {
"Column name": {
     "cellStyle": "html style",
     "cellCls": "CSS class",
     "readOnly": true/false
}
}

Das folgende Beispiel findet sich in der Produktlisten-Komponente (/apps/geometrixx/components/productlist/dialog/items/editor/colsMetadata):

            <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>

Kontrollkästchen

Wenn die Konfigurationseigenschaft „Checkbox“ auf „true“ festgelegt ist, werden alle Zellen der Spalte als Kontrollkästchen gerendert. Ein aktiviertes Kontrollkästchen sendet true an das Servlet „Speichern“ des Servers, ein nicht aktiviertes sendet false. Im Header-Menü können Sie auch alle auswählen oder keines auswählen. Diese Optionen sind aktiviert, wenn der ausgewählte Header der Header einer Kontrollkästchenspalte ist.

Im vorhergehenden Beispiel enthält die Auswahlspalte nur Kontrollkästchen mit der Eigenschaft checkbox="true".

Erzwungene Position

Mit forcedPosition, den Metadaten für die erzwungene Position, können Sie festlegen, an welcher Stelle im Raster die Spalte platziert werden soll: 0 ist die erste Position und <Anzahl an Spalten> – 1 ist die letzte Position. Alle anderen Werte werden ignoriert.

Im vorhergehenden Beispiel ist die Auswahlspalte die erste Spalte mit forcedPosition = "0".

Abfrage-Servlet

Standardmäßig findet sich das Abfrage-Servlet unter /libs/wcm/core/components/bulkeditor/json.java. Sie können einen anderen Pfad konfigurieren, um die Daten abzurufen.

Das Abfrage-Servlet funktioniert wie folgt: Es erhält eine GQL-Abfrage und die zurückzugebenden Spalten, berechnet die Ergebnisse und sendet sie als JSON-Stream zurück an den Bulk Editor.

Im Fall der Produktlisten-Komponente werden zwei Parameter wie folgt an das Abfrage-Servlet gesendet:

  • query: "path:/content/geometrixx/en/customers/jcr:content/par/productlist Cube"
  • cols: "Selection,ProductId,ProductName,Color,CatalogCode,SellingSku"

und der folgende JSON-Stream wird zurückgegeben:

{
  "hits": [{
      "jcr:path": "/content/geometrixx/en/products/jcr:content/par/productlist/1258674828905",
      "ProductId": "21",
      "ProductName": "Cube",
      "Color": "Blue",
      "CatalogCode": "43244",
      "SellingSku": "32131"
    }
  ],
  "results": 1
}

Jeder Treffer entspricht einem Knoten und seinen Eigenschaften und wird als Zeile im Raster angezeigt.

Sie können das Abfrage-Servlet erweitern, sodass es ein komplexes Vererbungsmodell oder Knoten zurückgibt, die an einem bestimmten logischen Ort gespeichert sind. Mit dem Abfrage-Servlet können Sie alle Arten an komplexen Berechnungen durchführen. Das Raster kann daraufhin Zeilen anzeigen, die ein Aggregat mehrerer Knoten im Repository sind. Die Änderung und das Speichern dieser Zeilen werden in diesem Fall vom Speichern-Servlet verwaltet.

Speichern-Servlet

In der Standardkonfiguration des Bulk Editors ist jede Zeile ein Knoten und der Pfad dieses Knotens wird im Zeilendatensatz gespeichert. Der Bulk Editor behält die Verbindung zwischen der Zeile und dem Knoten über den JCR-Pfad bei. Wenn ein Benutzer das Raster bearbeitet, wird eine Liste aller Änderungen erstellt. Klickt ein Benutzer auf Speichern, wird eine POST-Abfrage mit den aktualisierten Eigenschaftswerten an jeden Pfad gesendet. Dies ist die Grundlage des Sling-Konzepts. Es funktioniert problemlos, wenn jede Zelle eine Eigenschaft des Knotens ist. Wenn das Abfrage-Servlet dagegen zur Berechnung von Vererbungen implementiert wurde, kann dieses Modell nicht funktionieren, da eine vom Abfrage-Servlet zurückgegebene Eigenschaft von einem anderen Knoten geerbt werden kann.

Beim Speichern-Servlet werden die Änderungen nicht direkt an jeden Knoten übermittelt, sondern an ein Servlet, das die Aufgabe des Speicherns übernimmt. Auf diese Weise kann dieses Servlet die Änderungen analysieren und die Eigenschaften auf dem richtigen Knoten speichern.

Jede aktualisierte Eigenschaft wird im folgenden Format an das Servlet gesendet:

  • Parametername: <JCR-Pfad>/<Eigenschaftsname>
    Beispiel: /content/geometrixx/en/products/jcr:content/par/productlist/1258674859000/SellingSku
  • Wert: <Wert>
    Beispiel: 12123

 

Das Servlet muss wissen, wo die Eigenschaft catalogCode gespeichert ist.

Eine standardmäßige Implementierung des Speichern-Servlets findet sich unter /libs/wcm/bulkeditor/save/POST.jsp und wird in der Produktlisten-Komponente genutzt. Es übernimmt alle Parameter der Anfrage (mit dem Format <JCR-Pfad>/<Eigenschaftsname>) und schreibt mithilfe der JCR-API Eigenschaften auf Knoten. Außerdem erstellt das Servlet Knoten, wenn sie nicht vorhanden sind (in das Raster eingefügte Zeilen).

Der Standardcode sollte nicht verwendet werden, da er erneut implementiert, was der Server nativ macht (eine POST-Abfrage auf <JCR-Pfad>/<Eigenschaftsname>), und stellt somit nur einen guten Ausgangspunkt für die Entwicklung eines Speichern-Servlets dar, das ein Modell zur Vererbung von Eigenschaften verwaltet.

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie