« TracXMLRPC.clsの使い方2 | トップページ | SVNリポジトリを複数のTracから共有し,post-commitでのコメントをそれぞれに振り分ける »

2009年5月29日 (金)

TracXMLRPC.clsを使って進捗報告のレポートを作成する例

Tracをプロジェクタ等で見ながらの進捗の報告がゆるされない職場ってまだまだありますよね.そういう場合は,何らかのレポートを作成することになりますが,せっかくXMLRPCでアクセスするクラスモジュールを作ったので,それを使って作ってみました.出力画面は次のようになります.

Tracreport

XMLRPCで接続して各種日付の情報から次の順番でレポートを作成していきます.

  1. 期間内にクローズ済みのチケット
  2. 作業中のチケット
  3. 開始予定のチケット

ちゃんとしたTracのプロジェクトではないので上の例ではわかりにくいと思いますが,その中にはsummary, id, due_assign, due_close, complete, descriptionを二行で追加しています.そのサンプルを次に貼り付けます.

Dim trac As TracXMLRPC
Dim s As Worksheet
Dim owner As String

Function initSheet(dBefore As String, dReport As String, dNext As String) As Integer
    s.Cells(1, 3).value = "作業進捗報告"
    s.Cells(1, 3).HorizontalAlignment = xlCenter
    s.Cells(2, 4).value = "報告日:" & dReport
    s.Cells(2, 4).HorizontalAlignment = xlRight
    s.Cells(3, 4).value = "期間:" & dBefore & " - " & dNext
    s.Cells(3, 4).HorizontalAlignment = xlRight
    s.Cells(4, 4).value = "報告者:"
    s.Cells(4, 4).HorizontalAlignment = xlRight
    initSheet = 5
    s.Range(s.Rows(initSheet), s.Rows(65536)).Delete xlUp
End Function

Public Function importClosedTickets(row As Integer, pre As String, dStart As String) As Integer
    Dim t1 As Collection
    Dim query As String
    query = "<string>status=closed&amp;owner=" & owner & "</string>"
    Set t1 = trac.queryTicket(query)
    Dim no As Integer
    no = 1
   
    On Error Resume Next
    For Each t In t1
        due_assign = due_close = complete = ""
        due_assign = t.Item("due_assign")
        due_close = t.Item("due_close")
        complete = t.Item("complete")
        If due_close >= dStart Then '前回報告日以後にクローズされているなら
            s.Cells(row, 2).value = pre & no & ". " & t.Item("summary") & "(" & t.Item("id") & ")"
            work = due_assign & "-" & due_close
            If complete <> "" Then work = work & "(" & complete & "%)"
            s.Cells(row, 4).value = work
            s.Cells(row, 4).HorizontalAlignment = xlRight
            row = row + 1
            work = ""
            work = t.Item("description")
            work = Replace(work, "[[BR]]", vbCrLf)
            s.Cells(row, 3).value = work
            row = row + 1
            no = no + 1
        End If
    Next
    On Error GoTo 0
    importClosedTickets = row
End Function

Public Function importWorkingTickets(row As Integer, pre As String, dReport As String, dEnd As String) As Integer
    Dim t1 As Collection
    Dim query As String
    query = "<string>status!=closed&amp;owner=" & owner & "</string>"
    Set t1 = trac.queryTicket(query)
    Dim no As Integer
    no = 1
   
    On Error Resume Next
    For Each t In t1
        due_assign = due_close = complete = ""
        due_assign = t.Item("due_assign")
        due_close = t.Item("due_close")
        complete = t.Item("complete")
        If due_assign <= dReport Then '報告日以前に開始しているなら
            s.Cells(row, 2).value = pre & no & ". " & t.Item("summary") & "(" & t.Item("id") & ")"
            work = due_assign & "-" & due_close
            If complete <> "" Then work = work & "(" & complete & "%)"
            s.Cells(row, 4).value = work
            s.Cells(row, 4).HorizontalAlignment = xlRight
            row = row + 1
            work = ""
            work = t.Item("description")
            work = Replace(work, "[[BR]]", vbCrLf)
            s.Cells(row, 3).value = work
            row = row + 1
            no = no + 1
        End If
    Next
    On Error GoTo 0
    importWorkingTickets = row
End Function

Public Function importDueAssignTickets(row As Integer, pre As String, dReport As String, dEnd As String) As Integer
    Dim t1 As Collection
    Dim query As String
    query = "<string>status!=closed&amp;owner=" & owner & "</string>"
    Set t1 = trac.queryTicket(query)
    Dim no As Integer
    no = 1
   
    On Error Resume Next
    For Each t In t1
        due_assign = due_close = complete = ""
        due_assign = t.Item("due_assign")
        due_close = t.Item("due_close")
        complete = t.Item("complete")
        If due_assign > dReport And due_assign <= dEnd Then '報告日以後で次回報告以前に開始する予定なら
            s.Cells(row, 2).value = pre & no & ". " & t.Item("summary") & "(" & t.Item("id") & ")"
            work = due_assign & "-" & due_close
            If complete <> "" Then work = work & "(" & complete & "%)"
            s.Cells(row, 4).value = work
            s.Cells(row, 4).HorizontalAlignment = xlRight
            row = row + 1
            work = ""
            work = t.Item("description")
            work = Replace(work, "[[BR]]", vbCrLf)
            s.Cells(row, 3).value = work
            row = row + 1
            no = no + 1
        End If
    Next
    On Error GoTo 0
    importDueAssignTickets = row
End Function

Sub createReport()
    '進捗報告という名前のシートを変数に設定する.
    Set s = Application.ActiveWorkbook.Sheets.Item("進捗報告")
    Dim dBefore As String
    Dim dReport As String
    Dim dNext As String
    Dim row As Integer
   
    dBefore = "2009/05/22" '前回報告日
    dReport = "2009/05/29" '報告日
    dNext = "2009/06/05" '次回報告日
    owner = "u-z" '担当者
    Set trac = New TracXMLRPC
    trac.init "http://localhost/trac", "test3", "admin", "admin"
    row = initSheet(dBefore, dReport, dNext) '
    s.Cells(row, 1).value = "1. 期間内にクローズ済みのチケット"
    row = importClosedTickets(row + 1, "1.", dBefore)
    s.Cells(row, 1).value = "2. 作業中のチケット"
    row = importWorkingTickets(row + 1, "2.", dReport, dNext)
    s.Cells(row, 1).value = "3. 開始予定のチケット"
    row = importDueAssignTickets(row + 1, "3.", dReport, dNext)
    s.Cells(row + 1, 1).value = "以上"
End Sub

確認手順

  1. あたらしいExcelファイルを作成
  2. VBEditorでTracXMLRPC.clsをインポート
  3. 上のサンプルをどこか(TishWorkBookとか)に貼り付け
  4. どれかのシート名を”進捗報告”に変更するか追加する
  5. 日付やowner等を適切に変更
  6. createReportを実行

でどうでしょう.

|

« TracXMLRPC.clsの使い方2 | トップページ | SVNリポジトリを複数のTracから共有し,post-commitでのコメントをそれぞれに振り分ける »

Trac」カテゴリの記事

VBA」カテゴリの記事

Excel」カテゴリの記事

XMLRPC」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: TracXMLRPC.clsを使って進捗報告のレポートを作成する例:

« TracXMLRPC.clsの使い方2 | トップページ | SVNリポジトリを複数のTracから共有し,post-commitでのコメントをそれぞれに振り分ける »