3 回答
- 321
今まさに同じ事がしたくて、テストしていたところでした。子タスク、追加したいですよね。
ちょっと手間ですが、以下の方法でのCSVインポートで既存課題に新規の子課題作成が出来ました。(管理者インポートですが…)
Issue IDを使った課題作成と、Issue Keyを使った課題の更新を併用記載したCSVインポートする方法です。
マッピングはこんな感じ
途中Issue IDを1,2,3,4,5...としていたら別の課題と認識されて困ってましたが、以下 Kengo Ohsakiさんの回答の以下で解決しました。Issue IDにインポート日付入れるとかで回避ですかね。
課題ID は課題キーとは別にユニークのIDを振る必要があります。ここで指定した値は正確にはカスタムフィールドのExternal issue IDというフィールドに格納されています。
補足ですが、新規課題作成と更新課題は同一プロジェクトである必要があるようです。
プロジェクトAのCSV新規作成しつつ、プロジェクトBの課題にリンクを張ろうとしたら失敗しました。
e.x. SAMPLEプロジェクトの課題をインポートしつつ、DEMOプロジェクトの課題キー:DEMO-1を更新かけてリンクを張ろうとしたら既存課題SAMPLE-1にインポートした課題のリンクが張られたという具合。課題キーの前半無視で番号だけ引っ張られた感じですかね
コメントを追加... - 210
既存の課題を指定ということなので、恐らくは管理者側のCSVインポートを利用されているのではと思いますのでそれを前提として…(JIRA 6.3 以降ではユーザー側でも課題作成のみCSVでできるようになりましたが、課題の更新はできないので…)
ご認識の通り...テスト 2.csv のようなファイルで
マップするフィールドとして選択できるリンクに「Link "親子リンク(WBS Gannt)"」に対して
親課題のIDを指定してすると「インポートして作られた課題」が「リンクとして指定した課題」の「親」になってしまいます。
これを指定する方法はないので…
樋口晃-san 紹介されていたエントリー「https://www.ricksoft.jp/blog/archives/289/」の通り
テスト.csv のようなファイルフォーマットで以下のようなマッピングすれば
親・子の関係も期待する形になるのではと思います…
ただし親課題の横に子課題の課題IDを列挙する必要があります。
課題ID は課題キーとは別にユニークのIDを振る必要があります。ここで指定した値は正確にはカスタムフィールドのExternal issue IDというフィールドに格納されています。
もし方向が逆でインポートされてしまった課題を一括で直したいという話であれば…
以下QAが参考になるかと思いますが、手動以外では技術的な何かしらテクニックが必要になります。
たとえば、リンク名から恐らくWBSガントチャートを導入されていると思うので
スケジュール機能では任意のスクリプトを複数の課題に実行ができることを利用して…
スケジュールタスクに以下のようなスクリプトを指定して、一括で逆にしてしまうということもあるかもしれません。
import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.issue.Issue; import com.atlassian.jira.issue.link.IssueLinkManager; import com.atlassian.jira.issue.link.IssueLink; import com.atlassian.jira.issue.link.IssueLinkType; IssueLinkManager issueLinkManager = ComponentAccessor.getIssueLinkManager(); /* 課題の内部リンク課題一覧 */ for (IssueLink inwardLink : issueLinkManager.getInwardLinks(issue.getId())) { IssueLinkType inwardLinkType = inwardLink.getIssueLinkType(); if (inwardLinkType == null) { continue; } String inwardLinkTypeName = inwardLinkType.getName(); if (inwardLinkTypeName != null && inwardLinkTypeName.length() > 0) { /* 内部リンク課題 */ Issue sourceIssue = inwardLink.getSourceObject(); if (sourceIssue != null) { issueLinkManager.createIssueLink(issue.getId(), sourceIssue.getId(), inwardLinkType.getId(), null, issue.getAssignee()); issueLinkManager.removeIssueLink(inwardLink, issue.getAssignee()); } } }
簡単に頭で考えただけのスクリプトですので必ず検証をしてください。簡単な親・子だけであれば問題ないですが、親・子・孫…など複雑な親子関係がある場合は上記ではうまくいきません。
参考:https://rssupport.atlassian.net/wiki/pages/viewpage.action?pageId=20283404
参考にならないコメント失礼しました。
- kazuhiro kurabayashi
コメントありがとうございます(管理者でもソフトエンジニアでもないメンバーが使うケースを想定しています。)
#私は管理者で今回は全部課題作ってからRESTで一気にリンク張っちゃいましたけど。
管理者でなくても「CSVからの課題インポート」でリンクは張れるかと(作成画面の項目に「リンク」の追加が必要ですが)https://confluence.atlassian.com/jirakb/how-to-import-issue-links-from-a-csv-file-as-a-non-admin-user-830474094.html
- Kengo Ohsaki
管理者でもソフトエンジニアでもないメンバーが使うケースを想定しています。)
なるほど。
私は管理者で今回は全部課題作ってからRESTで一気にリンク張っちゃいましたけど。
RESTであれば色々と機械的にできていいですね!
ただエンジニア以外はRESTは難しいのでCSVでできたらいいですよね...
管理者でなくても「CSVからの課題インポート」でリンクは張れるかと(作成画面の項目に「リンク」の追加が必要ですが)
そうですね。既存課題というところにどちらか少し判断に迷ってしまいすみませんでした。
コメントを追加... - 210
私もこちらのブログを書いた時に、逆にできたら便利だなあと思いました。出来る方法が有ったら、知りたいです。親課題の横に、子課題のIDを列挙するのは面倒ですね。
- kazuhiro kurabayashi
すばやい返答&リンクありがとうございます。逆にする既知のやり方はないということですね。。。
- 樋口晃
私は知らないのですが、どなたかが答えて頂けると嬉しいです。
- ohnuki
本件は個別にお話しさせてください。
コメントを追加...
現象
JIRAではCSVをつかったインポートでリンク先の指定ができる。
WBSのリンクを張る場合、マップするフィールドとして選択できるリンクに「Link "親子リンク(WBS Gannt)"」がある。
これでインポートすると、「インポートして作られた課題」が「リンクとして指定した課題」の「親」になる。
質問
これを「子」にする方法はありませんか?
解決したい課題
既存の課題を検討し、さらにブレークダウンして多数の課題をあとから追加する作業を容易に行いたい。