QLOOKアクセス解析
ホーム   »  チケット登録
Tag | チケット登録

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

RedmineのチケットをVBAで登録してみる

現場のWBSからチケット登録を行いたかったのでVBAで作成しました。
その時のサンプルを少し修正して雛型として公開します。
トラッカーやカテゴリ、チケットの親子関係等は
色々カスタマイズしているのですが、とりあえず以下のサンプルは固定値を入れているので
皆さんの環境に合わせてカスタマイズしてもらえれば良いと思います。

サンプルではredmineで利用しているDBとはODBC接続しています。

CSVからの登録などのプラグインはあるのですが
今回自作をしたのは、WBSから登録する際に単純にチケット登録
するだけでなく、フェーズ別にカテゴリ設定したり、
バージョンを設定したり、集計用にカスタムフィールドを設定したり・・
と色々な事をやりたかったので自作する事にしました。

◆バージョンの指定
versionsテーブルのidで指定します。

◆チケットの親子関係を作る場合
root_id、parent、lft、rgtを指定しないといけません。

◆担当者id、作成者id
usersテーブルのidと紐付きます。

◆優先度、プロジェクトID、ステータスID、チケット作成者ID
これらはWBSから登録時に、同じ値を設定するので
Excel上で共通設定として指定する形としています。
それぞれRedmineのテーブルとの紐付けは以下の通りです。

優先度:enumerations テーブルの type がIssuePriority
プロジェクトID:projects.id
ステータスID:issue_statuses.id
チケット作成者ID:users.id


Sub insertTicket()
' DB接続オブジェクト
Dim con As ADODB.Connection
Set con = New ADODB.Connection

' DB接続Open
' ここではDataSource名「dsredmine」を利用している。
' 個々の環境に合わせて下さい。
con.connectionString = "Provider=MSDASQL.1;Data Source=dsredmine"
con.Open

Dim start_date As String
Dim fixed_version_id As String
Dim root_id As String
Dim lft As String
Dim rgt As String
Dim subject As String
Dim assigned_to_id As String
Dim tracker_id As String
Dim category_id As String
Dim due_date As String
Dim parent_id As String
Dim description As String

'=================================
' 以下はツール実行時の情報を設定
'=================================
Dim updated_on As String
Dim created_on As String

'チケット作成日
created_on = Format(Date, "'yyyy-mm-dd ") & Format(Now, "hh:nn:ss'")

'チケット更新日
updated_on = Format(Date, "'yyyy-mm-dd ") & Format(Now, "hh:nn:ss'")

'===========================================
' 以下はインポートするExcelデータから取得する。
' とりあえず以下は固定値。固定値の部分をセル取得などにカスタマイズする。
'===========================================

'開始日
start_date = "'2011-11-25'"

'終了日
due_date = "'2011-11-30'"

'バージョン (versions の ID)
fixed_version_id = "7"

'ルートID
'親子関係のあるチケットの場合に継承のルートになるチケットのIDを設定。
'必ずしも直接の親チケットIDではないことに注意。
'継承関係が親子までの場合は parent_idと同じ値が設定される。
'親子関係がない場合は 自身のIDを設定。
root_id = "123"

'親チケットID
'初期値はNULL。親子関係がある場合は親チケットIDを設定。
'root_id と異なり直接の親のIDを指定する。
parent_id = "NULL"

'lft/rgt
'チケットの入れ子を表現
lft = "1"
rgt = "2"

'件名
subject = "'WBSのテスト'"

'担当者
assigned_to_id = userIdFromName("hogehoge")

'トラッカーID
tracker_id = "14"

'カテゴリーID
category_id = "1"

'説明
description = "'説明テスト'"


'=================================================
' 以下はチケット共通設定なので共通設定シートのようなものを
' 用意してそこから取得する。
'=================================================
Worksheets("ツール").Select

'優先度 (enumerations の type がIssuePriority)
Dim priority_id As String
priority_id = ActiveSheet.Range("D13").Value

'プロジェクトID (projects.id)
Dim project_id As String
project_id = projectIdSetting()

'ステータスID (issue_statuses.id)
Dim status_id As String
status_id = ActiveSheet.Range("D15").Value

'チケット作成者ID (users.id)
Dim author_id As String
author_id = ActiveSheet.Range("D16").Value

'=================================
' SQL文の生成
'=================================
Dim sql As String

sql = _
"INSERT INTO `issues` (`start_date`, `estimated_hours`, `priority_id`, `created_on`, `project_id`, `is_private`," & _
"`fixed_version_id`, `lock_version`, `root_id`, `lft`, `subject`, `assigned_to_id`," & _
"`updated_on`, `done_ratio`, `tracker_id`, `category_id`, `due_date`, `parent_id`, `description`, `status_id`," & _
"`author_id`, `rgt`) VALUES" & _
"(" + start_date + ", 0.0," & _
priority_id + "," & _
created_on + "," & _
project_id + "," & _
"0," & _
fixed_version_id + ", 0, " & _
root_id + "," & _
lft + ", " & _
subject + "," & _
assigned_to_id + ", " & _
updated_on + ", 0, " & _
tracker_id + "," & _
category_id + ", " & _
due_date + "," & _
parent_id + "," & _
description + "," & _
status_id + "," & _
author_id + ", " & _
rgt + ")"

' Insetr実行
con.Execute sql

' DB接続クローズ
con.Close
End Sub
スポンサーサイト

Redmineのチケット登録でのレコード生成調査

今の現場のお客様は独自でWBS管理(Excel)をされているので
Redmineからのインポート・エクスポートを行う必要があり、ExcelVBAでの実装を検討。
チケット登録でのレコード生成を調査したのでポイントを以下にまとめる。

・基本は issues テーブルのレコード生成。
 テーブルの詳細は本文の下に記載する。

・トラッカーIDやプロジェクトIDなどはそれぞれのテーブルのIDを指定するだけ

・ステータスIDは workflows テーブルで管理されているが
 
 指定するトラッカーによっては指定してはいけないID(利用不可)もあるので要注意。
 UIからだと選択できないですが、直接登録ではなんでも登録出来るので。

・先行するチケットや関連するチケットは issue_relations で管理される。

・チケットのウォッチャーを指定した場合は watchers にもデータ登録される。

・親子関係を作りたい場合、issues テーブルの lft・rgt 項目は要注意。
 このデータでチケットの入れ子関係を表現しています。
 以下の記事でとても分かりやすく説明されています。
 
 【Redmine】issuesテーブルのlft・rgtって?

・UI上でバージョンやカテゴリを追加した場合などはそれぞれの
 管理テーブルにもデータ生成されますが、今回の要件では動的に追加は無いので無視。

・添付ファイルをつける場合は attachments テーブルも生成する。
項目名
内容
関連するデータ
備考
id
チケットID。主キー。
 
 
tracker_id
トラッカーID
trackers.id
trackers.name
 
project_id
プロジェクトID
projects.id
projects.name
 
subject
題名
 
 
description
説明
 
 
due_date
期日
 
 
category_id
カテゴリーID
issue_categories.id
issue_categories.name
 
status_id
ステータスID
issue_statuses.id
issue_statuses.name
指定されたトラッカーによって
指定可能なステータスが変わる。
Workflowsテーブルで管理されている。
assigned_to_id
担当者
users.id
users.firstname
users.lastname
 
priority_id
優先度
enumerations.id
enumerations.type
enumerations.type
「IssuePriority」のもの
fixed_version_id
対象バージョン
versions.id
versions.project_id
versions.name
 
author_id
チケット作成者のid
users.id
users.firstname
users.lastname
 
lock_version
楽観的排他制御用ID
 
 
created_on
作成日
 
 
updated_on
更新日
 
 
start_date
開始日
 
 
done_ratio
進捗 %
 
 
estimated_hours
予定工数
 
 
parent_id
親チケットID
 
 
root_id
ルートとなるチケットのID
 
 
lft
チケットの入れ子を表現
 
チケットの入れ子(集合)を表す。
親子関係の場合、子チケットは親チケットの値の範囲に入るようにする。
rgt
チケットの入れ子を表現
 
 
is_private
プライベートチケットフラグ
 
0:OFF
1:ON
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。