スポンサードリンク
所属組織のredmine4.1バージョンアップ
やったー
チケットCSV取込はツールが変わるけど
Redmineチケット★一括★を使えば
大丈夫!
と思っていたのですが、
Redmineチケット★一括★は作りがしっかりしていて
レスポンスを考慮しているため、ランダムに取り込まれるということが発覚
チケットの並び順を考慮した運用してるんスよ、うち
そして、標準機能のCSV取込が何故か動かず・・・
うーん
GASで書くか
GSuite利用しまくりの会社だから、
RestApi使えばいけるやろうし
あんまりコードを書く人間ではないのですが
作ってみました
スプレッドには、項目を配置
悩んだのは日付項目でした
どうやら
‘2020-04-10
と、シングルコーテーションがいるみたい
期日自動算出を行っているので、こんな形になりました
//メイン処理
function mainFunction() {
var result = Browser.msgBox("実行しますか?", Browser.Buttons.OK_CANCEL);
if (result == "cancel"){
Logger.log("canceled...")
}else{
Dateset()
createIssue()
}
Browser.msgBox("処理終了です");
}
//メニューに追加
function onOpen(){
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('メニュー');
menu.addItem('Redmineにチケット作成', 'mainFunction');
menu.addToUi();
}
//日付変換
function Dateset(){
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('チケット用レコードシート');
for(var i = 2; i <= sheet.getLastRow(); i++){
if (sheet.getRange(i,28).getValue()=="")
{}
else{
start_date=new Date(sheet.getRange(i,28).getValue());
start_date = Utilities.formatDate(start_date,'JST', 'yyyy-MM-dd');
sheet.getRange(i, 13).setValue("'" + start_date);
console.log(start_date);
}
if (sheet.getRange(i,29).getValue()=="")
{}
else{
due_date=new Date(sheet.getRange(i,29).getValue());
due_date= Utilities.formatDate(due_date,'JST', 'yyyy-MM-dd');
sheet.getRange(i, 14).setValue("'" + due_date);
}
}
}
//チケット作成
function createIssue() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //1. 現在のスプレッドシートを取得
var sheet = spreadsheet.getSheetByName('チケット用レコードシート');
var redmine_url = 'https://xxxxxx.xx.jp/issues.json';
var project_id = 'プロジェクト名'
var owner = 'ユーザID'
for(var i = 2; i <= sheet.getLastRow(); i++){
var title=sheet.getRange(i,7).getValue();
var Setsumei=sheet.getRange(i,27).getValue();
var tracker=sheet.getRange(i,3).getValue();
var start_date=sheet.getRange(i,13).getValue();
var due_date= sheet.getRange(i,14).getValue();
var assigned_to_id=sheet.getRange(i,9).getValue();
var dainittei=sheet.getRange(i,24).getValue();
var issue = {
'subject': title,
'description': Setsumei,
'tracker_id': 3,
'status_id': 1,
'start_date':start_date,
'due_date':due_date,
'assigned_to_id':assigned_to_id,
'custom_fields':[{'id':4,'value':dainittei}],
}
var payload = {
'issue': issue,
'project_id': project_id,
};
payload = JSON.stringify(payload);
var user = 'user';
var pass = 'pass';
var headers = {
"Authorization" : " Basic " + Utilities.base64Encode(user + ":" + pass),
'X-Redmine-API-Key': 'APIキーを入れる',
'X-Redmine-Switch-User': owner,
'Content-Type': 'application/json',
};
var options = {
'method': 'POST',
'headers': headers,
'payload': payload,
'contentType': 'application/json',
'muteHttpExceptions': true
};
var response = UrlFetchApp.fetch(redmine_url, options);
}
return response;
}
redmine_url、project_id などは
環境に合わせて設定してください
RestAPIを使っています キー取得方法はこちらを
シートの座標(i,5)なども合わせてください
dainittei はカスタムフィールドです
誰かの参考になれば