Trello: カード作成

Trello: カード作成

Trello: Create Card

この工程は、Trello のカードを作成します。

Basic Configs
工程名
メモ
Auto Step icon
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 トークンを取得するには、
    1. Power-Up の管理ページを開き、新しい Power-Up を作成してください
    2. 左メニューの「API キー」を開くと、API キーが表示されます
    3. 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);
    }
}

    
上部へスクロール

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む