JIRAで複数の課題の変更履歴をシートに書き出したい
ではすべての変更履歴を取得しました。
今回はfieldが「status」の場合だけシートに書き出したい。
作成時のステータス取得について
今回は下記の方法で取得しています。
- 作成時の配列を以下のように用意しておく
- var firstLine = [key, "status", currentStatus, "-", issueCreated];
- 変更履歴がない場合
- 現在のステータスをfromの位置(配列の2番目)に代入します
- 変更履歴がある場合
- 最初の変更履歴からfromの値を取得して代入します
コード.gs
var ISSUE_URL = 'https://SITENAME.atlassian.net/rest/api/2/issue/';
var ss_url = "https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0";
/************************************
これを実行する
************************************/
function getIssuesHistories() {
var keys = ["KT-12", "KT-13", "KT-14"];// 対象の課題キーたち
var arrays = [];
for(var i = 0; i < keys.length; i++) {
var key = keys[i];
getIssueHistories(key);
}
}
/************************************
受け取った課題keyをgetHistoriesに渡して結果をシートに書き込む
************************************/
function getIssueHistories(key){
var response = getHistories(key);
var jobj = JSON.parse(response);
var histories = jobj["changelog"]["histories"];
var issueCreated = returnFormatDate(jobj["fields"]["created"]);
var currentStatus = jobj["fields"]["status"]["name"];
var arrays = [];
var firstLine = [key, "status", currentStatus, "-", issueCreated];// この課題の最初の配列を用意する(changelogは変更履歴なので、作成時の記録は含まれないためここで作っておく)
for(var i = 0; i < histories.length; i++) {
var history = histories[i];
var created = returnFormatDate(history["created"]);
var items = history["items"];
for(var j = 0; j < items.length; j++) {
var item = items[j];
var field = item["field"];
var from = item["fromString"];
var to = item["toString"];
if(field === "status") {
arrays.push([key, field, from, to, created]);
}
}
}
// changelogがなければ現在のステータスでよいが、変更された場合は変更前のfromが最初のステータスになるのでここで書き換える
if(arrays.length >= 2) {// arraysの初期lengthは1で、changelogが増える度に+1となるため、2以上なら
firstLine[2] = arrays[1][2];// 最初の配列の2番目である"from"を書き換える
}
arrays.push(firstLine);// 最初の行をarrays配列に追加する
setValuesToSheet(arrays);
}
/************************************
履歴を取得して返す
************************************/
function getHistories(key) {
var options = {
contentType: "application/json",
headers: {"Authorization": " Basic " + getProp("token")}
};
var url = ISSUE_URL + key + '?expand=changelog';
var response = UrlFetchApp.fetch(url, options);
return response;
}
/************************************
シートに書き込む
************************************/
function setValuesToSheet(arrays){
var sheet = SpreadsheetApp.openByUrl(ss_url).getSheets()[0];
var last_row = sheet.getLastRow();
var start_row = last_row + 1;
var start_col = 1;
var num_rows = arrays.length;
var num_cols = arrays[0].length;
var range = sheet.getRange(start_row, start_col, num_rows, num_cols);
range.setValues(arrays);
}
/************************************
日付をフォーマットして返す
************************************/
function returnFormatDate(date) {
return Utilities.formatDate(new Date(date), 'Asia/Tokyo', 'yyyy/MM/dd/HH:mm:ss');
}
/************************************
受け取ったkeyの値をスクリプトのプロパティから返す
************************************/
function getProp(key) {
return PropertiesService.getScriptProperties().getProperty(key);
}
|
関連記事
JIRAで複数の課題の変更履歴をシートに書き出したい
