Changes between Version 1 and Version 2 of TracReports
- Timestamp:
- Aug 13, 2014, 12:08:17 AM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
TracReports
v1 v2 1 ** Note: このページは、Tracのバージョン1.0を文書化しています、旧バージョンが必要であれば、[[0.12/TracReports]]を参照してください ** 1 2 = レポート = #TracReports 2 3 [[TracGuideToc]] … … 5 6 この機能によって、 Trac データベースのチケット情報を取得することができます。 6 7 7 TracReports ではレポートの形式を定義するための方法として、独自フォーマットではなく、 8 TracReports ではレポートの形式を定義するための方法として、独自フォーマットではなく、 8 9 SQL の `SELECT` 文を使用することにしました。 9 10 … … 17 18 ''これによって、ナビゲーションバーの "チケットを見る" (英語版では "View Tickets") でのデフォルトのハンドラがクエリモジュールになります。もし可能ならば、この設定を有効にして、レポート機能がなくなることによって生じる不都合を報告してください。'' 18 19 19 20 20 レポートは以下の基本的なパーツから構成されます: 21 * '''ID''' --ユニークな (連番の) 識別子22 * '''レポート名 (Title)''' --レポートのタイトル23 * '''説明 (Description)''' -- WikiFormatting で記述された、レポートの説明。24 * '''レポート本体 (Report Body)''' -- 後に述べるフォーマットで規定された、レポートクエリの結果。25 * '''フッタ (Footer)''' -- レポート本体を異なる形式でダウンロードするためのリンク。21 * '''ID''' — ユニークな (連番の) 識別子 22 * '''レポート名 (Title)''' — レポートのタイトル 23 * '''説明 (Description)''' — WikiFormatting で記述された、レポートの説明 24 * '''レポート本体 (Report Body)''' — 後に述べるフォーマットで規定された、レポートクエリの結果 25 * '''フッタ (Footer)''' — レポート本体を異なる形式でダウンロードするためのリンク 26 26 27 27 == ソートの並び順変更 == #ChangingSortOrder … … 31 31 32 32 == レポートの番号を変更する == #ChangingReportNumbering 33 レポートの ID を変更する必要がある場合があるかもしれませんが、おそらくレポート自体を編集する方がベターです。というのも Trac のデータベースを変更する必要があるからです。 ''report'' 表は以下のようなスキーマとなっています (0.10 相当):33 レポートの ID を変更する必要がある場合があるかもしれませんが、おそらくレポート自体を編集する方がベターです。というのも Trac のデータベースを変更する必要があるからです。 ''report'' 表は以下のようなスキーマとなっています ''(0.10 以降)'': 34 34 * id integer PRIMARY KEY 35 35 * author text … … 48 48 レポートクエリ結果の 1 チケットをクリックするとそのチケットが表示されるでしょう。表示されたチケットのメインメニューバーのすぐ下にある ''次のチケット'' (英語版では ''Next Ticket'') または ''前のチケット'' (英語版では ''Previous Ticket'') リンクをクリックすることによって他のチケットに移動するか、''レポートに戻る'' (英語版では ''Back to Report'') リンクをクリックしてレポートページに戻ることができます。 49 49 50 あなたは安全にチケットを編集することができます。またチケットの編集結果を保存した後で、 次のチケット/前のチケット/レポートに戻る (英語版では Next/Previous/Back to Report) のリンクを使用して結果を行き来することが可能です。しかし、あなたがチケットへの操作を終えてレポートに戻るときに、どのチケットが変更されたかのヒントは表示されません。この動作はカスタムクエリの動作とは異なります。 (カスタムクエリについては TracQuery#NavigatingTickets を参照して下さい) 。 ''(0.11 以降 )''50 あなたは安全にチケットを編集することができます。またチケットの編集結果を保存した後で、 ''次のチケット/前のチケット/レポートに戻る'' (英語版では ''!Next/Previous/Back to Report'') のリンクを使用して結果を行き来することが可能です。しかし、あなたがチケットへの操作を終えてレポートに戻るときに、どのチケットが変更されたかのヒントは表示されません。この動作はカスタムクエリの動作とは異なります。 (カスタムクエリについては TracQuery#NavigatingTickets を参照して下さい) 。 ''(0.11 以降 )'' 51 51 52 52 == ダウンロードできるフォーマット == #AlternativeDownloadFormats … … 57 57 === カンマ区切りテキスト - CSV (Comma Separated Values) === #Comma-delimited-CSVCommaSeparatedValues 58 58 1 レコードを 1 行として、各カラムをカンマ (',') で区切ったプレーンテキストとしてダウンロードできます。 59 '''Note:''' CSV 形式を保つため、各カラムのデータに改行文字やカンマがある場合、その位置で切り取られます。59 '''Note:''' 各カラムのデータに改行文字やカンマがある場合、エスケープされて出力されます。 60 60 61 61 === タブ区切り === #Tab-delimited … … 70 70 71 71 ''カスタムレポートを作成するためには、 SQL を楽に書ける程度の知識が必要です。'' 72 73 '''Note: レポートの追加、編集ボタンを表示させるためには [TracPermissions#Reports permissions] をセットアップする必要があります。''' 72 74 73 75 レポートは基本的に、 Trac が実行できる形式の、名前がついた特定 SQL です。 … … 75 77 作成したりできます。 76 78 77 通常のレポートは、 'ticket' 表に対する、カラムの選択や、ソート指定を伴った 79 通常のレポートは、 'ticket' 表に対する、カラムの選択や、ソート指定を伴った 78 80 SELECT 文となります。 79 81 … … 100 102 各カラムに対応する属性の詳細な説明は、 TracTickets に記述しています。 101 103 102 '''優先度順、登録日時順の全未解決チケット''' 103 104 '''例:''' ''優先度順、登録日時順の全未解決チケット'' 105 {{{ 106 SELECT id AS ticket, status, severity, priority, owner, 107 time as created, summary FROM ticket 104 例: '''優先度順、登録日時順の全未解決チケット''' 105 {{{ 106 SELECT id AS ticket, status, severity, priority, owner, 107 time AS created, summary FROM ticket 108 108 WHERE status IN ('new', 'assigned', 'reopened') 109 109 ORDER BY priority, time 110 110 }}} 111 112 113 ----114 111 115 112 … … 142 139 143 140 === 特殊な定数 === #SpecialConstantVariables 144 実用的なレポート のために、定義済みの動的変数が用意されています。これらは URL に値を設定しなくても、自動的に値が割り当てられます。145 146 * $USER -- ログインに使用したユーザ名 。141 実用的なレポートにするために、自動的に値が設定される動的変数が用意されています。(URL で指定されると上書かれます) 142 143 * $USER -- ログインに使用したユーザ名 147 144 148 145 例 (''私が担当になっているチケット一覧''): … … 151 148 }}} 152 149 153 154 ----155 150 156 151 157 152 == 上級トピック: 表示形式のカスタマイズ == #AdvancedReports:CustomFormatting 158 153 Trac には、レイアウトのカスタマイズや、グルーピング、ユーザ定義の CSS 利用などによる 159 もっと複雑なレポートの作成も可能です。このようなレポートを作成するには、 154 もっと複雑なレポートの作成も可能です。このようなレポートを作成するには、 160 155 Trac のレポートエンジンが出力を制御するためのステートメントを含む、特別な SQL を使用します。 161 156 162 == 特別なカラム== #SpecialColumns157 === 特別なカラム === #SpecialColumns 163 158 レポートを整形するため、 TracReports はクエリの結果から '特定の' カラム名を 164 159 探します。このような '特定の' 名前で、最終的なレポートのレイアウトやスタイルが … … 166 161 167 162 === 自動的に整形されるカラム名 === #Automaticallyformattedcolumns 168 * '''ticket''' -- チケットの ID が入っているカラムで使用します。該当する ID のカラムにハイパーリンクされます。 (訳注: `summary` というカラム名もチケットにハイパーリンクされます。日本語版では `概要` でもリンクします。)169 * '''id''' -- '''realm''' が指定されない場合は、 '''ticket''' と同じです。170 * '''realm''' -- '''id''' と同時に使用します。チケット以外のリソースにリンクを行う場合に使用します。(e.g. ''wiki'' のレルムに ''id'' としてページ名を組み合わせると、 Wiki ページへのリンクを生成します)171 * '''created, modified, date, time''' -- 日付や時刻に整形されます。 (訳注: `datetime` という列名にすると日時で整形されます。日本語版では `時刻` で終わるカラムは `time` に、 `日付` で終わるカラムは `date` に、 `日時` で終わるカラムは `datetime` に、それぞれ整形されます。)172 * '''description''' -- チケットの説明が入っているカラムで使用します。 Wiki エンジンで処理されます。 (訳注: 日本語版では `説明` でも整形されます。)163 * '''ticket''' — チケットの ID が入っているカラムで使用します。該当する ID のカラムにハイパーリンクされます (訳注: `summary` というカラム名もチケットにハイパーリンクされます。日本語版では `概要` でもリンクします) 164 * '''id''' — '''realm''' が指定されない場合は、 '''ticket''' と同じです 165 * '''realm''' — '''id''' と同時に使用します。チケット以外のリソースにリンクを行う場合に使用します(e.g. ''wiki'' のレルムに ''id'' としてページ名を組み合わせると、 Wiki ページへのリンクを生成します) 166 * '''created, modified, date, time''' — 日付や時刻に整形されます (訳注: `datetime` という列名にすると日時で整形されます。日本語版では `時刻` で終わるカラムは `time` に、 `日付` で終わるカラムは `date` に、 `日時` で終わるカラムは `datetime` に、それぞれ整形されます) 167 * '''description''' — チケットの説明が入っているカラムで使用します。 Wiki エンジンで処理されます (訳注: 日本語版では `説明` でも整形されます) 173 168 174 169 '''例:''' 175 170 {{{ 176 SELECT id as ticket, created, status, summary FROM ticket171 SELECT id AS ticket, created, status, summary FROM ticket 177 172 }}} 178 173 179 174 これらのカラムは定義しても非表示にすることができます。方法は [#column-syntax 下記] を参照してください。 180 175 176 ''ticket'' 以外のレルムに対するレポートの作成方法については [trac:CookBook/Configuration/Reports CookBook/Configuration/Reports] を参照してください。 177 181 178 '''訳注''': Trac-0.11.1.ja1 以降のバージョンで作成した Environment では、デフォルトのレポートに日本語での整形ルールが適用されています。このような Environment を本家版 Trac で使用したい場合は各レポートの SQL を編集し、上記の日本語のカラム別名を英語に変更してください。 182 179 183 180 === 整形されるカラムのカスタマイズ === #Customformattingcolumns 184 カラム名の前後に 2 つのアンダースコアがついている場合 (例: '''`__color__`''') は、 181 カラム名の前後に 2 つのアンダースコアがついている場合 (例: '''`__color__`''') は、 185 182 ''整形用のヒント'' として扱われ、レコードの整形が行われます。 186 187 * '''`__group__`''' -- 指定されたカラムで、表示がグループ化されます。各グループは、それぞれセクションヘッダとクエリ結果の表を持ちます。 188 * '''`__color__`''' -- 1 から 5 の数値である必要があります。値によって、あらかじめ定義された色付けが行われます。一般的な使用法は、優先度別の色付けです。 183 184 * '''`__group__`''' — 指定されたカラムで、表示がグループ化されます。各グループは、それぞれセクションヘッダとクエリ結果の表を持ちます 185 * '''`__grouplink__`''' — グループ化した場合の各グループのヘッダで生成するリンク先の URL を指定します。この URL は各グループの最初の行にだけ付与されます 186 * '''`__color__`''' — 1 から 5 の数値である必要があります。値によって、あらかじめ定義された色付けが行われます。一般的な使用法は、優先度別の色付けです 189 187 {{{ 190 188 #!html 191 <div style="margin-left:7.5em">デフォルトの色付け: 189 <div style="margin-left:7.5em">デフォルトの色付け: 192 190 <span style="border: none; color: #333; background: transparent; font-size: 85%; background: #fdc; border-color: #e88; color: #a22">Color 1</span> 193 191 <span style="border: none; color: #333; background: transparent; font-size: 85%; background: #ffb; border-color: #eea; color: #880">Color 2</span> … … 197 195 </div> 198 196 }}} 199 * '''`__style__`''' -- CSS 形式でレコードを整形できます。 200 201 '''例:''' ''マイルストーン別未解決チケット (優先度別色付け)'' 197 * '''`__style__`''' — `<tr>` 要素を使用して CSS 形式でレコードを整形できます 198 * '''`__class__`''' — `<tr>` 要素でセットされた0以上の空白で区切られた CSS のクラス名です。これらのクラスは `__color__` に由来するクラス名と偶数/奇数の指標に追加されます 199 200 '''例:''' ''マイルストーン別未解決チケット (優先度別色付け, グループのヘッダでマイルストーンにリンク)'' 202 201 {{{ 203 202 SELECT p.value AS __color__, 204 203 t.milestone AS __group__, 204 '../milestone/' || t.milestone AS __grouplink__, 205 205 (CASE owner WHEN 'daniel' THEN 'font-weight: bold; background: red;' ELSE '' END) AS __style__, 206 206 t.id AS ticket, summary 207 207 FROM ticket t,enum p 208 WHERE t.status IN ('new', 'assigned', 'reopened') 208 WHERE t.status IN ('new', 'assigned', 'reopened') 209 209 AND p.name=t.priority AND p.type='priority' 210 210 ORDER BY t.milestone, p.value, t.severity, t.time … … 219 219 これから挙げる指定によって、複数行にわたってのレイアウトを行うことができます。 220 220 221 * '''`column_`''' -- ''改行''。 カラム名の語尾にアンダースコア ('_') を付与した場合、以降のカラムは次の行で表示されます。222 223 * '''`_column_`''' -- ''全行表示''。 カラム名の前後にアンダースコア ('_') を付与した場合、そのカラムは続く行で全てのカラム幅を使って表示されます。224 225 * '''`_column`''' -- ''データを非表示にする''。 カラム名の語頭にアンダースコア ('_') を付与した場合、 HTML 出力では非表示になります。これは (CSV や RSS のような) 別フォーマットでのダウンロード時にだけ見たい情報であるときに使います。226 この機能ではあらゆるカラムを非表示にできます。リソースの特定などで他のカラムが異存しているような場合に有用です。たとえば `id as _id` とすることで、 '''Id''' カラムは非表示となりますが、チケットへのリンクは正しく生成されます 。221 * '''`column_`''' — ''改行''。 カラム名の語尾にアンダースコア ('_') を付与した場合、以降のカラムは次の行で表示されます 222 223 * '''`_column_`''' — ''全行表示''。 カラム名の前後にアンダースコア ('_') を付与した場合、そのカラムは続く行で全てのカラム幅を使って表示されます 224 225 * '''`_column`''' — ''データを非表示にする''。 カラム名の語頭にアンダースコア ('_') を付与した場合、 HTML 出力では非表示になります。これは (CSV や RSS のような) 別フォーマットでのダウンロード時にだけ見たい情報であるときに使います 226 この機能ではあらゆるカラムを非表示にできます。リソースの特定などで他のカラムが異存しているような場合に有用です。たとえば `id as _id` とすることで、 '''Id''' カラムは非表示となりますが、チケットへのリンクは正しく生成されます 227 227 228 228 '''例:''' ''アクティブなチケットを、マイルストーンでグループ化し、優先度で色付け、チケットの説明を multi-line レイアウトでリスト表示する'' … … 231 231 SELECT p.value AS __color__, 232 232 t.milestone AS __group__, 233 (CASE owner 234 WHEN 'daniel' THEN 'font-weight: bold; background: red;' 233 (CASE owner 234 WHEN 'daniel' THEN 'font-weight: bold; background: red;' 235 235 ELSE '' END) AS __style__, 236 236 t.id AS ticket, summary AS summary_, -- ## ここで改行する … … 240 240 changetime AS _changetime, reporter AS _reporter -- ## HTML 出力では表示しない 241 241 FROM ticket t,enum p 242 WHERE t.status IN ('new', 'assigned', 'reopened') 242 WHERE t.status IN ('new', 'assigned', 'reopened') 243 243 AND p.name=t.priority AND p.type='priority' 244 244 ORDER BY t.milestone, p.value, t.severity, t.time … … 251 251 追加のフィールドを trac.ini に宣言する ''前に'' 、チケットがデータベースに存在する場合、 ticket_custom テーブルには関連するデータを持たないことになります。これに起因する問題を回避するためには SQL の "LEFT OUTER JOIN" 節を使用してください。 252 252 253 '''Note レポートの追加、編集をするボタンを表示するためには権限を設定する必要があります。''' 253 === SQLの書き換えについて #rewriting 254 動的変数の比較的些細な変更によって、SQL クエリもレポートの2つの特徴のサポートのために変更されます: 255 1. [#sort-order ソート順の変更] 256 2. ページネーションのサポート (各ページの表示結果の行数の制約) 257 一つ目の特徴をサポートするために、__group__`カラムが指定される場合にはソートカラムは `ORDER BY` 節の中の先頭位置か二番目の位置に挿入されます(必要に応じて `ORDER BY` 節は作成されます)。 ページネーションをサポートするために、 `LIMIT ... OFFSET ...` 節が追加されます。 258 クエリは自動書き換えの機能が正常に働くには複雑すぎて、クエリは間違った結果になるかもしれません。この場合、手動で下記のトークンを挿入することにより、書き直しがどのように行われるか正確にコントロールできる可能性があります: 259 - `@SORT_COLUMN@`, ソートしたいカラム名です, 260 - `@LIMIT_OFFSET@`, ページネーションのサポートの節です 261 Note: もしSQLコメント `--` の後に記述すると、意図したとおりの書き換えが事実上不可能になります! 262 263 SQL query の例: 264 {{{ 265 -- ## 4: 担当者がアサインしたアクティブなチケット ## -- 266 267 -- 268 -- アサインされたチケットのリスト、チケットの担当者によるグループ化、優先度によるソート 269 -- 270 271 SELECT p.value AS __color__, 272 owner AS __group__, 273 id AS ticket, summary, component, milestone, t.type AS type, severity, time AS created, 274 changetime AS _changetime, description AS _description, 275 reporter AS _reporter 276 FROM ticket t,enum p 277 WHERE status = 'assigned' 278 AND p.name=t.priority AND p.type='priority' 279 ORDER BY __group__, p.value, severity, time 280 }}} 281 282 自動書き換えの例(1ページにつき4行、2ページ、`component` によるソート): 283 {{{ 284 SELECT p.value AS __color__, 285 owner AS __group__, 286 id AS ticket, summary, component, milestone, t.type AS type, severity, time AS created, 287 changetime AS _changetime, description AS _description, 288 reporter AS _reporter 289 FROM ticket t,enum p 290 WHERE status = 'assigned' 291 AND p.name=t.priority AND p.type='priority' 292 ORDER BY __group__ ASC, `component` ASC, __group__, p.value, severity, time 293 LIMIT 4 OFFSET 4 294 }}} 295 296 書き換えのトークンと等しいSQLクエリの例: 297 {{{ 298 SELECT p.value AS __color__, 299 owner AS __group__, 300 id AS ticket, summary, component, milestone, t.type AS type, severity, time AS created, 301 changetime AS _changetime, description AS _description, 302 reporter AS _reporter 303 FROM ticket t,enum p 304 WHERE status = 'assigned' 305 AND p.name=t.priority AND p.type='priority' 306 ORDER BY __group__, @SORT_COLUMN@, p.value, severity, time 307 @LIMIT_OFFSET@ 308 }}} 309 310 もし、最初に常に優先度によるソートを、そしてその次にユーザが選択したカラムによるソートを希望するならば、シンプルに下記のように `ORDER BY` 節を使用してください: 311 {{{ 312 ORDER BY __group__, p.value, @SORT_COLUMN@, severity, time 313 }}} 254 314 255 315 ----