[Asana API]特定のプロジェクトやセクションにタスクを登録

AsanaAPIでスプレッドシート連携とタスク登録Asana API

どうも。ケニー(tsujikenzo)です。このシリーズでは「[Asana API]スプレッドシート連携でタスク登録をしよう」をお届けしています。

今日は5回目です。

前回のおさらい

前回は、「複数タスクの取得とフィルター掛け」をお届けしました。

[Asana API]複数タスクの取得とフィルター掛け
どうも。ケニー(tsujikenzo)です。このシリーズでは「スプレッドシート連携でタスク登録をしよう」をお届けしています。今日は4回目です。前回のおさらい前回は、「単体のタスクの絞り込み取得」をお届けしました。...

いよいよ、やりたいこと(業務でバリバリ使えそう)の本丸に近付いております。

今回は、「特定のプロジェクトやセクションにタスクを登録」です。

今日のアジェンダ

  • 特定のプロジェクトにタスクを追加
  • 特定のセクションにタスクを追加
  • 特定のタグをタスクを追加

特定のプロジェクトにタスクを追加

こちらの回で、タスクの登録を行いました。マイタスクへ登録されるというシンプルなものでした。

こちらに、特定のプロジェクトを追加してみましょう。

タスクにプロジェクトを追加する

タスクの詳細は、プログラム中のpayloadという項目で追記できます。

以下のコードを、スクリプトファイルにコピペして実行してみましょう。

function createTaskInProject() {
  const accessToken = ACCESS_TOKEN; //グローバルエリアに記述済み
  const projectId = PROJECT_ID; //グローバルエリアに記述済み
  
  const url = 'https://app.asana.com/api/1.0/tasks';

  const payload = {
    data: {
      name: 'New Task Name', // 新しいタスクの名前
      notes: 'Details about the new task.', // タスクの詳細
      projects: [projectId] // タスクを追加するプロジェクトのIDリスト
    }
  };

  const options = {
    method: 'post',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
      'Content-Type': 'application/json'
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true // HTTP例外をミュートする
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const jsonResponse = JSON.parse(response.getContentText());
    console.log(jsonResponse);
  } catch (e) {
    console.log("Exception when creating a task: " + e.toString());
  }
}

マイタスクではなく、指定したプロジェクトにタスクが追加されていたら成功です。 

特定のセクションにタスクを追加

同様に、タスク作成時に、セクションを指定することもできます。

Asanaでは、タスクに複数のプロジェクトを紐づけることができますよね。 

これは、Pyloadに、membershipsプロパティで、配列で指定可能です。

const payload = {
    memberships: [{'project': projectId1, 'section': sectionId1},{'project': projectId2, 'section': sectionId2}],
}

以下のコードを、スクリプトファイルにコピペして実行してみましょう。

function createTaskInAsanaSection() {
  const accessToken = ACCESS_TOKEN; //グローバルエリアに記述済み
  const workspaceId = WORKSPACE_GID; //グローバルエリアに記述済み
  const projectId = PROJECT_ID; //グローバルエリアに記述済み
  const sectionId = SECTION_ID; //グローバルエリアに記述済み

  const url = 'https://app.asana.com/api/1.0/tasks';

  const payload = {
    data: {
      workspace: workspaceId,
      memberships: [{'project': projectId, 'section': sectionId}],
      name: "はじめてのタスク登録",
      notes: "はじめてのタスク登録で緊張しています",
      assignee:"me"
    }
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    headers: {
      'Authorization': 'Bearer ' + accessToken
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true // HTTP例外をミュートする(エラーレスポンスを取得するため)
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const jsonResponse = JSON.parse(response.getContentText());
    console.log(jsonResponse);
  } catch (e) {
    console.log("Exception when calling API: " + e.toString());
  }
}

タスクに、複数のプロジェクトとセクションが設定できていれば成功です。 

特定のタグをタスクを追加

タグはよく使う機能です。重要度のようなものから、営業エリアやメモなど、なんでも付与して管理しています。

とくに、カスタムフィールド機能(要課金)を使うと、さらに便利な使い方ができます。

弊社では、売上や粗利などの営業成績管理に重宝しています。

今回は、無料で使える範囲で、お届けします。

タグIDを調べる

まず、ワークスペース内のタグGIDを調べます。

タグGIDを取得するコードはこちらです。

function getTagsInWorkspace() {
  const accessToken = ACCESS_TOKEN; //グローバルエリアに記述済み
  const workspaceId = WORKSPACE_GID; //グローバルエリアに記述済み
  const url = `https://app.asana.com/api/1.0/workspaces/${workspaceId}/tags`;

  const options = {
    method: 'get',
    headers: {
      'Authorization': 'Bearer ' + accessToken,
      'Accept': 'application/json'
    },
    muteHttpExceptions: true // HTTP例外をミュートする(エラーレスポンスを取得するため)
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const jsonResponse = JSON.parse(response.getContentText());
    // タグ一覧をログに出力
    jsonResponse.data.forEach(tag => {
      console.log(`Tag Name: ${tag.name}, Tag ID: ${tag.gid}`);
    });
  } catch (e) {
    console.log("Exception when calling API: " + e.toString());
  }
}

実行ログに表示されるTag ID(タグGID)を、メモしておきましょう。 

タスク作成時にタグを追加する

タスク作成時に、複数のタグを付与したいばあいは、tagsプロパティで配列で指定します。

以下のコードを、スクリプトファイルにコピペして実行してみましょう。

function createTaskWithTags() {
  const accessToken = ACCESS_TOKEN; //グローバルエリアに記述済み
  const workspaceId = WORKSPACE_GID; //グローバルエリアに記述済み
  const projectId = PROJECT_ID; //グローバルエリアに記述済み
  const sectionId = SECTION_ID; //グローバルエリアに記述済み

  const url = 'https://app.asana.com/api/1.0/tasks';

  const payload = {
    data: {
      workspace: workspaceId,
      memberships: [{'project': projectId, 'section': sectionId}],
      name: "はじめての複数タグ登録",
      notes: "はじめてのタスク登録でタグを付与しています",
      assignee:"me",
      tags: ["あなたのタグGID1","あなたのタグGID2"] // タスクに付与するタグのIDリスト
    }
  };

  const options = {
    "method": "post",
    "headers": {
      "Authorization": "Bearer " + accessToken,
      "Content-Type": "application/json"
    },
    "payload": JSON.stringify(payload),
    "muteHttpExceptions": true // HTTP例外をミュートする(エラーレスポンスを取得するため)
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const jsonResponse = JSON.parse(response.getContentText());
    console.log(jsonResponse);
  } catch (e) {
    console.log("Exception when creating a task with tags: " + e.toString());
  }
}

タスク内にタグが表示されていれば成功です。

リスト表示内に、タグ列が表示されていないばあいは、「非表示」をクリックして、タグの表示をONにします。 

まとめ

以上で、「特定のプロジェクトやセクションにタスクを登録」をお送りしました。

次回は、いよいよ「スプレッドシートとAsana」をお届けします。お楽しみに。

このシリーズの目次

  1. [Asana API]Asana APIを利用する下準備
  2. [Asana API]単体タスクの取得と更新
  3. [Asana API]単体のタスクの絞り込み取得
  4. [Asana API]複数タスクの取得とフィルター掛け
  5. [Asana API]特定のプロジェクトやセクションにタスクを登録
  6. [Asana API]スプレッドシートとAsana準備編
  7. [Asana API]スプレッドシート設計とGASの下準備
  8. [Asana API]スプレッドシートクラス
  9. [Asana API]カスタムAsanaクラス
  10. [Asana API]グローバルとカスタムメニューとmain
タイトルとURLをコピーしました