I det här avsnittet beskrivs hur du utvecklar verktyget Gruppredigerare och hur du utökar komponenten Produktlista, som baseras på gruppredigeraren.
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 produktlistkomponenten, 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 Rotsökväg fältet as hrp=true döljs. Med parametern hrp=false visas fältet (standardvärdet).
Här följer en lista med frågeparametrar för gruppredigeraren:
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
, den 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 aktiveras innehållsläget |
colValue / 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 / is |
Boolean | om true utförs frågan vid sidinläsning |
minutesSelection / 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" |
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 HTML-tabell och redigering utförs i 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):
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>
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 används (används på alla celler i kolumnen):
|
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:
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 (/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, false annars. På rubrikmenyn kan du även markera alla eller välj ingen. 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
Metadata för tvingad position med metoden forcerad position kan du ange var kolumnen ska placeras i rutnätet: 0 är den första platsen och <number of="" columns="">-1 är den sista positionen. Alla andra värden ignoreras.
I det tidigare exemplet är markeringskolumnen den första kolumnen som forceradPosition="0".
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:
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.
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 Spara skickas en POST till varje sökväg med de uppdaterade egenskapsvärdena. 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="">/<property name="">
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 en <jcr path="">/<property name=""> format) och skriver egenskaper på noder med JCR-API:t. Noden skapas också om den inte finns (rutnätsinfogade rader).
Använd inte standardkoden som den är eftersom den återimplementerar det som servern själv gör (en POST på <jcr path="">/<property name="">) och är därför bara en bra utgångspunkt för att skapa en Spara-server som kan hantera en egenskapsarvsmodell.