= カスタムチケット属性 =
Trac ではチケットにユーザ定義の属性を追加できます。カスタムチケット属性を使用すると、定型で、プロジェクト特有のプロパティをチケットに持たせることができます。

== 設定方法 ==
カスタムチケット属性を設定するためには、 [wiki:TracIni trac.ini] ファイルを変更します。カスタムフィールドは、 trac.ini ファイルの `[ticket-custom]` セクションに書く必要があります。

各属性の定義は以下のように記述します:
{{{
 属性名 = タイプ
 (属性名.オプション = 値)
 ...
}}}
構文の詳細は以下の例を見てください。

=== 属性のタイプとオプション ===
 * '''text''': シンプルな(1行の)テキスト。
   * label: 説明となるラベル
   * value: デフォルト値
   * order: ソート時の並び順 (フォーム内での相対的位置を決定します。)
 * '''checkbox''': ブーリアン値をもつチェックボックス。
   * label: 説明となるラベル。
   * value: デフォルト値 (0 または 1).
   * order: ソート時の並び順
 * '''select''': ドロップダウンするリストボックス。
   * label: 説明となるラベル。
   * options: リストに表示する値を '''|''' (vertical pipe) 区切りで記述。
   * value: デフォルト値 (0から始まるリスト内での番号) 。
   * order: ソート時の並び順
 * '''radio''': ラジオボタン。 HTML の '''select''' 要素と同じ。
   * label: 説明となるラベル。
   * options: リストに表示する値を '''|''' (vertical pipe) 区切りで記述。
   * value: デフォルト値 (0から始まるリスト内での番号) 。
   * order: ソート時の並び順
 * '''textarea''': 複数行のテキストエリア。
   * label: 説明となるラベル。
   * value: デフォルトで設定されるテキスト。
   * cols: 入力領域のカラム幅。
   * rows: 入力領域の行数。
   * order: ソート時の並び順

=== サンプル ===
{{{
[ticket-custom]

test_one = text
test_one.label = Just a text box

test_two = text
test_two.label = Another text-box
test_two.value = Just a default value

test_three = checkbox
test_three.label = Some checkbox
test_three.value = 1

test_four = select
test_four.label = My selectbox
test_four.options = one|two|third option|four
test_four.value = 2

test_five = radio
test_five.label = Radio buttons are fun
test_five.options = uno|dos|tres|cuatro|cinco
test_five.value = 1

test_six = textarea
test_six.label = This is a large textarea
test_six.value = Default text
test_six.cols = 60
test_six.rows = 30
}}}

''Note: `select` タイプのフィールドを非必須 (optional) にしたい場合、 `フィールド名.options` オプションの先頭に `バーティカルパイプ (|)` を設定してください。''

=== カスタム属性を含むレポート ===

カスタム属性を含む TracReports では比較的 SQL を間違えやすいです。 `ticket_custom` 表の `JOIN` はカスタム属性ごとにそれぞれ必要です。

以下の例は `progress` という名前のカスタム属性を含むレポートです:
{{{
#!sql
SELECT p.value AS __color__,
   id AS ticket, summary, component, version, milestone, severity,
   (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
   time AS created,
   changetime AS _changetime, description AS _description,
   reporter AS _reporter,
  (CASE WHEN c.value = '0' THEN 'None' ELSE c.value END) AS progress
  FROM ticket t
     LEFT OUTER JOIN ticket_custom c ON (t.id = c.ticket AND c.name = 'progress')
     JOIN enum p ON p.name = t.priority AND p.type='priority'
  WHERE status IN ('new', 'assigned', 'reopened')
  ORDER BY p.value, milestone, severity, time
}}}

この `LEFT OUTER JOIN` ステートメントに特に注意してください。

----
See also: TracTickets, TracIni
