本節介紹如何開發批量編輯器工具以及如何擴展基於批量編輯器的產品清單元件。
使用批量編輯器時,有幾個查詢參數可以添加到URL中,以使用特定配置調用批量編輯器。 如果您希望批量編輯器始終與特定配置(例如,在「產品清單」元件中)一起使用,則需要修改bulkeditor.jsp(位於/libs/wcm/core/components/bulkeditor中)或建立具有特定配置的元件。 使用查詢參數進行的更改不是永久的。
例如,如果您在瀏覽器的URL中鍵入以下內容:
https://<servername><port_number>/etc/importers/bulkeditor.html?rootPath=/content/geometrixx/en&queryParams=geometrixx&initialSearch=true&hrp=true
批量編輯器顯示時不顯示根路徑欄位,因為hrp=true會隱藏該欄位。 參數hrp=false時,會顯示欄位(預設值)。
以下是批量編輯器查詢參數的清單:
每個參數都可以有長名和短名。 例如,搜索根路徑的長名稱為rootPath
,短名稱為rp
。 如果未定義長名稱,則從請求中讀取短名稱。
參數 (長名/短名) |
類型 |
說明 |
rootPath / rp |
字串 | 搜索根路徑 |
queryParams / qp |
字串 | 搜索查詢 |
contentMode / cm |
布林值 (Boolean) | 若為true,則內容模式為enabled |
colsValue / cv |
String[] | 已搜索屬性(colsSelection中的選定值顯示為複選框) |
extraCols / ec |
字串[] | 額外搜尋的屬性(顯示在逗號分隔的文字欄位中) |
initialSearch / is |
布林值 (Boolean) | 若為true,則在頁面載入時執行查詢 |
colsSelection / cs |
字串[] | 搜索屬性選擇(顯示為複選框) |
showGridOnly / sgo |
布林值 (Boolean) | 當為true時,只顯示網格,而不顯示搜索面板 |
searchPanelCollapsed / spc | 布林值 (Boolean) | 若為true,則載入時搜尋面板會收合 |
hideRootPath / hrp | 布林值 (Boolean) | 當為true時,隱藏根路徑欄位 |
hideQueryParams / hqp | 布林值 (Boolean) | 當為true時,隱藏查詢欄位 |
hideContentMode / hcm | 布林值 (Boolean) | 若為true,則隱藏內容模式欄位 |
hideColsSelection / hcs | 布林值 (Boolean) | 當為true時,隱藏列選擇欄位 |
hideExtraCols / hec | 布林值 (Boolean) | 當為true時,隱藏多餘的列欄位 |
hideSearchButton | 布林值 (Boolean) | 當為true時,隱藏搜尋按鈕 |
hideSaveButton / hsavep | 布林值 (Boolean) | 當為true時,隱藏保存按鈕 |
hideExportButton / hexpb | 布林值 (Boolean) | 當為true時,隱藏匯出按鈕 |
hideImportButton / hib | 布林值 (Boolean) | 當為true時,隱藏匯入按鈕 |
hideResultNumber / hrn | 布林值 (Boolean) | 當為true時,隱藏網格搜索結果編號文本 |
hideInsertButton / hinsertb | 布林值 (Boolean) | 當為true時,隱藏網格插入按鈕 |
hideDeleteButton / hdelb | 布林值 (Boolean) | 當為true時,隱藏網格刪除按鈕 |
hidePathCol / hpc | 布林值 (Boolean) | 當為true時,隱藏格線「路徑」欄 |
本節概述如何使用批量編輯器,並說明現有的Geometrixx元件(以批量編輯器為基礎):產品清單元件。
「產品清單」元件可讓使用者顯示和編輯資料表。 例如,您可以使用「產品清單」元件來表示目錄中的產品。 這些資訊會顯示在標準HTML表格中,而任何編輯都會在編輯對話方塊中執行,其中包含BulkEditor介面工具集。 (此批量編輯器與可從/etc/importers/bulkeditor.html或「工具」功能表存取的編輯器完全相同)。 產品清單元件已針對特定、有限的大量編輯器功能進行設定。 批量編輯器的每個部分(或從批量編輯器派生的元件)都可以配置。
使用批量編輯器,您可以添加、修改、刪除、篩選和導出行、保存修改和導入行集。 每一行都儲存為「產品清單」元件實例本身下的節點。 每個單元格都是每個節點的屬性。 這是一種設計選擇,可以輕鬆更改,例如,您可以將節點儲存在儲存庫中的其他位置。 查詢servlet的角色是返回要顯示的節點清單;搜索路徑被定義為「產品清單」實例。
「產品清單」元件的原始碼可在/apps/geometrixx/components/productlist儲存庫中取用,並由多個部分(例如所有AEM元件)組成:
以下是對話子節點的XML表示:
<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>
批量編輯器的每個部分都可以配置。 下表列出了批量編輯器的所有配置屬性。
屬性名稱 | 定義 |
rootPath | 搜尋根路徑 |
queryParams | 搜尋查詢 |
contentMode | 啟用內容模式為true:屬性在jcr:content節點上讀取,在搜索結果節點上不讀取 |
colsValue | 已搜尋的屬性(colsSelection中的核取值顯示為核取方塊) |
extraCols | 額外搜尋的屬性(以逗號分隔的文字欄位顯示) |
initialSearch | True可在頁面載入時執行查詢 |
colsSelection | 搜尋的屬性選擇(顯示為核取方塊) |
showGridOnly | True:只顯示格線而不顯示搜尋面板(請勿忘記將initialSearch設為true) |
searchPanelCollapsed | 預設為True可收合搜尋面板 |
hideRootPath | 隱藏根路徑欄位 |
hideQueryParams | 隱藏查詢欄位 |
hideContentMode | 隱藏內容模式欄位 |
hideColsSelection | 隱藏選取欄位 |
hideExtraCols | 隱藏額外的cols欄位 |
hideSearchButton | 隱藏搜尋按鈕 |
hideSaveButton | 隱藏儲存按鈕 |
hideExportButton | 隱藏匯出按鈕 |
hideImportButton | 隱藏匯入按鈕 |
hideResultNumber | 隱藏網格搜索結果編號文本 |
hideInsertButton | 隱藏網格插入按鈕 |
hideDeleteButton | 隱藏網格刪除按鈕 |
hidePathCol | 隱藏格線「路徑」欄 |
queryURL | 查詢servlet的路徑 |
exportURL | 導出servlet的路徑 |
importURL | 導入servlet的路徑 |
insertedResourceType | 插入行時添加到節點的資源類型 |
saveButton | 儲存按鈕Widget設定 |
searchButton | 搜尋按鈕Widget設定 |
exportButton | 匯出按鈕Widget設定 |
importButton | 匯入按鈕介面工具集設定 |
searchPanel | 搜尋面板Widget設定 |
網格 | 格線介面工具集設定 |
商店 | 商店設定 |
colModel | 網格列模型配置 |
rootPathInput | rootPath widget設定 |
queryParamsInput | queryParams Widget設定 |
contentModeInput | contentMode widget設定 |
colsSelectionInput | colsSelection Widget設定 |
extraColsInput | extraCols widget設定 |
colsMetadata | 欄中繼資料設定。 可能的屬性是(套用至欄的所有儲存格):
|
您可以為每個欄設定:
顯示屬性:html樣式、CSS類別和唯讀
複選框
強迫職位
CSS和唯讀欄
批量編輯器有三種列配置:
配置必須定義為以下配置:
"colsMetadata": {
"Column name": {
"cellStyle": "html style",
"cellCls": "CSS class",
"readOnly": true/false
}
}
以下範例可在產品清單元件(/apps/geometrixx/components/productlist/dialog/items/editor/colsMetadata?lang=zh-Hant)中找到:
<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>
核取方塊
如果複選框配置屬性設定為true,則列的所有單元格都將顯示為複選框。 複選框將true發送到伺服器保存Servlet,否則發送false。 在標題菜單中,您也可以選擇all或選擇none。 如果選定的標題是複選框列的標題,則會啟用這些選項。
在前面的示例中,選擇列只包含複選框作為checkbox="true"。
強迫位置
強制位置中繼資料forcedPosition可讓您指定欄在格線中的位置:0是第一位,<number of columns>-1是最後一位。 會忽略任何其他值。
在前例中,選擇欄是forcedPosition="0"的第一欄。
預設情況下,可在/libs/wcm/core/components/bulkeditor/json.java
中找到查詢Servlet。 您可以設定另一個路徑來擷取資料。
查詢Servlet的工作方式如下:它會接收GQL查詢和要返回的列,計算結果,並將結果作為JSON流發送回批量編輯器。
在「產品清單」元件案例中,發送到Query Servlet的兩個參數如下:
而傳回的JSON串流如下:
{
"hits": [{
"jcr:path": "/content/geometrixx/en/products/jcr:content/par/productlist/1258674828905",
"ProductId": "21",
"ProductName": "Cube",
"Color": "Blue",
"CatalogCode": "43244",
"SellingSku": "32131"
}
],
"results": 1
}
每個點擊都對應一個節點及其屬性,並在網格中顯示為一行。
可以擴展查詢Servlet以返回複雜的繼承模型或返回儲存在特定邏輯位置的節點。 查詢Servlet可用於進行任何類型的複雜計算。 然後,網格可以顯示儲存庫中多個節點的聚合行。 在這種情況下,這些行的修改和保存必須由保存Servlet管理。
在批量編輯器的預設配置中,每行都是一個節點,該節點的路徑儲存在行記錄中。 批量編輯器通過jcr路徑保留行和節點之間的連結。 當使用者編輯網格時,會建立所有修改的清單。 當用戶按一下Save時,會向每個路徑發送具有更新屬性值的POST查詢。 這是Sling概念的基礎,如果每個儲存格都是節點的屬性,則其運作良好。 但是,如果實現Query Servlet進行繼承計算,則此模型不能作為Query Servlet返回的屬性從另一個節點繼承。
「保存servlet」概念是,修改不直接發佈到每個節點,而是發佈到執行保存作業的一個servlet。 這使此Servlet能夠分析修改並將屬性保存在正確的節點上。
每個更新的屬性都以下列格式發送到servlet:
參數名稱:<jcr path>/<property name>
範例:/content/geometrixx/tw/products/jcr:content/par/productlist/1258674859000/SellingSku
值:<value>
例如: 12123
Servlet需要知道catalogCode屬性的儲存位置。
預設的Save servlet實施可在/libs/wcm/bulkeditor/save/POST.jsp上獲得,並用於「產品清單」元件。 它會從請求中取用所有參數(使用<jcr path>/<property name>格式),並使用JCR API在節點上寫入屬性。 如果節點不存在(網格插入的行),它也會建立節點。
預設代碼不應像重新實施伺服器本機操作那樣使用(<jcr path>/<property name>上的POST),因此,它只是構建將管理屬性繼承模型的保存Servlet的一個好起點。