
Trello: カード作成
この工程は、Trello のカードを作成します。
Basic Configs
- 工程名
- メモ
Configs for this Auto Step
- conf_ApiKey
- C1: API キーを設定した認証設定 *
- conf_ApiToken
- C2: API トークンを設定した認証設定 *
- conf_ListId
- C3: カードを作成するリストの ID *
- conf_Name
- C4: カードのタイトル *#{EL}
- conf_Desc
- C5: カードの説明#{EL}
- conf_LabelIds
- C6: カードに設定するラベルの ID(文字型データ項目の場合、1 行に 1 つ)
- conf_MemberIds
- C7: カードに設定するメンバの ID(文字型データ項目の場合、1 行に 1 つ)
- conf_Start
- C8: 開始日
- conf_Due
- C9-1: 期限
- conf_DueReminder
- C9-2: リマインダの設定(期限を設定した場合にのみ、リマインダが設定されます)
- conf_CardId
- C10: カード ID を保存するデータ項目
- conf_CardUrl
- C11: カード詳細ページの URL を保存するデータ項目
Notes
- API キー、API トークンを取得するには、
- Power-Up の管理ページを開き、新しい Power-Up を作成してください
- 左メニューの「API キー」を開くと、API キーが表示されます
- API キーの右側の「手動でトークンを生成できます」のリンクから、トークンを取得してください
- リスト、ラベル、メンバ等の ID は Trello の Web UI には表示されないため、下記の自動工程を使用して ID を取得してください
Capture

See Also
Script (click to open)
- 次のスクリプトが記述されている XML ファイルをダウンロードできます
- trello-card-create.xml (C) Questetra, Inc. (MIT License)
- Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます
function main() {
//// == 工程コンフィグ・ワークフローデータの参照 / Config & Data Retrieving ==
const auth = retrieveAuth(); // {apiKey, apiToken}
const listId = retrieveListId();
const name = retrieveName();
const desc = configs.get('conf_Desc');
const labelIds = retrieveIdsAsList('conf_LabelIds');
const memberIds = retrieveIdsAsList('conf_MemberIds');
const start = retrieveStart();
const due = retrieveDue();
const dueReminder = retrieveDueReminder();
const cardIdDef = configs.getObject('conf_CardId');
const cardUrlDef = configs.getObject('conf_CardUrl');
//// == Calculating / 演算 ==
const card = createCard(auth, listId, name, desc, labelIds, memberIds, start, due, dueReminder);
//// == Data Updating / ワークフローデータへの代入 ==
setData(cardIdDef, card.id);
setData(cardUrlDef, card.url);
}
/**
* config の認証設定から API キーと API トークンを読み出す
* @return {Object} auth
* @return {String} auth.apiKey
* @return {String} auth.apiToken
*/
function retrieveAuth() {
const authKey = configs.getObject("conf_ApiKey");
const authToken = configs.getObject("conf_ApiToken");
const apiKey = authKey.getToken();
const apiToken = authToken.getToken();
return {apiKey, apiToken};
}
/**
* 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();
}
/**
* config からカードのタイトルを読み出す
* @return {String} name
*/
function retrieveName() {
const name = configs.get('conf_Name');
if (name === null || name === '') {
throw new Error('Card Title is blank.');
}
return name;
}
/**
* config に設定された ID 一覧を読み出す
* @param {String} confName 設定名
* @return {Array<String>} ids
*/
function retrieveIdsAsList(confName) {
const dataDef = configs.getObject(confName);
if (dataDef === null) {
return [];
}
// 文字型データ項目の場合
if (dataDef.matchDataType('STRING')) {
const dataObj = engine.findData(dataDef);
if (dataObj === null) {
return [];
}
return dataObj.split('\n').filter(id => id !== '');
}
// 選択型データ項目の場合
const selects = engine.findData(dataDef);
if (selects === null || selects.size() === 0) {
return [];
}
const ids = [];
selects.forEach(item => {
ids.push(item.getValue()); // 選択肢 ID を格納
});
return ids;
}
/**
* config から開始日を文字列として読み出す
* @return {String} start
*/
function retrieveStart() {
const startDef = configs.getObject('conf_Start');
if (startDef === null) {
return null;
}
const startObj = engine.findData(startDef); // AddableDate
if (startObj === null) {
return null;
}
return startObj.toString(); // yyyy-MM-dd
}
/**
* config から期限を文字列として読み出す
* @return {String} due
*/
function retrieveDue() {
const dueDef = configs.getObject('conf_Due');
if (dueDef === null) {
return null;
}
const dueObj = engine.findData(dueDef); // AddableTimestamp
if (dueObj === null) {
return null;
}
return dateFormatter.format('UTC', "yyyy-MM-dd'T'HH:mm:ss'Z'", dueObj);
}
/**
* config からリマインダーの設定を読み出す
* @return {Number} dueReminder
*/
function retrieveDueReminder() {
const dueReminder = configs.get('conf_DueReminder');
if (dueReminder === null || dueReminder === '') {
return null;
}
return parseInt(dueReminder, 10);
}
/**
* カードを作成する
* @param {Object} auth
* @param {String} auth.apiKey
* @param {String} auth.apiToken
* @param {String} listId
* @param {String} name
* @param {String} desc
* @param {Array<String>} labelIds
* @param {Array<String>} memberIds
* @param {String} start
* @param {String} due
* @param {Number} dueReminder
* @return {Object} card
*/
function createCard({apiKey, apiToken}, listId, name, desc, labelIds, memberIds, start, due, dueReminder) {
const requestBody = {
idList: listId,
name,
desc,
idLabels: labelIds,
idMembers: memberIds,
start,
due,
dueReminder
};
const response = httpClient.begin()
.body(JSON.stringify(requestBody), 'application/json')
.post(`https://api.trello.com/1/cards?key=${apiKey}&token=${apiToken}`);
const status = response.getStatusCode();
const responseStr = response.getResponseAsString();
if (status !== 200) {
engine.log(responseStr);
throw new Error(`Failed to create card. status: ${status}`);
}
return JSON.parse(responseStr);
}
/**
* データ項目にデータを保存する
* @param {DataDefinitionView} dataDef データ項目の DataDefinitionView
* @param {Object} value 保存する値
*/
function setData(dataDef, value) {
if (dataDef !== null) {
engine.setData(dataDef, value);
}
}