aristotelisch
7/6/2015 - 10:58 AM

jiraRefreshTickets.js

// URL for Jira's REST API for issues
var getIssueURL = "https://[Your Jira host]/rest/api/2/issue/";

// Personally I prefer the script to handle request failures, hence muteHTTPExceptions = true
var fetchArgs = {
  contentType: "application/json",
  headers: {"Authorization":"Basic [Your BASE64 Encoded user:pass]"},
  muteHttpExceptions : true
};

/** 
 * Add a nice menu option for the users.
 */
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Refresh Ticket Data",
    functionName : "refreshTickets"
  }];
  sheet.addMenu("Jira", entries);
};

/**
 * Make a request to jira for all listed tickets, and update the spreadsheet 
 */
function refreshTickets(){
  // Pull the bits and pieces you need from the spreadsheet
  var sheet = getTicketSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  // Show the user a friendly message
  Browser.msgBox("Jira Tickets","Updating " + numRows + " tickets",Browser.Buttons.OK);

  for (var i = 1; i < numRows; i++) {
    var row = values[i];
    var ri = i + 1; // Set the cell row index
    var httpResponse = UrlFetchApp.fetch(getIssueURL + row[0], fetchArgs);

    if (httpResponse) {
      switch(httpResponse.getResponseCode()){
        case 200:          
          var data = JSON.parse(httpResponse.getContentText());

          // Check the data is valid and the Jira fields exist
          if(data && data.fields) {
            // Set some basic ticket data in your spreadsheet
            rows.getCell(ri, 2).setValue(data.fields.issuetype.name);
            rows.getCell(ri, 3).setValue(data.fields.reporter.displayName);
            rows.getCell(ri, 4).setValue(data.fields.assignee.displayName);
            rows.getCell(ri, 5).setValue(data.fields.summary);
          }
          else {
            // Something funky is up with the JSON response.
            resetRow(i,"Failed to retrive ticket data!");
          }
          break;
        case 404:
          rows.getCell(ri, 5).setValue("This ticket does not exist");
          break;
        default:
          // Jira returns all errors that occured in an array (if using the application/json mime type)
          var data = JSON.parse(httpResponse.getContentText());
          rows.getCell(ri, 5).setValue("Error: " + data.errorMessages.join(","));
          break;
      }
    }
    else {
      Browser.msgBox("Jira Error","Unable to make requests to Jira!", Browser.Buttons.OK);
      break;
    }
  }
}