使用架構,您可以延伸這些標準報表,或開發您自己的全新報表。 報告架構與現有的CQ5概念和原則緊密整合,讓開發人員可以將其現有的CQ5知識當做開發報告的跳板。
對於隨AEM傳送的標準報表:
教學課程建立您自己的報表——範例還顯示可使用下列原則的數量。
您也可以參考標準報表,以檢視其他實作範例。
在下列範例和定義中,會使用下列符號:
每行定義一個節點或一個屬性,其中:
N:<name> [<nodeType>]
描述名稱為<*name*>
且節點類型為<*nodeType*>
的節點。
P:<name> [<propertyType]
說明名稱為<*name*>
的屬性和屬性類型為<*propertyType*>
的屬性。
P:<name> = <value>
說明必須設為<value>
值的<name>
屬性。
例如,String|String[]
表示屬性可以是String或String[]。
[]
描述了陣列;例如[] String或查詢定義中的節 點陣列。除非另有說明,否則預設類型為:
nt:unstructured
String
報告框架遵循下列原則:
它完全以CQ5 QueryBuilder執行的查詢所傳回的結果集為基礎。
結果集定義了報告中顯示的資料。 結果集中的每一行都對應於報表的表格視圖中的一行。
可在結果集上執行的操作類似於RDBMS概念;主要是grouping和aggregation。
大部分的資料擷取和處理都是在伺服器端完成。
用戶端負責顯示預先處理的資料。 客戶端僅執行次要處理任務(例如,在單元格內容中建立連結)。
報告框架(由標準報告的結構說明)使用下列由處理佇列饋送的構成區塊:
報表頁面:
reportbase
元件構成任何報表的基礎:
保存傳送基礎資料結果集的query的定義。
是已調整的段落系統,將包含新增至報表的所有欄(columnbase
)。
定義哪些圖表類型可用以及哪些當前活動。
定義「編輯」對話方塊,可讓使用者設定報表的某些方面。
每列都是 columnbase
元件的實例,該實例:
reportbase
)使用。查詢:
定義為 reportbase
元件的一部分。
以CQ QueryBuilder為基礎。
擷取用作報表基礎的資料。 結果集(表)的每一行都與查詢返回的節點相關聯。 然後,從此資料集中提取關於單個列的特定資訊。
通常包括:
這裡的關鍵點是,查詢結果集中返回的每個單一節點都用來在報表上產生單一行(因此是1:1關係)。
開發人員必須確保為報表定義的查詢會傳回適合該報表的節點集。 但是,節點本身不需要保存所有必需的資訊,這也可以從父節點和/或子節點派生。 例如,用於User Report的查詢根據節點類型選擇節點(在本例中為rep:user
)。 但是,此報告中的大多數列不會直接從這些節點獲取其資料,而是從子節點profile
獲取資料。
query會傳回要顯示為報表列的資料結果集。 在將結果集中的每一行(伺服器端)轉移到客戶機以在報告中顯示之前,在幾個階段中進行處理。
這允許:
從基礎結果集中提取和導出值。
例如,它可讓您計算兩個屬性值之間的差異,將兩個屬性值當成單一值處理。
解析提取的值;這可以通過多種方式實現。
例如,路徑可以映射到標題(如相應jcr:title屬性中更人性化的內容)。
在不同點套用濾鏡。
視需要建立複合值。
例如,由顯示給使用者的文字、用於排序的值和用於(在用戶端)建立連結的額外URL組成。
下列工作流程代表處理佇列:
其中包括詳細步驟和元素:
使用值擷取器將初始查詢(reportbase)傳回的結果轉換為基本結果集。
根據列類型自動選擇值提取器。 它們用於從基礎JCR查詢中讀取值並從中建立結果集;之後,可以進一步處理。 例如,對於diff
類型,值提取器讀取兩個屬性,計算隨後添加到結果集中的單個值。 無法配置值提取器。
對於包含原始資料的初始結果集,應用初始過濾(raw階段)。
值為預先處理;定義為apply階段。
篩選 (指派給預 ** 處理階段)會對預處理值執行。
值已解析;根據定義的解析器。
篩選 (指派給解析 ** 階段)會對解析值執行。
資料是分組和聚合。
陣列資料可轉換為(以字串為基礎的)清單來解決。
這是一個隱含步驟,可將多值結果轉換為可顯示的清單;根據多值JCR屬性的儲存格值需要(未匯總)此值。
值再次預先處理;定義為afterApply階段。
資料會排序。
處理的資料被傳輸到客戶端。
在reportbase
元件上定義返回基本資料結果集的初始查詢。
處理佇列的其他元素是在columnbase
元件上定義。
建立和設定報表時需要下列項目:
reportbase
元件columnbase
元件預設報告元件保存在/libs/cq/reporting/components
下。
不過,強烈建議您不要更新這些節點,而要在/apps/cq/reporting/components
下建立自己的元件節點,或者如果更合適,請在/apps/<yourProject>/reports/components
下建立元件節點。
其中(例如):
N:apps
N:cq [nt:folder]
N:reporting|reports [sling:Folder]
N:components [sling:Folder]
在此下,您為報表建立根,在此下,報表基礎元件和列基礎元件:
N:apps
N:cq [nt:folder]
N:reporting|reports [sling:Folder]
N:components [sling:Folder]
N:<reportname> [sling:Folder]
N:<reportname> [cq:Component] // report base component
N:<columnname> [cq:Component] // column base component
報表頁面必須使用/libs/cq/reporting/components/reportpage
的sling:resourceType
。
自訂的頁面元件不應是必要的(在大多數情況下)。
每個報表類型都需要衍生自/libs/cq/reporting/components/reportbase
的容器元件。
此元件可做為整個報表的容器,並提供下列資訊:
N:<reportname> [cq:Component]
P:sling:resourceSuperType = "cq/reporting/components/reportbase"
N:charting
N:dialog [cq:Dialog]
N:queryBuilder
N:queryBuilder
N:propertyConstraints
[
N:<name> // array of nodes (name irrelevant), each with the following properties:
P:name
P:value
]
P:nodeTypes [String|String[]]
P:mandatoryProperties [String|String[]
]
propertyConstraints
可用於將結果集限制為具有特定值的特定屬性的節點。 如果指定了多個約束,則節點必須滿足所有約束(AND操作)。
例如:
N:propertyConstraints
[
N:0
P:sling:resourceType
P:foundation/components/textimage
N:1
P:jcr:modifiedBy
P:admin
]
將返回上次由admin
用戶修改的所有textimage
元件。
nodeTypes
用於將結果集限制為指定的節點類型。 可以指定多個節點類型。
mandatoryProperties
可用於將結果集限制為具有指定屬性all的節點。 屬性的值未被考慮在內。
所有項目皆為選用項目,並可視需要加以組合,但您必須至少定義其中一項。
N:charting
N:settings
N:active [cq:WidgetCollection]
[
N:<name> // array of nodes, each with the following property
P:id // must match the id of a child node of definitions
]
N:definitions [cq:WidgetCollection]
[
N:<name> // array of nodes, each with the following properties
P:id
P:type
// additional, chart type specific configurations
]
settings
保存活動圖表的定義。
active
由於可以定義多個設定,因此您可以使用它來定義哪些設定目前有效。 這些節點由一組節點定義(這些節點沒有強制命名約定,但標準報告通常使用0
、1
。 x
),每個都具有以下屬性:
id
活動圖表的識別。 這必須符合其中一個圖表definitions
的ID。
definitions
定義報表可能可用的圖表類型。 要使用的definitions
將由active
設定指定。
定義是使用節點陣列指定的(通常名稱為0
、1
。 x
),每個屬性具有下列屬性:
id
圖表標識。
type
可用的圖表類型。 從中選擇:
pie
圓形圖。僅從目前資料產生。
lineseries
系列線(代表實際快照的連接點)。僅從歷史資料產生。
其他屬性可用,視圖表類型而定:
對於圖表類型pie
:
maxRadius
( Double/Long
)
圓形圖允許的最大半徑;因此圖表允許的最大大小(無圖例)。 如果已定義fixedRadius
,則忽略。
minRadius
( Double/Long
)
圓形圖允許的最小半徑。 如果已定義fixedRadius
,則忽略。
fixedRadius
( Double/Long
)定義圓形圖的固定半徑。
對於圖表類型lineseries
:
totals
( Boolean
)
如果應該顯示顯示顯示Total的附加行,則為true。
預設: false
series
( Long
)
要顯示的行/系列數。
預設值:9
(這也是允許的最大值)
hoverLimit
( Long
)
聚合快照的最大數量(每行水準線上顯示的點,代表不同值),即當用戶將滑鼠移過圖表圖例中的不同值或相應標籤時,將顯示彈出窗口。
預設值:35
(亦即,如果超過35個不同值適用於目前圖表設定,則不會顯示任何彈出式視窗)。
另外有10個快顯視窗的限制,可以並行顯示(當將滑鼠移至圖例文字上時,可顯示多個快顯視窗)。
每個報表都可以有一個設定對話方塊,讓使用者可指定報表的各種參數。 當報表頁面開啟時,此對話方塊可透過編輯按鈕存取。
此對話方塊是標準的CQ dialog,可依此設定(如需詳細資訊,請參閱CQ.Dialog)。
範例對話方塊的外觀如下:
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:cq="https://www.day.com/jcr/cq/1.0" xmlns:jcr="https://www.jcp.org/jcr/1.0"
jcr:primaryType="cq:Dialog"
height="{Long}424">
<items jcr:primaryType="cq:WidgetCollection">
<props jcr:primaryType="cq:Panel">
<items jcr:primaryType="cq:WidgetCollection">
<title
jcr:primaryType="cq:Widget"
path="/libs/cq/reporting/components/commons/title.infinity.json?lang=zh-Hant"
xtype="cqinclude"/>
<description
jcr:primaryType="cq:Widget"
path="/libs/cq/reporting/components/commons/description.infinity.json?lang=zh-Hant"
xtype="cqinclude"/>
<rootPath
jcr:primaryType="cq:Widget"
fieldLabel="Root path"
name="./report/rootPath"
rootPath=""
rootTitle="Repository root"
xtype="pathfield"/>
<processing
jcr:primaryType="cq:Widget"
path="/libs/cq/reporting/components/commons/processing.infinity.json?lang=zh-Hant"
xtype="cqinclude"/>
<scheduling
jcr:primaryType="cq:Widget"
path="/libs/cq/reporting/components/commons/scheduling.infinity.json?lang=zh-Hant"
xtype="cqinclude"/>
</items>
</props>
</items>
</jcr:root>
提供了一些預配置的元件;這些參數可在對話方塊中參考,使用xtype
屬性,其值為cqinclude
:
title
/libs/cq/reporting/components/commons/title
文字欄位以定義報表標題。
description
/libs/cq/reporting/components/commons/description
文字區域,以定義報表說明。
processing
/libs/cq/reporting/components/commons/processing
報表處理模式的選擇器(手動/自動載入資料)。
scheduling
/libs/cq/reporting/components/commons/scheduling
用於調度歷史圖表快照的選擇器。
必須使用.infinity.json
字尾來包含參照的元件(請參閱上例)。
此外,還可為報表定義根路徑:
rootPath
這會將報告限制為儲存庫的某個部分(樹或子樹),建議使用該部分進行效能優化。 根路徑由每個報告頁面的report
節點的rootPath
屬性指定(在建立頁面時從模板中獲取)。
它可由:
每個列類型都需要從/libs/cq/reporting/components/columnbase
派生的元件。
列元件定義以下組合:
definitions
子節點)。cq:editConfig
的適當實例。 定義所需的事件和操作。N:<columnname> [cq:Component]
P:componentGroup
P:jcr:title
P:sling:resourceSuperType = "cq/reporting/components/columnbase"
N:cq:editConfig [cq:EditConfig] // <a href="#events-and-actions">Events and Actions</a>
N:defaults // <a href="#column-default-values">Column Default Values</a>
N:definitions
N:queryBuilder // <a href="#column-specific-query">Column Specific Query</a>
P:property [String|String[]] // Column Specific Query
P:subPath // Column Specific Query
P:secondaryProperty [String|String[]] // Column Specific Query
P:secondarySubPath // Column Specific Query
N:data
P:clientFilter [String] // <a href="#client-filter">Client Filter</a>
P:resolver // <a href="#resolvers-and-preprocessing">Resolvers and Preprocessing</a>
N:resolverConfig // Resolvers and Preprocessing
N:preprocessing // Resolvers and Preprocessing
P:type // <a href="#column-specific-definitions">Column Specific Definitions</a>
P:groupable [Boolean] // Column Specific Definitions
N:filters [cq:WidgetCollection] // Column Specific Definitions
N:aggregates [cq:WidgetCollection] // Column Specific Definitions
另請參閱定義新報表。
這定義了用於單個列的特定資料提取(從報告資料結果集)。
N:definitions
N:queryBuilder
P:property [String|String[]]
P:subPath
P:secondaryProperty [String|String[]]
P:secondarySubPath
property
定義用於計算實際單元格值的屬性。
如果屬性定義為String[],則會掃描(依序)多個屬性以尋找實際值。
例如,在下列情況下:
property = [ "jcr:lastModified", "jcr:created" ]
相應的值提取器(此處控制)將:
subPath
如果結果不位於查詢返回的節點上, subPath
將定義屬性的實際位置。
secondaryProperty
定義另一個屬性,該屬性也必須用於計算實際儲存格值;這將僅用於某些列類型(diff和sortable)。
例如,在「工作流程例項報表」中,指定的屬性可用來儲存開始和結束時間之間時間差異的實際值(以毫秒為單位)。
secondarySubPath
與subPath類似,使用secondaryProperty
時。
在大多數情況下,僅使用property
。
客戶端過濾器從伺服器返回的資料中提取要顯示的資訊。
在套用整個伺服器端處理後,此篩選器會在clientside執行。
N:definitions
N:data
P:clientFilter [String]
clientFilter
定義為JavaScript函式,可:
下列範例會從元件路徑擷取對應的頁面路徑:
function(v) {
var sepPos = v.lastIndexOf('/jcr:content');
if (sepPos < 0) {
return v;
}
return v.substring(sepPos + '/jcr:content'.length, v.length);
}
處理隊列定義各種解析器並配置預處理:
N:definitions
N:data
P:resolver
N:resolverConfig
N:preprocessing
N:apply
N:applyAfter
resolver
定義要使用的解析器。 可使用下列解析器:
const
將值映射至其他值;例如,此函式用於將常數(如en
)解析為其等效值English
。
default
預設解析器。 這是一個虛擬解析器,它實際上無法解決任何問題。
page
解析路徑值至適當頁面的路徑;更精確地,指向對應的jcr:content
節點。 例如,/content/.../page/jcr:content/par/xyz
已解析為/content/.../page/jcr:content
。
path
解析路徑值,方法是選擇性地附加子路徑,並從解析路徑上節點的屬性(由resolverConfig
定義)取得實際值。 例如,/content/.../page/jcr:content
的path
可解析為jcr:title
屬性的內容,這表示頁面路徑已解析為頁面標題。
pathextension
通過預先定義路徑並從已解析路徑上的節點屬性中獲取實際值來解析值。 例如,值de
可能由/libs/wcm/core/resources/languages
等路徑加上,使用屬性language
中的值,將國家代碼de
解析為語言說明German
。
resolverConfig
提供解析程式的定義;可用的選項取決於所選的resolver
:
const
使用屬性指定要解析的常數。 屬性的名稱定義要解析的常數;屬性的值定義已解析的值。
例如,Name= 1
和Value =One
的屬性將解析為1:1。
default
沒有可用的配置。
page
propertyName
(可選)
定義應用於解析值的屬性名稱。 如果未指定,則使用預設值jcr:title(頁面標題);對於page
解析器,這表示首先將路徑解析為頁面路徑,然後進一步解析為頁面標題。
path
propertyName
(可選)
指定應用於解析值的屬性的名稱。 如果未指定,則使用預設值jcr:title
。
subPath
(可選)
此屬性可用於指定在值解析之前附加到路徑的尾碼。
pathextension
path
(強制)
定義要優先的路徑。
propertyName
(強制)
定義實際值所在的已解析路徑上的屬性。
i18n
(可選)類型布爾值)
確定解析值是否應為國際化(即使用CQ5的國際化服務)。
preprocessing
預處理是可選的,可以(單獨)綁定到處理階段apply或applyAfter:
解析器用於提取所需資訊。 各種解析器的範例包括:
康斯特
以下將解析字串New version created
中VersionCreated
的content值。
請參閱/libs/cq/reporting/components/auditreport/typecol/definitions/data
。
N:data
P:resolver=const
N:resolverConfig
P:VersionCreated="New version created"
頁面
解析對應頁面jcr:content(child)節點上jcr:description屬性的路徑值。
請參閱/libs/cq/reporting/components/compreport/pagecol/definitions/data
。
N:data
P:resolver=page
N:resolverConfig
P:propertyName="jcr:description"
路徑
以下將解析/content/.../page
至jcr:title
屬性內容的路徑,這表示頁面路徑已解析為頁面標題。
請參閱/libs/cq/reporting/components/auditreport/pagecol/definitions/data
。
N:data
P:resolver=path
N:resolverConfig
P:propertyName="jcr:title"
P:subPath="/jcr:content?lang=zh-Hant"
路徑延伸功能
以下命令以路徑副檔名/libs/wcm/core/resources/languages
為前置值de
,然後從屬性language
取值,將國家代碼de
解析為語言說明German
。
請參閱/libs/cq/reporting/components/userreport/languagecol/definitions/data
。
N:data
P:resolver=pathextension
N:resolverConfig
P:path="/libs/wcm/core/resources/languages?lang=zh-Hant"
P:propertyName="language"
preprocessing
定義可套用至:
原始值:
原始值的預處理定義直接在apply
和/或applyAfter
上指定。
值:
如有必要,可為每個聚合提供單獨的定義。
為了指定聚合值的明確預處理,預處理定義必須駐留在相應的aggregated
子節點(apply/aggregated
, applyAfter/aggregated
)上。 如果需要明確的不同聚合的預處理,則預處理定義位於具有相應聚合名稱的子節點上(例如apply/aggregated/min/max
或其他聚合)。
您可以指定下列任一項,以在預處理期間使用:
查找和替
換模式找到時,指定的模式(定義為規則運算式)被另一個模式替換;例如,這可用來擷取原稿的子字串。
將數值轉換為相對字串;例如,表示1小時時差的值''將解析為字串,例如1:24PM (1 hour ago)
。
例如:
N:definitions
N:data
N:preprocessing
N:apply|applyAfter
P:pattern // regex
P:replace // replacement for regex
// and/or
P:format // data type formatter
對於預處理,您可以指定pattern
(定義為規則運算式或regex),然後以replace
模式取代:
pattern
用於定位子字串的規則運算式。
replace
字串或字串的表示法,將用作原始字串的替換。 這通常表示規則運算式pattern
所定位之字串的子字串。
範例取代可劃分為:
對於具有以下兩個屬性的節點definitions/data/preprocessing/apply
:
pattern
: (.*)(/jcr:content?lang=zh-Hant)(/|$?lang=zh-Hant)(.*)
replace
: $1
字串的形式為:
/content/geometrixx/en/services/jcr:content/par/text
將分為四個部分:
$1
- (.*)
- /content/geometrixx/en/services
$2
- (/jcr:content?lang=zh-Hant)
- /jcr:content
$3
- (/|$?lang=zh-Hant)
- /
$4
- (.*)
- par/text
並以$1
表示的字串取代:
/content/geometrixx/en/services
這些格式化程式會將數值轉換為相對字串。
例如,這可用於允許min
、avg
和max
聚合的時間列。 當min
/ avg
/ max
集合顯示為時間差(例如,10 days ago
),則需要資料格式化程式。 為此,datedelta
格式化器被應用到min
/ avg
/ max
聚合值。 如果count
集合也可用,則不需要格式化程式,原始值也不需要。
目前可用的資料類型格式化程式包括:
format
資料類型格式化程式:
duration
持續時間是兩個定義日期之間的時間範圍。 例如,工作流程動作的開始和結束需要1小時,從2/13/11 11:23開始,一小時後於2/13/11 12:23結束。
它將數值(解譯為毫秒)轉換為持續時間字串;例如,30000
的格式為* 30s
。*
datedelta
Datadelta是過去某個日期到「現在」的時間跨度(因此,如果稍後在某個時間點檢視報表,則會產生不同的結果)。
它會將數值(解譯為以天為單位的時差)轉換為相對日期字串。 例如,1的格式為1天前。
以下示例定義min
和max
集合的datedelta
格式:
N:definitions
N:data
N:preprocessing
N:apply
N:aggregated
N:min
P:format = "datedelta"
N:max
P:format = "datedelta"
欄的特定定義定義了該欄的可用篩選器和匯總。
N:definitions
P:type
P:groupable [Boolean]
N:filters [cq:WidgetCollection]
[
N:<name> // array of nodes (names irrelevant) with the following properties:
P:filterType
P:id
P:phase
]
N:aggregates [cq:WidgetCollection]
[
N:<name> // array of nodes (names irrelevant) with the following properties:
P:text
P:type
]
type
以下是標準選項:
string
number
int
date
diff
timeslot
用於提取匯總所需日期的部分(例如,按年分組以獲取每年匯總的資料)。
sortable
用於使用不同值(取自不同屬性)的值進行排序和顯示。
此外, 以上任一項皆可定義為多值;例如,string[]
定義字串陣列。
值提取器由列類型選擇。 如果某個值提取器可用於列類型,則使用此提取器。 否則,將使用預設值提取器。
類型可以(可選)採用參數。 例如,timeslot:year
會從日期欄位擷取年份。 類型及其參數:
timeslot
-這些值與的相應常數比較 java.utils.Calendar
。
timeslot:year
- Calendar.YEAR
timeslot:month-of-year
- Calendar.MONTH
timeslot:week-of-year
- Calendar.WEEK_OF_YEAR
timeslot:day-of-month
- Calendar.DAY_OF_MONTH
timeslot:day-of-week
- Calendar.DAY_OF_WEEK
timeslot:day-of-year
- Calendar.DAY_OF_YEAR
timeslot:hour-of-day
- Calendar.HOUR_OF_DAY
timeslot:minute-of-hour
- Calendar.MINUTE
groupable
定義報表是否可依此欄分組。
filters
篩選定義。
filterType
可用的篩選條件包括:
string
字串型篩選。
id
篩選識別碼。
phase
可用階段:
raw
篩選器會套用至原始資料。
preprocessed
篩選器會套用至預先處理的資料。
resolved
篩選會套用至已解析的資料。
aggregates
匯整定義。
text
集合的文本名稱。 如果未指定text
,則會使用集合的預設描述;例如,minimum
將用於min
集合。
type
匯整類型。 可用的聚合包括:
count
計算行數。
count-nonempty
計算非空行數。
min
提供最小值。
max
提供最大值。
average
提供平均值。
sum
提供所有值的總和。
median
提供中值。
percentile95
取所有值的第95個百分位數。
這用於定義列的預設值:
N:defaults
P:aggregate
aggregate
有效的aggregate
值與aggregates
下type
的值相同(請參閱欄特定定義(定義——篩選器/集合))。
「編輯配置」定義監聽程式所要檢測的必要事件以及這些事件發生後要應用的操作。 如需背景資訊,請參閱元件開發簡介。
必須定義下列值,以確保滿足所有必要操作:
N:cq:editConfig [cq:EditConfig]
P:cq:actions [String[]] = "insert", "delete"
P:cq:dialogMode = "floating"
P:cq:layout = "auto"
N:cq:listeners [cq:EditListenersConfig]
P:aftercreate = "REFRESH_INSERTED"
P:afterdelete = "REFRESH_SELF"
P:afteredit = "REFRESH_SELF"
P:afterinsert = "REFRESH_INSERTED"
P:aftermove = "REFRESH_SELF"
P:afterremove = "REFRESH_SELF"
通用列是副檔名,其中(大部分)列定義儲存在列節點的實例(而不是元件節點)上。
它們使用(標準)對話框,供您定制,用於單個通用元件。 此對話框允許報告用戶定義報告頁上一般列的列屬性(使用菜單選項列屬性……)。
例如,使用者報告的Generic欄;請參閱/libs/cq/reporting/components/userreport/genericcol
。
要使列為通用列,請執行以下操作:
將列definition
節點的type
屬性設定為generic
。
請參閱/libs/cq/reporting/components/userreport/genericcol/definitions
在列的definition
節點下指定(標準)對話框定義。
請參閱/libs/cq/reporting/components/userreport/genericcol/definitions/dialog
對話框的欄位必須引用與相應元件屬性(包括其路徑)相同的名稱。
例如,如果要使通用列的類型通過對話框進行配置,請使用名稱為./definitions/type
的欄位。
使用UI/對話框定義的屬性優先於在columnbase
元件上定義的屬性。
定義編輯配置。
請參閱/libs/cq/reporting/components/userreport/genericcol/cq:editConfig
使用標準AEM方法來定義(其他)欄屬性。
請注意,對於在元件實例和列實例上定義的屬性,列實例上的值優先。
通用列的可用屬性包括:
jcr:title
-列名definitions/aggregates
- aggregatesdefinitions/filters
-篩選器definitions/type
-列的類型(必須在對話框中定義,使用選擇器/組合框或隱藏欄位)definitions/data/resolver
和 definitions/data/resolverConfig
(但不 definitions/data/preprocessing
是 .../clientFilter
)-解析程式和配置definitions/queryBuilder
-查詢產生器設定defaults/aggregate
-預設聚合對於User Report上的通用列的新實例,使用對話框定義的屬性將保存在以下位置:
/etc/reports/userreport/jcr:content/report/columns/genericcol/settings/generic
設計定義了哪些列類型可用於建立報告。 它還定義了添加列的段落系統。
強烈建議您為每個報表建立個別設計。 如此可確保完全的彈性。 另請參閱定義新報表。
預設報告元件保存在/etc/designs/reports
下。
報表的位置可視您的元件所在位置而定:
/etc/designs/reports/<yourReport>
如果報表位於 /apps/cq/reporting
/etc/designs/<yourProject>/reports/<*yourReport*>
用於使用模式的報 /apps/<yourProject>/reports
表
必要的設計屬性在jcr:content/reportpage/report/columns
上註冊(例如/etc/designs/reports/<reportName>/jcr:content/reportpage/report/columns
):
components
報表上允許的任何元件和/或元件群組。
sling:resourceType
值cq/reporting/components/repparsys
的屬性。
範例設計程式碼片段(取自元件報表的設計)為:
<!-- ... -->
<jcr:content
jcr:primaryType="nt:unstructured"
jcr:title="Component Report"
sling:resourceType="wcm/core/components/designer">
<reportpage jcr:primaryType="nt:unstructured">
<report jcr:primaryType="nt:unstructured">
<columns
jcr:primaryType="nt:unstructured"
sling:resourceType="cq/reporting/components/repparsys"
components="group:Component Report"/>
</report>
</reportpage>
</jcr:content>
<!-- ... -->
不需要指定個別欄的設計。 可在設計模式中定義可用的欄。
建議您不要對標準報表設計進行任何變更。 這是為了確保您不會在升級或安裝修補程式時遺失任何變更。
如果您要自訂標準報表,請複製報表及其設計。
建立報表時,可自動建立預設欄。 這些在範本中指定。
每個報表類型都必須提供範本。 這些是標準CQ模板,可以這樣配置。
範本必須:
將sling:resourceType
設為cq/reporting/components/reportpage
指出要使用的設計
通過sling:resourceType
屬性建立引用容器(reportbase
)元件的report
子節點
範例範本程式碼片段(取自元件報表範本)為:
<!-- ... -->
<jcr:content
cq:designPath="/etc/designs/reports/compreport?lang=zh-Hant"
jcr:primaryType="cq:PageContent"
sling:resourceType="cq/reporting/components/reportpage">
<report
jcr:primaryType="nt:unstructured"
sling:resourceType="cq/reporting/components/compreport/compreport"/>
</jcr:content>
<!-- .. -->
範例範本程式碼片段(顯示根路徑的定義(取自使用者報表範本))為:
<!-- ... -->
<jcr:content
cq:designPath="/etc/designs/reports/userreport?lang=zh-Hant"
jcr:primaryType="cq:PageContent"
sling:resourceType="cq/reporting/components/reportpage">
<report
jcr:primaryType="nt:unstructured"
rootPath="/home/users?lang=zh-Hant"
sling:resourceType="cq/reporting/components/compreport/compreport"/>
</jcr:content>
<!-- .. -->
預設報表範本位於/libs/cq/reporting/templates
下。
不過,強烈建議您不要更新這些節點,而要在/apps/cq/reporting/templates
下建立自己的元件節點,或者如果更合適,請在/apps/<yourProject>/reports/templates
下建立元件節點。
其中,例如(另請參閱報表元件位置):
N:apps
N:cq [nt:folder]
N:reporting|reports [sling:Folder]
N:templates [sling:Folder]
在此下,您為模板建立根:
N:apps
N:cq [nt:folder]
N:reporting|reports [sling:Folder]
N:templates [sling:Folder]
N:<reportname> [sling:Folder]
若要定義新報表,您必須建立並設定:
為了說明這些步驟,以下示例定義了一個報告,其中列出了儲存庫中的所有OSGi配置;例如,sling:OsgiConfig
節點的所有實例。
複製現有報表,然後自訂新版本是另一種方法。
為新報表建立根節點。
例如,在/apps/cq/reporting/components/osgireport
下。
N:cq [nt:folder]
N:reporting [sling:Folder]
N:components [sling:Folder]
N:osgireport [sling:Folder]
定義您的報表庫。 例如,/apps/cq/reporting/components/osgireport
下的osgireport[cq:Component]
。
N:osgireport [sling:Folder]
N:osgireport [cq:Component]
P:sling:resourceSuperType [String] = "cq/reporting/components/reportbase"
N:charting [nt:unstructured]
N:settings [nt:unstructured]
N:active [cq:WidgetCollection]
N:0 [nt:unstructured]
P:id [String] = "pie"
N:1 [nt:unstructured]
P:id [String] = "lineseries"
N:definitions [cq:WidgetCollections]
N:0 [nt:unstructured]
P:id [String] = "pie"
P:maxRadius [Long] = 180
P:type [String] = "pie"
N:1 [nt:unstructured]
P:id [String] = "lineseries"
P:type [String] = "lineseries"
N:dialog [cq:Dialog]
P:height [Long] = 424
N:items [cq:WidgetCollection]
N:props [cq:Panel]
N:items [cq:WidgetCollection]
N:title [cq:Widget]
P:path [String] = "/libs/cq/reporting/components/commons/title.infinity.json"
P:xtype [String] = "cqinclude"
N:description [cq:Widget]
P:path [String] = "/libs/cq/reporting/components/commons/description.infinity.json"
P:xtype [String] = "cqinclude"
N:rootPath [cq:Widget]
P:fieldLabel [String] = "Root path"
P:name [String] = "./report/rootPath"
P:xtype [String] = "pathfield"
N:processing [cq:Widget]
P:path [String] = "/libs/cq/reporting/components/commons/processing.infinity.json"
P:xtype [String] = "cqinclude"
N:scheduling [cq:Widget]
P:path [String] = "/libs/cq/reporting/components/commons/scheduling.infinity.json"
P:xtype [String] = "cqinclude"
N:queryBuilder [nt:unstructured]
P:nodeTypes [String[]] = "sling:OsgiConfig"
這定義了報告基本元件,它:
sling:OsgiConfig
的所有節點pie
和lineseries
圖表定義第一列(columnbase)元件。 例如,/apps/cq/reporting/components/osgireport
下的bundlecol[cq:Component]
。
N:osgireport [sling:Folder]
N:bundlecol [cq:Component]
P:componentGroup [String] = "OSGi Report"
P:jcr:title = "Bundle"
P:sling:resourceSuperType [String] = "cq/reporting/components/columnbase"
N:cq:editConfig [cq:EditConfig]
P:cq:actions [String[]] = "insert", "delete"
P:cq:dialogMode [String] = "floating"
P:cq:layout [String] = "auto"
N:cq:listeners [cq:EditListenersConfig]
P:aftercreate [String] "REFRESH_INSERTED"
P:afterdelete [String] "REFRESH_SELF"
P:afteredit [String] "REFRESH_SELF"
P:afterinsert [String] "REFRESH_INSERTED"
P:aftermove [String] "REFRESH_SELF"
P:afterremove [String] "REFRESH_SELF"
N:defaults [nt:unstructured]
P:aggregate [String] = "count"
N:definitions [nt:unstructured]
P:groupable [Boolean] = false
P:type [String] = "string"
N:queryBuilder [nt:unstructured]
P:property [String] = "jcr:path"
這定義了列基元件:
sling:OsgiConfig
節點的屬性jcr:path
count
聚合Bundle
(表中的列標題)OSGi Report
在此範例中,沒有N:data
和P:clientFilter
的定義。 這是因為從伺服器收到的值會以1:1為基礎傳回——這是預設行為。
這與定義相同:
N:data [nt:unstructured]
P:clientFilter [String] = "function(v) { return v; }"
其中,函式只會傳回它所接收的值。
定義您的報表設計。 例如,/etc/designs/reports
下的osgireport[cq:Page]
。
N:osgireport [cq:Page]
N:jcr:content [nt:unstructured]
P:jcr:title [String] = "OSGi report"
P:sling:resourceType [String] = "wcm/core/components/designer"
N:reportpage [nt:unstructured]
N:report [nt:unstructured]
N:columns [nt:unstructured]
P:components [String] = "group:OSGi Report"
P:sling:resourceType [String] = "cq/reporting/components/repparsys"
為新報表範本建立根節點。
例如,在/apps/cq/reporting/templates/osgireport
下。
N:cq [nt:folder]
N:reporting [sling:Folder]
N:templates [sling:Folder]
N:osgireport [cq:Template]
定義您的報表範本。 例如,/apps/cq/reporting/templates
下的osgireport[cq:Template]
。
N:osgireport [cq:Template]
P:allowedPaths [String[]] = "/etc/reports(/.*?lang=zh-Hant)?"
P:jcr:description [String] = "Use this report generator to create a new OSGi report."
P:jcr:title [String] = "OSGi Report Template"
P:ranking [Long] = 100
P:shortTitle [String] = "OSGi Report"
N:jcr:content [cq:PageContent]
P:cq:designPath [String] = "/etc/designs/reports/osgireport"
P:sling:resourceType [String] = "cq/reporting/components/reportpage"
N:report [nt:unstructured]
P:rootPath [String] = "/"
P:sling:resourceType [String] = "cq/reporting/components/osgireport/osgireport"
N:thumbnail.png [nt:file]
這定義了一個模板:
allowedPaths
—— 在上述情況中,位於/etc/reports
下方的任一處現在可以建立新報表的例項:
開啟工具控制台。
在左窗格中選擇報表。
然後,新……。 定義Title和Name,從範本清單中選擇新的報表類型(OSGi報表範本),然後按一下Create。
您的新報表例項會出現在清單中。 按兩下此按鈕以開啟。
從側鍵拖曳元件(例如OSGi Report群組中的Bundle)以建立第一欄,並啟動報表定義。
由於此示例沒有任何可組列,因此圖表將不可用。 要查看圖表,請將groupable
設定為true
:
N:osgireport [sling:Folder]
N:bundlecol [cq:Component]
N:definitions [nt:unstructured]
P:groupable [Boolean] = true
本節說明實作報告架構之OSGi服務的進階設定選項。
您可使用Web控制台的「設定」功能表來檢視這些項目(例如http://localhost:4502/system/console/configMgr
)。 使用AEM時,有幾種方法可管理此類服務的組態設定;如需詳細資訊和建議的實務,請參閱設定OSGi。
時 間區定義為建立時區歷史資料。這是為了確保歷史圖表顯示全球每位使用者的相同資料。
Locale 定義要與時間區一起用於歷 史資料的地區。地區設定可用來判斷某些地區特定的日曆設定(例如,一週的第一天是星期日還是星期一)。
快照 路徑定義儲存歷史圖表快照的根路徑。
報表的 路徑定義報表所在的路徑。快照服務使用此功能來確定要實際為其拍攝快照的報告。
Daily snapshots定義了每天拍攝每日快照的小時數。指定的小時位於伺服器的本地時區。
每小 時快照定義了每小時拍攝快照時的分鐘數。
行(最大)定 義每個快照所儲存的最大行數。應合理選擇此值;如果過高,則會影響儲存庫的大小(如果過低),因為處理歷史資料的方式可能不準確。
假資料,如果啟用,則可以通過選擇器建立假歷史 fakedata
資料;如果禁用,則使用選 fakedata
擇器將拋出異常。
由於資料是假的,因此必須僅**用於測試和除錯。
使用fakedata
選擇器會隱式完成報表,因此所有現有資料都會遺失;資料可以手動還原,但是這個程式很耗時。
快照 用戶定義了可用於拍攝快照的可選用戶。
基本上,快照是為完成報告的用戶拍攝的。 您可能會在需要指定備用使用者的情況下(例如,在發佈系統上,此使用者不存在,因為其帳戶尚未複製)。
此外,指定使用者可能會帶來安全風險。
強制快照用戶,如果啟用,則所有快照都將與在「快照用戶」下指定的用戶 一起建立。如果處理不正確,可能會對安全性造成嚴重影響。
每個使用者和語言的報表資料可能不同。 因此,報表資料會依報表、使用者和語言快取。 這表示2
的最大條目數值實際上會快取以下任一資料: