質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

4614閲覧

trelloので新しく設定したカードにチェックリストが反映できない

Kodanosuke

総合スコア42

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2019/01/13 14:12

前提・実現したいこと

trelloのボード内にあるリストに含まれるカードの内容を別のリストのカードに反映させるプログラムを書こうとしています。
日付や担当者、タイトルなどはうまく移せているのですが、チェックリストが移せません。どのようにしたらチェックリストも反映されるようになるのでしょうか。ご教授いただければ幸いです。
よろしくお願いいたします。

発生している問題・エラーメッセージ

特になし。反映されないということがエラーといえばエラーです。

該当のソースコード

GoogleAppScript

1function setTrello(){ 2 3 var ssheet = SpreadsheetApp.getActiveSpreadsheet(); 4 var sheet = ssheet.getSheetByName('改修後'); 5 6 //変数を設定する 7 var alldata = sheet.getRange(sheet.getLastRow(), 3 ,1 ,sheet.getLastColumn()).getValues(); 8 9 //--本番日程 10 var date = new Date(alldata[0][5]) 11 //--マスター発送日 12 var depdate = new Date(alldata[0][11]) 13 14 15 const trelloKey = "XXXXX";//keyを入力してください 16 const trelloToken = "XXXXXX";//tokenを入力してください 17 const userName = "kodanosuke";//user nameを入力してください 18 const boardID = 'XXXXXXXX' 19 20 //リストのIDと名前の一覧を取得 21 var url = 'https://trello.com/1/boards/' + boardID + '/lists?key=' + trelloKey + '&token=' + trelloToken 22 var res = UrlFetchApp.fetch(url, {'method':'get'}); 23 var list = JSON.parse(res.getContentText()); //jsonとして保存します 24 25 var listNum = list.length; 26 27 28 //---torelloのカード一覧を取得し、必要な情報だけ抜き出す 29 var cards = []; 30 31 var count = 0 32 for(var j = 0;j < listNum;j++){ 33 var url = "https://trello.com/1/lists/" + list[j]['id'] + "/cards?key=" + trelloKey + "&token=" + trelloToken; 34 var res = UrlFetchApp.fetch(url, {'method':'get'}); 35 var card = JSON.parse(res.getContentText()); 36 var cardNum = card.length 37 38 //締切リストを作成する 39 var due = new Array(cardNum) 40 due[4] = new Date(date.setDate(date.getDate() -14) ) 41 due[5] = new Date(date.setDate(date.getDate() -7) ) 42 due[6] = new Date(date.setDate(date.getDate() -7) ) 43 due[7] = new Date(date.setDate(date.getDate() +1) ) 44 due[8] = new Date(date.setDate(date.getDate() +1) ) 45 due[9] = new Date(date.setDate(date.getDate() +3) ) 46 due[10] = new Date(depdate.setDate(depdate.getDate() -14) ) 47 due[11] = new Date(depdate.setDate(depdate.getDate() -7) ) 48 due[12] = new Date(depdate.setDate(depdate.getDate() -3) ) 49 due[13] = new Date(depdate.setDate(depdate.getDate() -7) ) 50 due[14] = new Date(depdate.setDate(depdate.getDate() -14) ) 51 due[15] = new Date(depdate.setDate(depdate.getDate()) ) 52 due[24] = new Date(date.setDate(date.getDate() -14) ) 53 due[25] = new Date(date.setDate(date.getDate() -7) ) 54 due[26] = new Date(date.setDate(date.getDate() +1) ) 55 due[27] = new Date(date.setDate(date.getDate() +21) ) 56 due[28] = new Date(date.setDate(date.getDate() ) ) 57 due[31] = new Date(date.setDate(date.getDate() -14) ) 58 due[32] = new Date(date.setDate(date.getDate() -7) ) 59 due[33] = new Date(date.setDate(date.getDate() +1) ) 60 due[34] = new Date(date.setDate(date.getDate() +3) ) 61 due[35] = new Date(depdate.setDate(depdate.getDate() -21) ) 62 due[36] = new Date(depdate.setDate(depdate.getDate() -14) ) 63 due[37] = new Date(depdate.setDate(depdate.getDate() -7) ) 64 due[38] = new Date(date.setDate(date.getDate() -21) ) 65 due[43] = depdate 66 due[44] = new Date(depdate.setDate(depdate.getMonth() + 1 ) ) 67 due[45] = new Date(date.setDate(date.getDate() -21) ) 68 due[46] = new Date(date.setDate(date.getDate() +3) ) 69 due[47] = new Date(date.setDate(date.getDate() +21) ) 70 due[48] = new Date(date.setDate(date.getDate() -7) ) 71 72 //必要なデータのKeyを指定して値を取得する 73 for(var i = 0;i < cardNum;i++){ 74 75 count = count+1 76 77 var name = card[i]['name']; 78 var idMembers = card[i]['idMembers']; 79 var dateLastActivity = card[i]['dateLastActivity']; 80 var shortUrl = card[i]['shortUrl']; 81 var idChecklists = card[i]['idChecklists'] 82 var desc = card[i]['desc'] 83 84 //取得したここのデータをまとめて、ひとつのカード情報としてまとめる 85 var card1 = [list[j]['name'],name, idMembers, dateLastActivity, shortUrl,idChecklists,due[count]]; 86 87 cards.push(card1) 88 89 } 90 91 92 93 } 94 95 //---trelloリストを作成する 96 var boardIDto = '5c011c070429520381ec50c9'; 97 var name_group = alldata[0][0] 98 var urlSetList = 'https://api.trello.com/1/boards/' + boardIDto + '/lists/?key=' + trelloKey + '&token=' + trelloToken; 99 var optionsList = { 100 'method' : 'post', 101 'muteHttpExceptions' : true, 102 'payload' : { 103 'name' : name_group + '様向けのリスト', 104 'pos' : 'top' 105 } 106 } 107 UrlFetchApp.fetch(urlSetList, optionsList); 108 109 //---trelloカードを作成する 110 var on = 1 111 112 113 var urlGetList = 'https://trello.com/1/boards/' + boardIDto + '/lists?key=' + trelloKey + '&token=' + trelloToken 114 var resGetList = UrlFetchApp.fetch(urlGetList, {'method':'get'}); 115 var listlist = JSON.parse(resGetList.getContentText()); //jsonとして保存します 116 117 var plans = sheet.getRange(sheet.getLastRow(), sheet.getLastColumn()-6, 1, 7).getValues() 118 var plansNum = [22,7,15,1,1,1,1] 119 var header = ['コンサート撮影テンプレート','コンサート写真撮影テンプレート','コンサート録音テンプレート','スコアディレクター','高音質録音パック','写真撮影プラン','印刷物セット'] 120 121 var nande = [plans[0][0] == 'on'] 122 for(var rep = 0;rep<7;rep++){ 123 if(rep == 0){ 124 if(plans[rep][0] == 'on'){ 125 for(var l = 0;l<plansNum[0];l++){ 126 var listId = listlist[0]['id']; 127 var url = 'https://api.trello.com/1/cards/?key=' + trelloKey + '&token=' + trelloToken; 128 var options = { 129 'method' : 'post', 130 'muteHttpExceptions' : true, 131 'payload' : { 132 'name' : cards[l][1], 133 'desc' : 'This is test.', 134 'due' : cards[l][6], 135 'idList' : listId, 136 'urlSource' : '', 137 'idMembers':cards[l][5][0], 138 'idChecklists':cards[l][2][0] 139 } 140 } 141 142 Logger.log(UrlFetchApp.fetch(url, options)); 143 } 144 145 } 146 } 147 }

試したこと

配列の受け渡し方を変えたりしましたがうまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

勝手な推測ですが、チェックリストは新たに作成しないといけないのでは?と思いました。
チェックリストをコピーするAPIも用意されています。
/checklists

もしチェックリストのコピーが不要だとしてKodanosukeさんのコードが上手く動く場合
二つのカード間でチェックリストを共有することになってしまうのでそれだとタスク管理にならないのではないかと思いました。


追記 1/14 11:00
POST https://api.trello.com/1/cardsについてのQUERY PARAMSにidChecklistは載っていないですね。
以下の二つのどちらかを使うしかなさそうです。
POST https://api.trello.com/1/cards/id/checklists
POST https://api.trello.com/1/checklists


追記 1/14 11:10
このQUERY PARAMS使えばカード丸ごと(チェックリストも)コピーしてくれるかもしれません。。。(試してないから分かりません)
idCardSource:The ID of a card to copy into the new card


追記 1/29 02:10

GoogleAppScript

1function copyCard(){ 2 var trelloKey = "xxxxxxxxxxxxx";//key 3 var trelloToken = "xxxxxxxxxxxxx";//token 4 var idList = 'xxxxxxxxxxxxx'; //コピー先のリストのID 5 var idCardSource = 'xxxxxxxxxxxxx';//コピー元のカードのID 6 7 8 var url = 'https://api.trello.com/1/cards?idList=' + idList + '&idCardSource=' + idCardSource + '&key=' + trelloKey + '&token=' + trelloToken ; 9 var res = UrlFetchApp.fetch(url, {'method':'post'}); 10 11 Logger.log(res); 12 13}

投稿2019/01/14 01:17

編集2019/01/28 17:09
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kodanosuke

2019/01/28 14:08

お世話になっております。 しばらく時間が空いてしまったのですが、こちらに関して相談させてください。 こちらのapiにはどのようにしてPOSTしたらいいのでしょうか。 リストやカードを作成したときのように、カードIDからカードを取得してという流れでしょうか。具体的なコードで示していただけると非常に助かります。 お手数をおかけして申し訳ありませんが、よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2019/01/28 17:09

追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問