« Excel VBAでTrac(SQLite)にチケットを追加します | トップページ | MS-ProjectでTracと連携について考える »

2008年10月31日 (金)

Excel VBAでTrac(SQLite)にチケットを追加する。同時にカスタムフィールドも追加する

チケットとカスタムフィールドまでを一気に登録してしまうマクロを作ってみましょう。

カスタムフィールドの追加はチケットを追加した後に、ticket_changeとticket_customを追加します。

Sub appendTicket()
' ループを回ってチケットを追加
    Dim cnDatabase As ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim row As Integer
    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 * "
    Sql = Sql + "from ticket t "
   
    Worksheets("Sheet2").Select 'データはsheet2
    rs.Open Sql, cnDatabase, adOpenFowordOnly, adLockOptimistic
    Dim ticket_id As Long
    Dim createTime As Date
    Dim serialNow As Double
    Dim longNow As Long
   
    Dim customField As String
   
    row = 2 '2行目からデータ
            
    Do While ActiveSheet.Cells(row, 11).Value <> "" 'summaryに何かある場合追加する
        createTime = Now ' 現在の時間を取得します
        serialNow = createTime * 24 * 3600 - 2209161600# - 3600 * 9
        longNow = serialNow
        rs.AddNew 'レコードを追加します
            rs!Time = "" & longNow
            rs!changetime = "" & longNow
            rs!Status = "new"
            rs!Type = ActiveSheet.Cells(row, 1).Value
            rs!component = ActiveSheet.Cells(row, 2).Value
            rs!severity = ActiveSheet.Cells(row, 3).Value
            rs!Priority = ActiveSheet.Cells(row, 4).Value
            rs!owner = ActiveSheet.Cells(row, 5).Value
            rs!reporter = ActiveSheet.Cells(row, 6).Value
            rs!cc = ActiveSheet.Cells(row, 7).Value
            rs!Version = ActiveSheet.Cells(row, 8).Value
            rs!milestone = ActiveSheet.Cells(row, 9).Value
            rs!resolution = ActiveSheet.Cells(row, 10).Value
            rs!Summary = ActiveSheet.Cells(row, 11).Value
            rs!Description = ActiveSheet.Cells(row, 12).Value
            rs!Keywords = ActiveSheet.Cells(row, 13).Value
        rs.Update
   
        ' 追加したレコードのIDを取得します
        ' SQLiteで使えるいい方法があれば教えてください
        Sql2 = "SELECT max(t.id) "
        Sql2 = Sql2 + "from ticket t "
        Sql2 = Sql2 + "where changetime='" & longNow & "'"
        Dim rs2 As New ADODB.Recordset
        rs2.Open Sql2, cnDatabase
       
        Dim ticket As Integer '追加したチケットのID
        ticket = rs2.Fields(0).Value
        rs2.Close
       
        Dim name As String
        Dim reporter As String
        Dim newValue As String
       
        reporter = ActiveSheet.Cells(row, 6).Value
        j = 14 'ticketの項目が終わったところからはcustomfield
        Do While ActiveSheet.Cells(1, j).Value <> ""
            name = ActiveSheet.Cells(1, j).Value '1行目に項目名
            newValue = ActiveSheet.Cells(row, j).Value '実際の値
            If newValue <> "" Then
                '
                Dim rs3 As New ADODB.Recordset
                Sql = "SELECT * from ticket_custom"
                rs3.Open Sql, cnDatabase, adOpenFowordOnly, adLockOptimistic
                rs3.AddNew 'レコードを追加します
                    rs3!ticket = "" & ticket
                    rs3!name = name
                    rs3!Value = newValue
                rs3.Update
                rs3.Close

                Sql = "SELECT * from ticket_change"
                rs3.Open Sql, cnDatabase, adOpenFowordOnly, adLockOptimistic
                rs3.AddNew 'レコードを追加します
                    rs3!ticket = "" & ticket
                    rs3!Time = longNow
                    rs3!Author = reporter
                    rs3!Field = name
                    rs3!oldvalue = ""
                    rs3!newValue = newValue '履歴になるので時間が必要
                rs3.Update
                rs3.Close
            End If
            j = j + 1
        Loop
        Application.Wait (createTime + 1# / 24 / 3600) 'changetimeが重複しないように最大で1秒待ちます
   
        row = row + 1
    Loop

End Sub

sheet2にデータを準備します。N列以降はカスタムフィールドを追加します。例として、due_assignとdue_closeが書いてあります。

Tc

|

« Excel VBAでTrac(SQLite)にチケットを追加します | トップページ | MS-ProjectでTracと連携について考える »

Trac」カテゴリの記事

Excel」カテゴリの記事

コメント

コメントを書く



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


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



トラックバック


この記事へのトラックバック一覧です: Excel VBAでTrac(SQLite)にチケットを追加する。同時にカスタムフィールドも追加する:

» [Trac]チケットを一括でインポートする方法 [almost nearly dead]
同じくryuzeeさんところで話が出てました。 TracHacksの日本語誤訳まで書かれています。 まだ試せていませんが、Excel管理からTracへ移行する際の最初の山場になるポイントなので押さえておいた方が良さそうです。 『Tracのチケットを一括で外部からインポートする方法(決定... [続きを読む]

受信: 2009年1月13日 (火) 14時37分

« Excel VBAでTrac(SQLite)にチケットを追加します | トップページ | MS-ProjectでTracと連携について考える »