
Trello: カードを移動
この工程は、Trello のカードを指定したリストに移動します。
Basic Configs
- 工程名
- メモ
Configs for this Auto Step
- conf_ApiKey
- C1: API キーを設定した認証設定 *
- conf_ApiToken
- C2: API トークンを設定した認証設定 *
- conf_CardIds
- C3: カード ID(1 行に 1 つ) *
- conf_ListId
- C4: カードを移動するリストの ID *
Notes
- API キー、API トークンを取得するには、
- Power-Up の管理ページを開き、新しい Power-Up を作成してください
- 左メニューの「API キー」を開くと、API キーが表示されます
- API キーの右側の「手動でトークンを生成できます」のリンクから、トークンを取得してください
Capture

See Also
Script (click to open)
- 次のスクリプトが記述されている XML ファイルをダウンロードできます
- trello-card-move.xml (C) Questetra, Inc. (MIT License)
- Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます
function main() {
//// == 工程コンフィグ・ワークフローデータの参照 / Config & Data Retrieving ==
const authKey = configs.getObject("conf_ApiKey");
const authToken = configs.getObject("conf_ApiToken");
const apiKey = authKey.getToken();
const apiToken = authToken.getToken();
const cardIdsArray = retrieveCardIds();
const listId = retrieveListId();
//// == Calculating / 演算 ==
const numOfLines = cardIdsArray.length;
for (let i = 0; i < numOfLines; i++) {
checkCard(apiKey, apiToken, cardIdsArray[i]);
moveCard(apiKey, apiToken, cardIdsArray[i], listId);
}
}
/**
* config からカード ID を読み出す
* @return {String} cardIds
* @return {Array<String>} linesArray カード ID の配列
*/
function retrieveCardIds() {
const cardIdsDef = configs.getObject('conf_CardIds');
const cardIds = engine.findData(cardIdsDef);
if (cardIds === null || cardIds === "") {
throw new Error("Card IDs aren't set.");
}
let linesArray = cardIds.split("\n");
linesArray = linesArray.filter(lines => lines !== ""); // 空文字列を削除
if (linesArray.length === 0) {
throw new Error("Card IDs aren't set.");
}
const numOfLines = linesArray.length;
if (numOfLines * 2 > httpClient.getRequestingLimit()) {
throw new Error("Number of Card IDs is over the limit.");
}
return linesArray;
}
/**
* config からリスト ID を読み出す
* @return {String} listId
*/
function retrieveListId() {
const listIdDef = configs.getObject('conf_ListId');
if (listIdDef === null) { // 固定値で指定
return configs.get('conf_ListId');
}
// 文字型データ項目の場合
if (listIdDef.matchDataType('STRING_TEXTFIELD')) {
const listId = engine.findData(listIdDef);
if (listId === null) {
throw new Error('List ID is blank.');
}
return listId;
}
// 選択型データ項目の場合
const selects = engine.findData(listIdDef);
if (selects === null || selects.size() === 0) {
throw new Error('List ID is not selected.');
}
return selects.get(0).getValue();
}
/**
* カードの状態を確認する
* アーカイブ済のカードであればエラー
* @param {String} auth.apiKey
* @param {String} auth.apiToken
* @param {String} cardId
*/
function checkCard(apiKey, apiToken, cardId) {
const url = `https://api.trello.com/1/cards/${encodeURIComponent(cardId)}`;
const response = httpClient.begin()
.queryParam("key", `${apiKey}`)
.queryParam("token", `${apiToken}`)
.get(url);
const status = response.getStatusCode();
const responseStr = response.getResponseAsString();
if (status !== 200) {
engine.log(responseStr);
throw new Error(`Failed to get card information. Card ID: ${cardId}, status: ${status}`);
}
const jsonRes = JSON.parse(responseStr);
if (jsonRes.closed === true) {
throw new Error(`Card ID: ${jsonRes.id} is archived.`);
}
}
/**
* カードを移動する
* @param {String} auth.apiKey
* @param {String} auth.apiToken
* @param {String} cardId
* @param {String} listId
*/
function moveCard(apiKey, apiToken, cardId, listId) {
const url = `https://api.trello.com/1/cards/${encodeURIComponent(cardId)}`;
const response = httpClient.begin()
.queryParam("key", `${apiKey}`)
.queryParam("token", `${apiToken}`)
.queryParam("idList", `${listId}`)
.put(url);
const status = response.getStatusCode();
const responseStr = response.getResponseAsString();
if (status !== 200) {
engine.log(responseStr);
throw new Error(`Failed to move. Card ID: ${cardId}, status: ${status}`);
} else {
engine.log(`Succeeded to move. Card ID: ${cardId}`);
}
}