Developing the Bulk Editor developing-the-bulk-editor

I det här avsnittet beskrivs hur du utvecklar verktyget Gruppredigerare och hur du utökar komponenten Produktlista, som baseras på gruppredigeraren.

Frågeparametrar för gruppredigerare bulk-editor-query-parameters

När du arbetar med gruppredigeraren finns det flera frågeparametrar som du kan lägga till i URL:en för att anropa gruppredigeraren med en viss konfiguration. Om du vill att gruppredigeraren alltid ska användas med en viss konfiguration, till exempel som i produktlistekomponenten, måste du redigera bulkeditor.jsp (i /libs/wcm/core/components/bulkeditor) eller skapa en komponent med den specifika konfigurationen. Ändringar som görs med frågeparametrar är inte permanenta.

Om du t.ex. skriver följande i webbläsarens URL:

https://<servername><port_number>/etc/importers/bulkeditor.html?rootPath=/content/geometrixx/en&queryParams=geometrixx&initialSearch=true&hrp=true

Massredigeraren visas utan fältet Rotsökväg eftersom hrp=true döljer fältet. Med parametern hrp=false visas fältet (standardvärdet).

Här följer en lista med frågeparametrar för gruppredigeraren:

NOTE
Varje parameter kan ha ett långt och ett kort namn. Det långa namnet för sökrotsökvägen är till exempel rootPath, det korta är rp. Om det långa namnet inte är definierat läses det korta av begäran.

Parameter

(långt namn/kort namn)

Typ
Beskrivning
rootPath / rp
Sträng
sökrotsökväg
queryParams / qp
Sträng
sökfråga
contentMode / cm
Boolean
när true är innehållsläget aktiverat
ProtokollValue / cv
Sträng[]
sökta egenskaper (markerade värden från colSelection visas som kryssrutor)
extraCols / ec
Sträng[]
extra sökta egenskaper (visas i ett kommaseparerat textfält)
initialSearch / är
Boolean
när true utförs frågan vid sidinläsning
ProtokollSelection / cs
Sträng[]
sökbar egenskapsmarkering (visas som kryssrutor)
showGridOnly / go
Boolean
om true visas endast stödrastret och inte sökpanelen
searchPanelCollapsed/spc
Boolean
när true är sökpanelen komprimerad vid inläsning
hideRootPath / hrp
Boolean
om true döljs rotsökvägsfältet
hideQueryParams / hqp
Boolean
om true döljs frågefältet
hideContentMode / hcm
Boolean
när true döljs fältet för innehållsläge
hideColsSelection / hcs
Boolean
om true döljs kolumnmarkeringsfältet
hideExtraCols / hec
Boolean
om true döljs fältet för extra kolumner
hideSearchButton
Boolean
om true döljs sökknappen
hideSaveButton / hsavep
Boolean
om true döljs knappen Spara
hideExportButton / hexpb
Boolean
när true döljs exportknappen
hideImportButton / hib
Boolean
om true döljs importknappen
hideResultNumber / hrn
Boolean
om true döljs texten för stödrastrets sökresultatnummer
hideInsertButton / hinsertb
Boolean
om true döljs infogningsknappen för stödrastret
hideDeleteButton / hdelb
Boolean
om true döljs knappen för att ta bort stödraster
hidePathCol / hpc
Boolean
om true döljs stödrastrets "sökvägskolumn"

Utveckla en gruppredigeringsbaserad komponent: produktlistkomponenten developing-a-bulk-editor-based-component-the-product-list-component

I det här avsnittet finns en översikt över hur du använder gruppredigeraren och en beskrivning av den befintliga Geometrixx baserat på gruppredigeraren: produktlistekomponenten.

Med komponenten Produktlista kan användare visa och redigera en datatabell. Du kan till exempel använda komponenten Produktlista för att representera produkter i en katalog. Informationen visas i en standardtabell i HTML och redigering utförs i dialogrutan Redigera som innehåller en BulkEditor-widget. (Den här gruppredigeraren är samma som den som finns på /etc/importers/bulkeditor.html eller via Verktyg-menyn). Komponenten Produktlista har konfigurerats för specifika, begränsade funktioner i gruppredigeraren. Alla delar av gruppredigeraren (eller komponenter som härletts från gruppredigeraren) kan konfigureras.

Med gruppredigeraren kan du lägga till, ändra, ta bort, filtrera och exportera raderna, spara ändringar och importera en uppsättning rader. Varje rad lagras som en nod under själva produktlistkomponentinstansen. Varje cell är en egenskap för varje nod. Det här är ett designalternativ och kan enkelt ändras. Du kan till exempel lagra noder någon annanstans i databasen. Frågeserverns roll är att returnera listan med noder som ska visas. Sökvägen definieras som en produktlistinstans.

Källkoden för produktlistkomponenten finns i databasen i /apps/geometrixx/components/productlist och består av flera delar som alla Adobe Experience Manager-komponenter (AEM):

  • HTML: Återgivningen görs i en JSP-fil (https://experienceleague.adobe.com/apps/geometrixx/components/productlist/productlist.jsp?lang=sv). JSP läser delnoderna för den aktuella produktlistkomponenten och visar var och en av dem som en rad i en HTML-tabell.
  • Dialogrutan Redigera, där du definierar konfigurationen för gruppredigeraren. Konfigurera dialogrutan så att den matchar komponentens behov: tillgängliga kolumner och möjliga åtgärder som utförs i rutnätet eller i sökningen. Mer information om alla konfigurationsegenskaper finns i Konfigurationsegenskaper för gruppredigerare.

Här är en XML-representation av delnoderna i dialogrutan:

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

Konfigurationsegenskaper för gruppredigeraren bulk-editor-configuration-properties

Alla delar av gruppredigeraren kan konfigureras. I följande tabell visas alla konfigurationsegenskaper för gruppredigeraren.

Egenskapsnamn
Definition
rootPath
Sökrotsökväg
queryParams
Sökfråga
contentMode
True to enable content mode: properties are read on jcr:content node and not on search result node
colValue
Sökda egenskaper (markerade värden från colSelection visas som kryssrutor)
extraCols
Extra sökta egenskaper (visas i ett textfält med kommaseparerad)
initialSearch
True to perform query on page load
colSelection
Markering av sökta egenskaper (visas som kryssrutor)
showGridOnly
True to show only the grid and not the search panel (glöm inte att ställa in initialSearch på true)
searchPanelCollapsed
Sant att komprimera sökpanelen som standard
hideRootPath
Dölj rotsökvägsfält
hideQueryParams
Dölj frågefält
hideContentMode
Dölj fältet för innehållsläge
hideColsSelection
Dölj fältet för val av protokoll
hideExtraCols
Dölj extra protokollfält
hideSearchButton
Dölj sökknapp
hideSaveButton
Dölj knappen Spara
hideExportButton
Dölj exportknapp
hideImportButton
Dölj importknapp
hideResultNumber
Dölj text för sökresultat för stödraster
hideInsertButton
Dölj infogningsknapp för stödraster
hideDeleteButton
Knappen Ta bort stödraster
hidePathCol
Dölj kolumnen "bana" för stödraster
queryURL
Sökväg till frågeservice
exportURL
Sökväg till exportserver
importURL
Sökväg till importservlet
insertResourceType
Resurstypen läggs till i noden när en rad infogas
saveButton
Spara konfiguration för knappwidget
searchButton
Widget-konfiguration för sökknapp
exportButton
Konfigurera knappwidget
importButton
Konfigurera knappwidget
searchPanel
Widgetkonfiguration för sökpanel
rutnät
Konfiguration för stödrasterwidget
store
Butikskonfiguration
colModel
Modellkonfiguration för stödrasterkolumn
rootPathInput
rootPath widget config
queryParamsInput
queryParams widget config
contentModeInput
contentMode widget config
colSelectionInput
formsSelection widget config
extraColsInput
extraCols widget, konfiguration
ProtokollMetadata

Kolumnens metadatakonfiguration. Möjliga egenskaper har angetts (används för alla celler i kolumnen):

  • cellStyle: html-format

  • cellCls: css-klass

  • readOnly: true to not able change value

  • kryssruta: true om du vill definiera alla celler i kolumnen som kryssrutor (true/false-värden)

  • forcerad position: heltalsvärde som anger var kolumnen måste placeras i rutnätet (mellan 0 och antal kolumner-1)

Metadatakonfiguration för kolumner columns-metadata-configuration

Du kan konfigurera för varje kolumn:

  • visningsegenskaper: html-format, CSS-klass och skrivskyddad

  • en kryssruta

  • en fast position

CSS och skrivskyddade kolumner

Gruppredigeraren har tre kolumnkonfigurationer:

  • Cell-CSS-klassnamn (cellCls): ett CSS-klassnamn som läggs till i varje cell i den konfigurerade kolumnen.
  • Cellformat (cellStyle): ett HTML-format som läggs till i varje cell i den konfigurerade kolumnen.
  • Skrivskyddad (readOnly): skrivskyddad anges för varje cell i den konfigurerade kolumnen.

Konfigurationen måste definieras som följande:

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

Följande exempel finns i produktlistekomponenten (https://experienceleague.adobe.com/apps/geometrixx/components/productlist/dialog/items/editor/colMetadata?lang=sv):

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

Kryssruta

Om konfigurationsegenskapen för kryssrutan är true återges alla celler i kolumnen som kryssrutor. En kryssruta skickar true till serverns Spara-server, annars false. På rubrikmenyn kan du även markera alla eller inte. De här alternativen aktiveras om den valda rubriken är rubriken för en kryssrutekolumn.

I det tidigare exemplet innehåller markeringskolumnen bara kryssrutor som checkbox="true".

Tvingad position

Med metadata för framtvingad position med fast position kan du ange var kolumnen placeras i rutnätet: 0 är den första platsen och <antal kolumner>-1 är den sista positionen. Alla andra värden ignoreras.

I det tidigare exemplet är markeringskolumnen den första kolumnen som forceradPosition="0".

Frågeservlet query-servlet

Som standard finns frågeservern på /libs/wcm/core/components/bulkeditor/json.java. Du kan konfigurera en annan sökväg för att hämta data.

Frågeservern fungerar så här: den tar emot en GQL-fråga och de kolumner som ska returneras, beräknar resultaten och skickar tillbaka resultaten till gruppredigeraren som en JSON-ström.

I produktlistekomponenterna är de två parametrar som skickas till frågeservern följande:

  • fråga: "path:/content/geometrixx/en/customers/jcr:content/par/productlist Cube"
  • Protokoll: "Selection,ProductId,ProductName,Color,CatalogCode,SellingSku"

Och JSON-strömmen returneras enligt följande:

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

Varje träff motsvarar en nod och dess egenskaper, och visas som en rad i rutnätet.

Du kan utöka frågeservern för att returnera en komplex arvsmodell eller returnera noder som lagras på en viss logisk plats. Frågeservern kan användas för alla typer av komplex beräkning. Rutnätet kan sedan visa rader som är en sammanställning av flera noder i databasen. Ändringen och sparandet av dessa rader måste i så fall hanteras av Spara server.

Spara server save-servlet

I standardkonfigurationen för gruppredigeraren är varje rad en nod och sökvägen för den här noden lagras i radposten. Med gruppredigeraren behålls länken mellan raden och noden genom jcr-sökvägen. När en användare redigerar stödrastret skapas en lista över alla ändringar. När en användare klickar på Spara skickas en POST med uppdaterade egenskapsvärden till varje sökväg. Detta är grunden för Sling-konceptet och fungerar bra om varje cell är en nodegenskap. Men om frågeservern implementeras för arvsberäkning kan modellen inte fungera som en egenskap som returneras av frågeservern kan ärvas från en annan nod.

Konceptet Spara serverlet är att ändringarna inte publiceras direkt till varje nod, utan att de bokförs på en server som utför sparandet. Detta ger den här servern möjlighet att analysera ändringarna och spara egenskaperna på rätt nod.

Varje uppdaterad egenskap skickas till servern i följande format:

  • Parameternamn: <jcr path>/<egenskapsnamn>

    Exempel: /content/geometrixx/en/products/jcr:content/par/productlist/1258674859000/SellingSku

  • Värde: <value>

    Exempel: 12123

Servern behöver veta var egenskapen catalogCode lagras.

En standardserverimplementering för Spara finns på /libs/wcm/bulkeditor/save/POST.jsp och används i produktlistkomponenten. Den tar alla parametrar från begäran (med formatet <jcr path>/<egenskapsnamn>) och skriver egenskaper på noder med JCR API. Noden skapas också om den inte finns (rutnätsinfogade rader).

Använd inte standardkoden som den är eftersom den återimplementerar det som servern gör internt (en POST på <jcr path>/<egenskapsnamn>) och därför bara är en bra startpunkt för att skapa en Spara-server som kan hantera en egenskapsarvsmodell.

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2