RedmineでチケットをCSVから一括登録/更新するプラグイン

ぴろり上西 2009年02月03日

パワフルなCMSを98,000円で。

Movable Typeで承認フロー、会員サイト構築ができます。

 こんにちは。プラグイン作家の上西です(ぇー 今回、紹介するのはプラグインはプラグインでも、MovableType プラグインではなく Redmine のプラグインです。Perl を離れて Ruby です。しかもいきなりの Rails。わっかんねぇぇぇ(魂の叫び) ...と色々ありつつ、なんとか動くところまではできました。

 プロジェクトがキックオフすると、お決まりのタスクというのがたくさんあると思います。そういったタスクを CSV から一括で Redmine に登録できるようにしてみました。Redmine は標準で CSV への書き出しはあるんですが、読み込みの方がなかったのですよ。
 Excel などを使って、WBS からドバッと項目を洗い出し、担当者や期限日、予定工数をズザーッと流し込んで CSV に吐出し、このプラグインを使って一括でタスク登録できます。かなり便利みたいです(弊社社長談)

ライセンス

無償でご利用いただけます。

プラグインのダウンロード

redmine_importer のダウンロード (バージョン 0.0.3)

インストールと使い方

 ダウンロードして得られたファイルを vendor/plugins ディレクトリにコピーしてください。設定等は必要ありません。メニューに新しく CSV Import の項目が追加されます。

  • カラムの並びは Redmine が生成する CSV と同じです
  • CSV の 1 行目はタイトル行として無視されます
  • チケット番号を空欄にするとチケットを新規に作成します
  • チケット番号を入力すると、指定されたチケットを更新します
  • 担当者と起票者は名前ではなくログインIDを指定してください
  • カスタム フィールドには対応していません
  • 説明欄にはなんらかの文字列を入力してください。空だとチケット登録できません。
  • カラム指定等を間違っても正常終了したように見えますので、実際にチケットに登録されていることを確認してください

注意事項

投稿者 ぴろり上西 : 02/03

Movable Typeを利用したウェブサイト開発はお任せください!

100の企業が認めた成功へ導くCMS構築

スカイアークは創業以来6年間、Movable Typeを一貫して活用し、お客様の様々なウェブサイトをCMS化しました。MTを利用したウェブサイトはスカイアークにお任せください。

MT・CMS構築について詳しく見る

コメント(25)

CSVインポートを試してみましたが、Statusが322と320でどうしても取り込めません。エラーメッセージにはユーザマニュアルを読むように書いてありますが、マニュアルはどこから入手できますか。
Redmine0.8.0です。
-----------
CSV Import finished
CSV Filename : SampleTicket2.csv
Status : 320

Status indicates the result of importing. For its detail, see user manuals.

以上

マニュアルはまだ書けていません。申し訳ありません。

インポートされるCSVの以下のポイントをチェックして頂けますでしょうか?
1. ステータスの項目は既存の値になっていますか?
2. プロジェクト名は既存のプロジェクト名になっていますか?
3. トラッカーは既存のトラッカーの値になっていますか?
4. 担当者は既存ユーザのログイン名になっていますか?
5. 起票者は既存ユーザのログイン名になっていますか?

2個のチケットの読込みに成功するとステータスは322になります。

申し訳ありません、解決しました。
CSVデータの進捗率をnullとしてしまった事と、報告(row[16]) が不足していたことが原因でした。

ありがとうございました。

CSVインポートが使えるようになり早速、活用させてもらってますが、新規チケットを登録した時に、担当へのメール通知が行われないようです。

どこか設定を変更すべき箇所がありましたら、教えて下さい。

また、メール通知の機能が実装されていないようでしたら、是非、次回レビジョンアップの候補にお願いします。

すばらしいです。
0.8 にアップデートする価値がありますね。

CSV import で、2行の CSV を取り込んだのですが、説明分だけうまく取り込めません。
チケットは登録されて、開始日やタイトルは正しく取り込めています。
どの辺を追っていけばいいでしょうか。

申し訳ありませんでした。
自己解決しました。
issue.description ですが、こちらの環境では、ic.iconv(row[17]) ではなくて、
ic.iconv(row[16]) を参照していました。
フィールドをカスタマイズした時にずれてしまっていたようです。
お騒がせして申し訳ありませんでした。

仰るとおり、そこが原因です。
本当ならカスタムフィールドの分を自動で計算してほしいのですが、いかんせんスキル不足なので勘弁してやってください。申し訳ありません。

とても便利な Plug-in をご提供いただきありがとうございます。

#4 優先度
#7 カテゴリ
#8 Target version
も、インポート対象としたいため少し手を加えてみたところうまくいってそうでしたので、ご報告しておきます。

author = User.find_by_login(ic.iconv(row[9]))

# added import field
priority = Enumeration.find_by_name(ic.iconv(row[4]))
category = IssueCategory.find_by_name(ic.iconv(row[7]))
fixed_version = Version.find_by_name(ic.iconv(row[8]))

(中略)
#4 優先度
issue.priority_id = priority != nil ? priority.id : ''
#5 題名
issue.subject = ic.iconv(row[5])
#6 担当者
issue.assigned_to_id = assigned_to != nil ? assigned_to.id : ''
#7 カテゴリ
issue.category_id = category != nil ? category.id : ''
#8 Target version
issue.fixed_version_id = fixed_version != nil ? fixed_version.id : ''

うおー! ありがとうございます!
次のバージョンアップに是非組み入れさせて頂きます!!

上の記事でも、ありますが、
redmine_importer.0.0.2.zip (バージョン 0.0.2) で、
"説明" がインポートできませんでした。
ic.iconv(row[17]) を
ic.iconv(row[16]) に変更するとインポートできるように
なりました。
itaさんの現象とは逆のようですが...

tnさん
私も同じです。
ic.iconv(row[17]) を
ic.iconv(row[16]) に変更するとインポートできるようになりました。

Nobby さんから頂いたコードのマージと、tn さんから指摘があった説明欄について自動的にカラムを判断するように修正しました>0.0.3

すばらしいプラグインですね。早速ためさせてもらいました。

使っていて思ったのですが、これ、
誰でもすべてのプロジェクトのチケットの更新ができてしまうので怖いのですが…。

でも大変便利なので、運用でカバーして
とりあえず使っていこうと思います。

すばらしいプラグイン、ありがとうございます。
拝見させていただきました。
Redmine初心者なので、大変参考になりました。
基本的な質問で恐縮なのですが、チケットを登録するには、

@issue = Issue.new
@issue.subject = "hoge"
(など、いくつかのフィールドを設定)
@issue.save

で、できるのかと読み取れたのですが、自分でやってみると、
@issue.save の返り値が false で、チケットが登録できません。
チケット登録に必須のことって、何なのでしょうか?
教えていただければ幸いです。

いやー、同じく私もRedmine初心者なので、参考になるかわかりませんが、
redmine_importer を作る過程で判ったことは、subject, project_id, tracker_id, status_id, description は最低限なんらかの値をセットしないと issue.save できないようでした。

情報ありがとうございます。
教えていただいた値をセットしたらチケット発行ができました。
redmine_importerも動作しました。
ありがとうございました。

皆さん優秀な方ばかりで、初歩的な質問で恐縮です。フィールドをカスタマイズしている為か、以下の2列に値が入っていると、CSVファイルのその行だけ取り込みができません。
#10 開始日 issue.start_date = row[10]
#11 期限日 issue.due_date = row[11]
みなさん、こちらの環境では、(例えば)ic.iconv(row[17]) ではなくて、ic.iconv(row[16]) を参照していました。と書かれていますが、フィールドをカスタマイズした時のずれはどのようにしたら、確認できるのでしょうか。
 ちなみに、吐き出したCSVをそのまま読ませても上記の欄に値が入っている行は取り込みに失敗してしまいます。
 そんな簡単に説明できる内容ではないのでしょうか。

私も少しはまりました。
どうやら
#10 開始日 issue.start_date = row[10]
#11 期限日 issue.due_date = row[11]
この部分ですが、時刻のフォーマットを特に意識していませんので、それでエラーが発生しているようです。
CSVファイル内の時刻について、Redmineのエクスポート機能を使うと
2008年06月02日
と言ったフォーマットで出力されますが、この書式ではそのままインポートできません。
2008/6/2
こんな時刻に変換するようにしたらどうでしょうか。

CSVをインポートするプラグインは以下でも公開されていますね。
いちおう参考までに

http://www.martinliu.info/2009/04/redmine_importer-redmine-csv-import-plugin/


CSVのエクスポート時にSJIS設定にしているため、データを修正してインポートした際に、①、②などの記号があると、インポートに失敗してしまいます。

少しソースを追ってみるとUTF-8にエンコードするところでうまく動いていないみたいです。
なにか対応方法はございませんでしょうか?

こんにちは、はじめまして。
こちらのプラグインをど導入させていただきました。一括登録などにはとても便利ですね。

皆さんのような細かいレポートが出来ずに恐縮なのですが、1点。

ファイル名を指定せず、テキストフィールドを空にしたまま送信ボタンを押すと、Rubyのエラーメッセージがそのまま出てしまいます。
ユーザにはちょっとびっくりする動作なので、エラーメッセージを表示しつつ元のページに返してあげる、という動作のほうがいいかなと思います。

異なるプロジェクトの同名バージョンのチケットを登録した場合に、TargetVersionの割り当て上手くいかないようです
下記のように修正してとりあえず動きましたのでご報告します
app\controllers\importer_controller.rb(36行目)
fixed_version = Version.find_by_name(ic.iconv(row[8]))

fixed_version = Version.find_by_name_and_project_id(ic.iconv(row[8]), project.id)

はじめまして。最近Redmineを使い始めた初心者です。
こちらのプラグインを導入して、さっそく使わせていただきました。
そこで、超初心者的な質問で申し訳ないですが、
更新はできるのですが、新規登録ができません。
Redmineからエキスポートしたexcelファイルを編集して、
1列目を空白にして、インポートしようとしています。
何か注意点がありましたら、教えていただきたく、よろしくお願いいたします。

インポート処理が完了した後に、読み込みに成功したチケットの数などがレポートされます。その値はどのようになっていますでしょうか? 1行目はカラムのタイトルとして読み飛ばされます。

回答ありがとうございます。
さっそく、2行のデータで試してみました。
1行目はタイトル。
2行目は新規登録のためのデータ(1列目が空)。
3行目は更新のためのデータ。
結果のメッセージは以下です。
3行目の更新はOKでしたが、やはり新規登録ができませんでした。
ご指導のほど、よろしくお願いいたします。

CSV Import finished
CSV Filename : export005.csv
Lines : 4
Status :

Line 2 : Failed saving.

お問い合わせはこちらから お電話でのお問い合わせ03-5475-5101

MTエンジニアブログ

MTCMS Smartキャンペーン!
承認フロー付きCMS「MTCMS Smart(98,000円)」をお買い上げの方、MTライセンス1本がタダに!

配布プラグイン一覧

MultiFileUploader
複数ファイルを一括でアップロードできるMovable Typeプラグイン
ParentalInclude
MT5でウェブサイトとブログのテンプレート連携を便利にするプラグイン
DuplicateEntry
ブログ記事を複製または移動するMovableTypeプラグイン
NotifyAnythingChanged
何かが起きたらメールで通知するMovableTypeプラグイン
rssEntry
取込んだRSSをエントリとして書き出すMovableTypeプラグイン
AutoTagging
面倒な記事のタグ付けを自動化する
FutureRebuild
日時を指定してページを再構築する
EntryImExporter
エントリをCSVに書出したり、CSVから一括登録するMovableTypeプラグイン
MailPack
Movable Typeで簡単携帯投稿!メール投稿プラグイン
DirectoryUtility
カテゴリ・フォルダの階層を表示したり、親フォルダを表示したり、何かと便利なプラグイン
CSVList
CSVデータを整形して表示する
PageBute
静的ページ用ページ分割プラグイン

注目記事

RSS

ページの先頭へ戻る