Changes between Initial Version and Version 1 of TracTicketsCustomFields


Ignore:
Timestamp:
Apr 10, 2015, 1:03:53 PM (10 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracTicketsCustomFields

    v1 v1  
     1= カスタムチケット属性 = #CustomTicketFields
     2Trac ではチケットにユーザ定義の属性を追加できます。カスタムチケット属性を使用すると、型付けされた、プロジェクト特有のプロパティをチケットに持たせることができます。
     3
     4== 設定方法 == #Configuration
     5カスタムチケット属性を設定するためには、 [wiki:TracIni trac.ini] ファイルを変更します。カスタムフィールドは、 trac.ini ファイルの `[ticket-custom]` セクションに書く必要があります。
     6
     7各属性の定義は以下のように記述します:
     8{{{
     9 属性名 = タイプ
     10 (属性名.オプション = 値)
     11 ...
     12}}}
     13構文の詳細は以下の例を見てください。
     14
     15=== 属性のタイプとオプション === #AvailableFieldTypesandOptions
     16  * '''text''': シンプルな(1行の)テキスト
     17   * label: 説明となるラベル
     18   * value: デフォルト値
     19   * order: ソート時の並び順 (全てのカスタムフィールドで共通するソートの並び順)
     20   * format:
     21     * 通常のテキストを指す `plain`
     22     * WikiFormatting として整形を行う `wiki` (''0.11.3 以降'')
     23     * 参照可能な値として整形を行う `reference` (''1.0 以降'')
     24     * スペースで区切られた参照可能なリストとして整形を行う `list` のいずれかを指定する(''1.0 以降'')
     25 * '''checkbox''': ブーリアン値をもつチェックボックス
     26   * label: 説明となるラベル
     27   * value: デフォルト値 (0 または 1)
     28   * order: ソート時の並び順
     29 * '''select''': ドロップダウンするリストボックス
     30   * label: 説明となるラベル
     31   * options: リストに表示する値を '''|''' (vertical pipe) 区切りで記述
     32   * value: デフォルト値 (options の値から一つを指定)
     33   * order: ソート時の並び順
     34 * '''radio''': ラジオボタン。 HTML の '''select''' 要素と同じ
     35   * label: 説明となるラベル
     36   * options: リストに表示する値を '''|''' (vertical pipe) 区切りで記述
     37   * value: デフォルト値 (options の値から一つを指定)
     38   * order: ソート時の並び順
     39 * '''textarea''': 複数行のテキストエリア
     40   * label: 説明となるラベル
     41   * value: デフォルトで設定されるテキスト
     42   * cols: 入力領域のカラム幅
     43   * rows: 入力領域の行数
     44   * order: ソート時の並び順
     45   * format: 通常のテキストを指す `plain` もしくは WikiFormatting として整形を行う `wiki` のいずれかを指定する (''0.11.3 以降'')
     46
     47=== サンプル === #SampleConfig
     48{{{
     49[ticket-custom]
     50
     51test_one = text
     52test_one.label = Just a text box
     53
     54test_two = text
     55test_two.label = Another text-box
     56test_two.value = Default [mailto:joe@nospam.com owner]
     57test_two.format = wiki
     58
     59test_three = checkbox
     60test_three.label = Some checkbox
     61test_three.value = 1
     62
     63test_four = select
     64test_four.label = My selectbox
     65test_four.options = one|two|third option|four
     66test_four.value = two
     67
     68test_five = radio
     69test_five.label = Radio buttons are fun
     70test_five.options = uno|dos|tres|cuatro|cinco
     71test_five.value = dos
     72
     73test_six = textarea
     74test_six.label = This is a large textarea
     75test_six.value = Default text
     76test_six.cols = 60
     77test_six.rows = 30
     78}}}
     79
     80''Note: `select` タイプのフィールドを非必須 (optional) にしたい場合、 `フィールド名.options` オプションの先頭に `バーティカルパイプ (|)` を設定してください。''
     81
     82=== カスタム属性を含むレポート === #ReportsInvolvingCustomFields
     83
     84カスタムチケット属性は `ticket` テーブルに保存されるのではなく、 `ticket_custom` テーブルに保存されます。したがって、レポートのカスタム属性を表示するためには `ticket` と `ticket_custom` の 2 テーブルを join する必要があります。 `progress` と設定されたカスタムチケット属性の使用例を示します。
     85
     86{{{
     87#!sql
     88SELECT p.value AS __color__,
     89   id AS ticket, summary, owner, c.value AS progress
     90  FROM ticket t, enum p, ticket_custom c
     91  WHERE status IN ('assigned') AND t.id = c.ticket AND c.name = 'progress'
     92AND p.name = t.priority AND p.type = 'priority'
     93  ORDER BY p.value
     94}}}
     95'''Note''' この例は progress が設定されたチケットだけを表示します。'''すべてのチケットを表示するのではありません。'''既にいくつかのチケットを作成した''後で''カスタムチケット属性を定義した場合、既に作成されたチケットにはカスタムチケット属性が定義されません。そのため上記のクエリではチケットが表示されないでしょう。既に作成されたチケットにカスタム属性を設定し直せば、カスタムチケット属性は定義されます。そして、上記のクエリによって表示されるでしょう。
     96
     97しかし、すべてのチケットエントリを ( progress が定義されていないエントリーも一緒に ) 表示したいのであれば、クエリにおいてあらゆるカスタムフィールドに `JOIN` を使用する必要があります。
     98{{{
     99#!sql
     100SELECT p.value AS __color__,
     101   id AS ticket, summary, component, version, milestone, severity,
     102   (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
     103   time AS created,
     104   changetime AS _changetime, description AS _description,
     105   reporter AS _reporter,
     106  (CASE WHEN c.value = '0' THEN 'None' ELSE c.value END) AS progress
     107  FROM ticket t
     108     LEFT OUTER JOIN ticket_custom c ON (t.id = c.ticket AND c.name = 'progress')
     109     JOIN enum p ON p.name = t.priority AND p.type='priority'
     110  WHERE status IN ('new', 'assigned', 'reopened')
     111  ORDER BY p.value, milestone, severity, time
     112}}}
     113
     114この `LEFT OUTER JOIN` ステートメントに特に注意してください。
     115
     116=== データベースを更新する === #Updatingthedatabase
     117
     118上記に記述したとおり、カスタムフィールド設定以前に作成されたチケットには、該当するフィールドの値が定義されていない状態になります。以下のような SQL を Trac のデータベースで直接実行することで、カスタムフィールドの初期値を設定することができます (SQLite 向けの SQL ですので、 DBMS に応じて調整してください)。カスタムフィールド 'request_source' が存在しない、全てのチケットにデフォルト値 'None' が挿入されます:
     119
     120{{{
     121#!sql
     122INSERT INTO ticket_custom
     123   (ticket, name, value)
     124   SELECT
     125      id AS ticket,
     126      'request_source' AS name,
     127      'None' AS value
     128   FROM ticket
     129   WHERE id NOT IN (
     130      SELECT ticket FROM ticket_custom
     131   );
     132}}}
     133
     134複数のカスタムフィールドを追加している場合、 {{{ticket}}} 表への副問合わせで対象となるカスタムフィールドの名前を指定しなければなりません (訳注: 通常は上記の例ではなく、こちらを使うといいでしょう):
     135
     136{{{
     137#!sql
     138INSERT INTO ticket_custom
     139   (ticket, name, value)
     140   SELECT
     141      id AS ticket,
     142      'request_source' AS name,
     143      'None' AS value
     144   FROM ticket
     145   WHERE id NOT IN (
     146      SELECT ticket FROM ticket_custom WHERE name = 'request_source'
     147   );
     148}}}
     149
     150----
     151See also: TracTickets, TracIni