Trac Lightning 2.0.0 の目玉機能である、ワークフロー機能のカスタマイズ方法を Oかもと さんより教えていただいたので早速試してみた。
実は Trac Lightning の Wiki に変更方法が書かれていたオチ^^;
http://localhost/trac/SampleProject/wiki/TracWorkflow
ここに書かれているテストフェーズの追加と遷移の制限を追加してみた。
変更前と変更後のフローはこんなカンジ(可視化方法はこちらを参照)。
変更方法
http://localhost/trac/SampleProject/wiki/TracWorkflow
ここの「例: ワークフローにテストを追加する」を見ながら試行錯誤すれば大体わかると思う。
基本的には trac.ini (SampleProject なら C:\TracLight\projects\trac\SampleProject\conf ) の [ticket-workflow] セクションをいじればOK。
この例でいえば、[ticket-workflow] セクションの一番下に↓を追加する
testing = new,accepted,needs_work -> testing
testing.name = Submit to reporter for testing
testing.permissions = TICKET_MODIFYreject = testing -> needs_work
reject.name = Failed testing, return to developerpass = testing -> closed
pass.name = Passes Testing
pass.operations = set_resolution
pass.set_resolution = fixed
わかりやすく pass の部分を例にとってみると基本、下の2つがわかっていれば問題ない。
- pass = testing -> closed で testing 状態から closed 状態への遷移を pass と名づける
- pass.name で状態遷移の名前をつける
実例
こんなカンジでいじってみたのがこれ(最初に図示した変更後のフロー)
accept = new,assigned,accepted,reopened -> accepted
accept.name = 着手する
accept.operations = set_owner_to_self
accept.permissions = TICKET_MODIFYleave = * -> *
leave.default = 1
leave.name = 変更しない
leave.operations = leave_statusreassign = new,assigned,accepted,reopened -> assigned
reassign.name = 担当者変更
reassign.operations = set_owner
reassign.permissions = TICKET_MODIFYreopen = closed -> reopened
reopen.name = 差し戻す
reopen.operations = del_resolution
reopen.permissions = TICKET_CREATEtesting = accepted,reopened,needs_work -> testing
testing.name = テスト開始
testing.permissions = TICKET_MODIFYreject = testing -> needs_work
reject.name = テスト失敗pass = testing -> closed
pass.name = テスト合格
pass.operations = set_resolution
pass.set_resolution = fixed
このフローだと
- new(新規) からは accepted(着手) または assigned(担当変更) のみ可能で直接 closed(完了) には遷移できない
- accepted(着手) から testing(テスト) へ遷移(accepted から accepted への遷移は消し忘れなので多めにみて^^;)
- testing(テスト) が OK であれば初めて closed(完了) に遷移できる
といった動作になる
本当に柔軟にできるのでとてもおもしろい。
自社のフローにあわせることも簡単にできるのではないかな。
しかも可視化もできるので、説明も簡単にできそう。
これは、確かに目玉機能だね:)