VBS

2009年8月23日 (日)

今までTrac関係で作ったものの関係をまとめる。

勉強会の発表資料は分かりにくかったのと,Trac関係に一区切りをつけたいなということで,最近は仕事でTrac使うことがないので,テストとかほとんどできてなくて,すべて中途半端ですが、私がやってきたこと(ProjectのVBAは後で登録します)をまとめておきます.

今まで,Tracの問題としてあげられてきた内容をまとめると.

  • プロジェクトの親子関係がない
  • チケットの粒度が違うものをどうするか
  • 項目(カスタムフィールド)が大きく違うものを同じプロジェクトで扱うこと
  • 複数のプロジェクトに分割したときの登録,確認,出力方法
  • コミットメッセージが一つのプロジェクトにしかつけられないため分割できない

これらを解決するために,私が作ってきたものがどこにからんでくるかということを,次の図にしました.この図ならなんとかわかってもらえるのではないかと

Multitracdep_3

1. InterTracCommitPatch

コミットメッセージを,同じサーバ上の隣のプロジェクトにつけることを可能にします.これにより,今までは,要件定義,工程,実作業,障害などは,同じリポジトリを使う必要があため,どれだけ扱う項目(カスタムフィールド)が違っていたとしても,同じプロジェクトで扱うしか方法がありませんでした.これがあれば,リポジトリの縛りから解放され,プロジェクトを自由に分割することができます.

2. TracDepenecencyPlugin

同じサーバのTracプロジェクト間でチケットの親子関係と,依存関係を扱えるように拡張し,Tracのプロジェクトを分割することが容易になります.カスタムフィールドの入力のところのチェックがまだ追加できてないので,先行チケットを複数指定するときはカンマで区切り,スペースを追加しないとだめなはず.

3. レポート,クエリのHTA

複数のプロジェクトの状況を確認するには,いろいろやらなければならないことが多かったため,これを使用することで,一つのクエリ,レポートの状況を一目で確認できるようにします.いまはTraM(まだ確認してません)があるので必要ないのでしょうか.このHTAは,環境によるのだと思いますが,接続できない未解決の問題があるようです.

4. チケット登録/編集用Excel VBA

XML-RPC経由でチケットの登録と編集を行います.単純に複数のシートに書き込めるようにしただけですが,あれば結構便利です.

5. MS-Project - Trac 連携VBA InterTrac対応版(未公開)

このVBAは,2.のプラグインの情報を元に,ガントチャートが作成でき,先行タスクのところにカッコつきで指定した,四つの依存関係(SS,FS,SF,FF))に対応もしています.作ったものの,仕事で使う機会がなく,デバッグできてないので,公開してません.どの範囲の親子や依存関係を取ってくるかは情報の取得時に設定するため,開発者個人のプロジェクトやレビュープロジェクトを含め内容にすることができます.(MasterTicketsのように,双方向のリンクをDBに保存してないのはそういう理由だったんですが,今となってはあってもよかったのかなぁと思ってます.)

最近出てきたTraMとか含めると,いろいろなところで出ていたTracの問題や,RedMineより劣る点って,解決すると思うんですがどうでしょうか.

| | コメント (0) | トラックバック (0)

2009年3月16日 (月)

Tracのレポートをチェックして表示するHTA(改XMLRPCもできるように)

Tracのレポートをチェックして表示するHTA をもとに、0.10対応とXMLに対応を追加しました。ほかのことの確認のついでに作ったものなのでエラーチェックとかいい加減ですが、そこそこつかえるんじゃないかなぁと思います。XMLRPCを使う場合はQueryTracXmlRpcを使ってください。第三引数にticket.queryの引数をエンコードして指定するとOkです。サンプルとして入っているものを確認していただけるとわかると思います。

「TracReportCheck2.hta」をダウンロード

Screen

| | コメント (0) | トラックバック (0)

2009年3月14日 (土)

Tracのレポートをチェックして表示するHTA

Tracの通知メールが埋もれてわからなくなるとかよく言われます。今までは「一日何回かレポートを確認すればわかるだろう」って思っていたんですが、自分自身も承認し忘れていたりするなぁということで、レポートに一件でもあればアイコンを表示する簡単なHTAを作ってみました。

Tracreport

起動:

  • 「TracReportCheck.hta」をダウンロード
  • ファイルを選択して,コンテキストメニューの"プロパティ"を表示する。
  • "全般"タブのセキュリティで"ブロックの解除ボタン"を押す
  • ファイルをダブルクリック

※接続できない場合はエラーが出ると思いますので下の1.のところを先に修正しておいてください。

機能:5分に一回(変更可能)指定したユーザ名でレポートを確認し件数を表示します。

カスタマイズ方法:

1. 次の箇所のアドレスとユーザ名とレポート番号を変更してください。

    Sub Requery
     s = "<tr bgcolor=""#cccccc""><th></th><th>レポート名</th><th>数</th></tr>"
     strURI = "http://localhost/trac/SampleProject/report/1
  s = s + QueryTracReport(strURI,"admin","admin")
     strURI = "http://localhost/trac/SampleProject/report/2
  s = s + QueryTracReport(strURI,"admin","admin")
     strURI = "http://localhost/trac/SampleProject/report/3
  s = s + QueryTracReport(strURI,"admin","admin")
     strURI = "http://localhost/trac/SampleProject/report/4
  s = s + QueryTracReport(strURI,"admin","admin")
     DataArea.InnerHTML = "<table border=4 width=250>" + s + "</table>"
    End Sub

2. アイコンは適切なものを作成して、green.pngのところを変更してください。

3. レポートを作成する

  承認待ちとかのレポートを作成しておくとこのHTAを起動しておく意味が出てくると思います。

課題:サイドバー化(このHTAの中身のほとんどはVBScriptでできているので設定と表示をgadget化するぐらい)、タスクトレイ化(VB.NET化と設定部分のUI追加)

MSXML2.XMLHTTPを使っているので環境によっては動かないこともあると思いますが、ご報告いただけるとありがたいです。

| | コメント (5) | トラックバック (1)

2008年11月24日 (月)

MS-ProjectのVBAを使ってガントチャートをTracのDBから作る手順

  以前にアップしたファイルをMS-Project 2007でうまく動かなかったため修正したものをアップします。実行確認のための手順は次のようになります。

  1. ODBCドライバのインストール
  2. MS-ProjectでADOを使えるように
  3. VBAのファイルをダウンロード
  4. VB Editorでファイルのインポート
  5. ファイルの修正
  6. 実行
  7. 確認

1. ODBCのインストール

SQLiteの場合はSQLite ODBCからドライバをダウンロードしインストールします。

MySQLの場合は検索してください。

2. MS-ProjectでADOを使えるように

VB Editorを開きます

P1_2

参照設定ダイアログを開く

P2

ADO Libを選択します。よくわかりませんが一番新しそうなものを選びます。

P3

3. VBAのファイルをダウンロード

「Module1.bas」をダウンロード (SJIS,CR+LF)

テキストファイルなのでエディタで開き問題ないか確認してください。

4. VB Editorでファイルのインポート

ダウンロードしたファイルをインポートします。

P4

ダウンロードしたファイルを選択します

P5

5. ファイルの修正

インポートしたモジュールを選択しダブルクリックしファイルを開く

P6

DBファイルのありかとTracのWebアドレスのベース部分を設定します。

P7

6. 実行

ProjectOpenサブルーチンにカレットを置き、マクロの実行ボタンを押します。

P8_2 

7. 確認

これには計画を入れていないので、基準計画が表示されていないのと、タスク名とリソース名を隠してあるのでイメージがわかないかもしれませんが、出来上がったガントチャートはこうなりました。

P9_2

| | コメント (0) | トラックバック (0)

2008年11月 8日 (土)

TracからMS-Project中間報告

VBAちょっといじくってSQLiteのDBから持ってこれるか確認してみました。まずは結果の画面を見てください。

P_3

こんな感じになりました。基準計画を追加してあるのでGanttCalendarより少し情報が多めのチャートになっています。いろいろ試してみましたが、リソース等の計算が難しいため、自動平準化は行わず、リソースの割り当て超過を無視することでなんとか線が引けました。MS-Projectは期間と進捗率をを表示するだけに使うのがいいみたいです。

ということで、割り当て超過や終了見込を見積もるのには、なにか別のものを考える必要があります。あとはアウトラインの階層をつけることが残っています。

使ったVBAはこれです。

Sub Macro4()
    Dim cnDatabase As ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim row As Integer
    Dim strWork As String
    cnt = "Driver=SQLite3 ODBC Driver; Database=D:\TracLight\projects\trac\tracplugin\db\trac.db" '**** SQLite3.x

    Set cnDatabase = New ADODB.Connection
    cnDatabase.Open cnt

    Sql = "SELECT t.id, "
    Sql = Sql + " t.summary as '概要', "
    Sql = Sql + " t.owner as '担当', "
    Sql = Sql + " a.value as '開始(予)', "
    Sql = Sql + " c.value as '終了(予)', "
    Sql = Sql + " d.value as '進捗率', "
    Sql = Sql + " g.value as '開始(計画)', "
    Sql = Sql + " h.value as '終了(計画)', "
'    Sql = Sql + "t.type AS 'タイプ', "
'    Sql = Sql + "f.value as '終了', "
'    Sql = Sql + "t.milestone as 'マイルストーン', "
'    Sql = Sql + "t.version as 'バージョン', "
    Sql = Sql + " e.value as '状況' "
    Sql = Sql + " from ticket t "
    Sql = Sql + " LEFT JOIN ticket_custom a ON a.ticket = t.id AND a.name = 'due_assign' "
    Sql = Sql + " LEFT JOIN ticket_custom c ON c.ticket = t.id AND c.name = 'due_close' "
    Sql = Sql + " LEFT JOIN ticket_custom d ON d.ticket = t.id AND d.name = 'complete'"
    Sql = Sql + " LEFT JOIN ticket_custom e ON e.ticket = t.id AND e.name = 'condition' "
    Sql = Sql + " LEFT JOIN ticket_custom f ON f.ticket = t.id AND f.name = 'close' "
    Sql = Sql + " LEFT JOIN ticket_custom g ON g.ticket = t.id AND g.name = 'plan_start' "
    Sql = Sql + " LEFT JOIN ticket_custom h ON h.ticket = t.id AND h.name = 'plan_end' "
    rs.Open Sql, cnDatabase
   
    Do Until rs.EOF = True 'レコードがなくなるまでループを回って項目を埋める
        Dim count As Integer
        Dim val As Variant
        Application.ActiveProject.Tasks.Add Name:=rs.Fields(1).Value
        count = Application.ActiveProject.Tasks.count
        val = rs.Fields(6).Value
        If Not IsNull(val) Then
            Application.ActiveProject.Tasks(count).BaselineStart = val
        End If
        val = rs.Fields(7).Value
        If Not IsNull(val) Then
            Application.ActiveProject.Tasks(count).BaselineFinish = val
        End If
        val = rs.Fields(3).Value
        If Not IsNull(val) Then
            Application.ActiveProject.Tasks(count).Start = val
        End If
        val = rs.Fields(4).Value
        If Not IsNull(val) Then
            Application.ActiveProject.Tasks(count).Finish = val
        End If
       
        val = rs.Fields(2).Value
        If Not IsNull(val) Then
            Application.ActiveProject.Tasks(count).ResourceNames = val
        End If
        Application.ActiveProject.Tasks(count).Type = pjFixedDuration '期間固定とする
   
        Application.ActiveProject.Tasks(count).HyperlinkHREF = "http://localhost/trac/tracplugin/ticket/" & rs!ID
        Application.ActiveProject.Tasks(count).Hyperlink = "#" & rs!ID
   
        Application.ActiveProject.Tasks(count).Estimated = False '期間のを見積もりでなくする
        val = rs.Fields(5).Value
        If Not IsNull(val) Then
            Application.ActiveProject.Tasks(count).PercentComplete = val
        End If
   
        rs.MoveNext
        row = row + 1
    Loop
   
End Sub

まだやることはありますがとりあえず参考までアップしておきます。

| | コメント (0) | トラックバック (0)