Whenever I do large data uploads into JIRA, I often find that I have a number of tickets that require a parent/child relationship. That is, some of my tickets get imported as tasks, and I want them to be subtasks. To solve this problem, I wrote a simple Watir script that will subtask out all my tickets for me after upload. There’s nothing that special about it, but it can be quite a time saver.
By submitting your personal information, you agree that TechTarget and its partners may contact you regarding relevant content, products and special offers.
The only assumption I have in my script is that you’ll have a hyphen in your subtasks and no hyphens in your parent tasks. When I import data like this, I often following the pattern “<parent summary> – <child summary>” for my Summary fields when I import. For example, a parent ticket might be “Write a book on testing” and a couple of subtasks for that ticket might be “Write a book on testing – Chapter 1” and “Write a book on testing – Chapter 2.”
The first step is to setup a query of only the tickets you want to task and subtask. Often, this is as simple as creating a query in the Issue Navigator where you select the project, Issue Type, and whatever other compoents/values uniquely identify that subset of data. I’ll then sort by Summary, so my parent tickets will always be before my child tickets — again because of my naming convention.
Below, the link to that filter is where you start your browser in the second line of code. In the third line, I simply click on the first result returned. Then the code loops through all the tickets and establishes the parent/child relationships as needed.
require 'watir' b = Watir::Browser.start("http://jira..com/secure/IssueNavigator.jspa?reset=true&jqlQuery=project...etc...+ORDER+BY+summary+ASC%2C+priority+DESC") b.link(:text, "KEY-2332").click for i in (1..800) if b.table(:index, 9).table(:index, 2).cells.text.split('-') == nil then ticket = b.url.split("/")[-1] else b.link(:text, "Convert").click b.text_field(:name, "parentIssueKey").set ticket b.button(:name, "Next >>").click b.button(:name, "Next >>").click b.button(:name, "Finish").click end b.link(:text, "Next >>").click end