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:
rootPath
, det korta är rp
. Om det långa namnet inte är definierat läses det korta av begäran.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.
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.