开发批量编辑器

本节介绍如何开发批量编辑器工具以及如何扩展产品列表组件(基于批量编辑器)。

批量编辑器查询参数

使用批量编辑器时,可以将多个查询参数添加到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,将显示字段(默认值)。

以下是Bulk Editor查询参数的列表:

注意

每个参数可以有一个长名称和短名称。 例如,搜索根路径的长名称为 rootPath,则简短的一点是 rp. 如果未定义长名称,则从请求中读取短名称。

参数

(长名称/短名称)

类型
描述
rootPath / rp
字符串 搜索根路径
queryParams / qp
字符串 搜索查询
contentMode / cm
布尔值 为true时,启用内容模式
colsValue / cv
字符串[] 搜索的属性(colsSelection中的选中值显示为复选框)
extraCols / ec
字符串[] 额外的搜索属性(显示在以逗号分隔的文本字段中)
initialSearch / is
布尔值 如果为true,则查询在页面加载时执行
colsSelection / cs
字符串[] 搜索属性选择(显示为复选框)
showGridOnly / sgo
布尔值 如果为true,则仅显示网格,而不显示搜索面板
searchPanelCollapsed / spc 布尔值 为true时,搜索面板在加载时折叠
hideRootPath / hrp 布尔值 为true时,隐藏根路径字段
hideQueryParams / hqp 布尔值 为true时,隐藏查询字段
hideContentMode / hcm 布尔值 为true时,隐藏内容模式字段
hideColsSelection / hcs 布尔值 为true时,隐藏列选择字段
hideExtraCols / hec 布尔值 为true时,隐藏额外的列字段
hideSearchButton 布尔值 如果为true,则隐藏搜索按钮
hideSaveButton / hsavep 布尔值 为true时,隐藏保存按钮
hideExportButton / hexpb 布尔值 如果为true,则隐藏导出按钮
hideImportButton / hib 布尔值 为true时,隐藏导入按钮
hideResultNumber / hrn 布尔值 如果为true,则隐藏网格搜索结果编号文本
hideInsertButton / hinsertb 布尔值 为true时,隐藏网格插入按钮
hideDeleteButton / hdelb 布尔值 为true时,隐藏网格删除按钮
hidePathCol / hpc 布尔值 为true时,隐藏网格“路径”列

开发基于批量编辑器的组件:产品列表组件

本节概述如何使用批量编辑器,并介绍基于批量编辑器的现有Geometrixx组件:产品列表组件。

通过产品列表组件,用户可显示和编辑数据表。 例如,您可以使用产品列表组件表示目录中的产品。 该信息会显示在标准HTML表中,并且任何编辑操作都将在中执行 编辑 对话框,其中包含BulkEditor构件。 (此批量编辑器与在/etc/importers/bulkeditor.html上或通过“工具”菜单访问的编辑器相同)。 产品列表组件已针对特定的有限批量编辑器功能进行了配置。 可以配置批量编辑器的每个部分(或从批量编辑器派生的组件)。

使用批量编辑器,您可以添加、修改、删除、筛选和导出行,保存修改并导入一组行。 每行都作为节点存储在产品列表组件实例本身下。 每个单元格都是每个节点的属性。 这是一种设计选择,可以轻松更改,例如,您可以将节点存储在存储库中的其他位置。 查询servlet的角色是返回要显示的节点列表;搜索路径被定义为产品列表实例。

产品列表组件的源代码在存储库的/apps/geometrixx/components/productlist中提供,它由多个部分组成,如所有Adobe Experience Manager (AEM)组件:

  • HTML渲染:渲染在JSP文件(/apps/geometrixx/components/productlist/productlist.jsp?lang=zh-Hans)中完成。 JSP读取当前“产品列表”组件的子节点,并将每个子节点显示为HTML表的一行。
  • “编辑”对话框,可在其中定义批量编辑器配置。 配置对话框以匹配组件的需求:可用列以及在网格或搜索上可能执行的操作。 参见 批量编辑器配置属性 有关所有配置属性的信息。

以下是对话框子节点的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 搜索查询
内容模式 True表示启用内容模式:属性在jcr:content节点上读取,而不是在搜索结果节点上读取
colsvalue 搜索的属性(colsSelection中选中的值显示为复选框)
额外栏 额外的搜索属性(以逗号分隔的文本字段显示)
初始搜索 True表示在页面加载时执行查询
colsSelection 搜索属性选择(显示为复选框)
showGridOnly True表示仅显示网格,而不显示搜索面板(不要忘记将initialSearch设置为true)
searchPanelCollapsed 如果为True,则默认情况下折叠搜索面板
hideRootPath 隐藏根路径字段
隐藏查询参数 隐藏查询字段
隐藏内容模式 隐藏内容模式字段
hideColsSelection 隐藏列选择字段
hideExtraCols 隐藏额外栏位
hideSearchButton 隐藏搜索按钮
hideSaveButton 隐藏保存按钮
hideExportButton 隐藏导出按钮
hideImportButton 隐藏导入按钮
hideResultNumber 隐藏网格搜索结果编号文本
隐藏插入按钮 隐藏网格插入按钮
hideDeleteButton 隐藏网格删除按钮
hidePathCol 隐藏网格“路径”列
queryURL 查询servlet的路径
exportURL 导出servlet的路径
importURL 导入servlet的路径
insertedResourceType 插入行时添加到节点的资源类型
saveButton 保存按钮构件配置
searchButton 搜索按钮构件配置
exportButton 导出按钮构件配置
importButton 导入按钮构件配置
searchPanel 搜索面板构件配置
网格 网格构件配置
存储 存储配置
colModel 网格列模型配置
rootPathInput rootPath构件配置
queryParamsInput queryParams构件配置
contentModeInput contentMode构件配置
colsSelectionInput colsSelection小组件配置
extraColsInput extraCols构件配置
colsMetadata 列元数据配置。 可能的属性包括(应用于列的所有单元格):
  • cellStyle: html样式
  • cellCls: css类
  • readOnly:true表示无法更改值
  • 复选框:true可将列的所有单元格定义为复选框(true/false值)
  • forcedPosition:整数值,用于指定列必须放置在网格中的位置(介于0和列数–1之间)


列元数据配置

您可以为每个列配置:

  • 显示属性:html样式、CSS类和只读

  • 复选框

  • 强制位置

CSS和只读列

批量编辑器具有三个列配置:

  • 单元格CSS类名称(cellCls):添加到已配置列的每个单元格的CSS类名称。
  • 单元格样式(cellStyle):添加到已配置列的每个单元格的HTML样式。
  • 只读(readOnly):为已配置列的每个单元格设置只读。

必须将配置定义为以下配置:

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

以下示例可在productlist组件(/apps/geometrixx/components/productlist/dialog/items/editor/colsMetadata?lang=zh-Hans)中找到:

            <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 否则。 在标题菜单中,您还可以 全选全部不选. 如果所选标题是复选框列的标题,则会启用这些选项。

在前面的示例中,选择列只包含复选框,例如checkbox="true"。

强制位置

强制位置元数据forcedPosition允许您指定列在网格中的放置位置:0是第一个位置,而 <number of="" columns="">-1是最后一个位置。 任何其他值将被忽略。

在前面的示例中,选择列是第一列,即forcedPosition="0"。

查询Servlet

默认情况下,查询servlet位于 /libs/wcm/core/components/bulkeditor/json.java. 您可以配置其他路径以检索数据。

查询servlet的工作方式如下:它接收GQL查询和要返回的列,计算结果,并将结果作为JSON流发送回批量编辑器。

在产品列表组件用例中,发送到查询servlet的两个参数如下:

  • 查询: "path:/content/geometrixx/en/customers/jcr:content/par/productlist Cube"
  • 列:“Selection、ProductId、ProductName、Color、CatalogCode、SellingSku”

并且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管理。

保存Servlet

在批量编辑器的默认配置中,每行都是一个节点,此节点的路径存储在行记录中。 批量编辑器通过jcr路径保持行和节点之间的链接。 当用户编辑网格时,将生成所有修改的列表。 用户点击时 保存,则会向每个路径发送一个POST查询,其中包含更新后的属性值。 这是Sling概念的基础,如果每个单元格都是节点的属性,则它工作正常。 但是,如果实施查询servlet来执行继承计算,则此模型无法工作,因为查询servlet返回的属性可以从其他节点继承。

保存servlet概念是,修改不会直接发布到每个节点,而是发布到执行保存作业的一个servlet。 这使此servlet能够分析修改并将属性保存在正确的节点上。

每个更新的属性都会以下列格式发送到servlet:

  • 参数名称: <jcr path="">/<property name="">

    示例: /content/geometrixx/en/products/jcr:content/par/productlist/1258674859000/SellingSku

  • 值: <value>

    示例: 12123

servlet需要知道catalogCode属性的存储位置。

/libs/wcm/bulkeditor/save/POST.jsp上提供了默认的Save servlet实施,该实施用在产品列表组件中。 它获取请求中的所有参数(使用 <jcr path="">/<property name=""> format)和使用JCR API在节点上写入属性。 如果节点不存在,它还会创建节点(网格插入行)。

默认代码不应按原样使用,因为它重新实现了服务器本机执行的操作(POST <jcr path="">/<property name="">),因此它只是构建可管理属性继承模型的保存servlet的良好起点。

在此页面上