XPressME Integration Kit

Trac

Initial Version から Version 1 における更新: TracTicketsCustomFields

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