使用 Google Apps 脚本让 JIRA Rest API 将问题单字段值拉入 Google Sheet

问题描述 投票:0回答:1

我想自动化我一直在为每周会议手动创建的 Google 表格,该表格显示过去 15 天内未更新的项目中的问题。运行脚本时,尽管没有出现错误,但没有任何内容写入 Google 表格。

function getJiraIssues() {
  var username = "<my_jira_username>";
  var apiToken = "<my_jira_password>";
  var jqlQuery = "project=xyz AND issuetype = Bug)";

  var sheet = SpreadsheetApp.getActiveSheet();
  var headers = sheet.getRange(1, 1, 1, 8).getValues()[0];

  var options = {
    'method': 'get',
    'contentType': 'application/json',
    'headers': {
      'Authorization': 'Basic ' + Utilities.base64Encode(username + ':' + apiToken)
    },
    'muteHttpExceptions': true
  };

  var url = 'https://<my_jira_instance>.jira.com/rest/api/2/search?jql=' + encodeURIComponent(jqlQuery);

  var response = UrlFetchApp.fetch(url, options);

  if (response.getResponseCode() === 200) {
    var data = JSON.parse(response.getContentText());

    var issues = data.issues.map(function(issue) {
      var issueData = {};

      issueData['Issue Summary'] = issue.fields.summary;
      issueData['Assignee'] = issue.fields.assignee ? issue.fields.assignee.displayName : '';
      issueData['Issue Key'] = issue.key;
      issueData['Issue Type'] = issue.fields.issuetype.name;
      issueData['Component/s'] = issue.fields.components.map(function(component) {
        return component.name;
      }).join(', ');
      issueData['Status'] = issue.fields.status.name;
      issueData['Created'] = issue.fields.created;
      issueData['Updated'] = issue.fields.updated;

      return issueData;
    });

    var row = sheet.getLastRow() + 1;
    var numRows = issues.length;
    var numCols = headers.length;

    sheet.getRange(row, 1, numRows, numCols).setValues(issues.map(function(issue) {
      return headers.map(function(header) {
        return issue[header];
      });
    }));
  }
}

我已经 参考了其他项目 寻求做类似的事情,所以我相信我正在尝试做的事情最终是可能的,但仍然在某个地方遇到了障碍。并且没有错误地尝试追查,我不太确定是什么坏了。

google-apps-script google-sheets jira-rest-api
1个回答
0
投票

这是你的代码吗?代码本身有效,但它希望您的工作表中已经有标题。如果您没有标题,那么它只会返回一个充满

undefined
值的数组,这不会将任何数据写入工作表。关键是这部分:

    sheet.getRange(row, 1, numRows, numCols).setValues(issues.map(function(issue) {
      return headers.map(function(header) {
        return issue[header];
      });
    }));

这将获取第 1 行中每一列的名称(存储在

headers
变量中),并尝试在 Jira 返回的
issue
对象数组的每一项中找到其对应的值。尝试添加一个标题行,其值对应于
issueData
键,如下所示:

我制作了一个具有像

issueData
结构的测试对象,它对我有用。我实际上并没有连接到 Jira,但如果它仍然不起作用,请尝试记录您的
response.getContentText()
以查看它是否确实有数据,因为它可能会返回
200
并且仍然不会返回您期望的对象。让我知道它是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.