[Asana API]複数タスクの取得とフィルター掛け

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

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

今日は4回目です。

前回のおさらい

前回は、「単体のタスクの絞り込み取得」をお届けしました。

しかしながら、取得したい単体タスクのGIDを調べて、ループを回すなんてのは大変です。

今回は、「複数タスクの取得とフィルター掛け」です。※今回の記事には、一部、無料プランでは利用できない(課金プランが必要な)内容が含まれています。

今日のアジェンダ

  • ワークスペース上の全タスク一覧とフィルター掛け
  • GASによる全タスク取得の概要
  • GASによる全タスクの取得方法

ワークスペース上の全タスク一覧とフィルター掛け

Asanaには、開いているワークスペースの、全タスクを表示させる機能があることをご存知でしょうか。

Asanaの上部にある検索バーをクリックし、「すべての結果を見る」をクリックします。 

ワークスペース上の、全タスク一覧(完了・未完了含む)が表示されます。

フィルター掛け

タスクは、さまざまなフィルター掛けができます。(要課金プラン) 

以下の項目で、フィルター掛けが可能です。(要課金プラン)

  • プロジェクト
  • 担当者
  • コラボレーター
  • 添付ファイル
  • 完了/未完了
  • 日付(期日、作成日、開始日、完了日、変更日)
  • ユーザー(タスクを割り当てた、タスクを作成した、いいねした、プロジェクトオーナー)
  • タグ
  • その他(チーム内、依存関係、サブタスク、マイルストーン、削除済み)

全体タスクに、フィルター掛けした例です。 

検索結果に「お気に入り」を付けることもできます。

GASによる全タスク取得の概要

GASで、ワークスペースの全タスクを取得してみましょう。しかしながら、Asanaアプリ(ブラウザ版も同様に)の操作とは、少し異なる部分があります。

タスク取得に必要なパラメーター

GASでワークスペース上の全タスクを取得するばあい、担当者が自分以外のタスクを含む、ワークスペース全体のタスクを取得するのは不可能です。(担当者として自分が割り当てられている全タスクは取得できるのですが・・・)

ワークスペース上の全タスクを取得するには、次のいずれかを、指定しなければなりません。

指定するパラメーター1指定するパラメーター2
プロジェクトGID不要
セクションGID不要

もし、担当者が自分のみ(つまりマイタスク)の全タスクは、以下で取得可能です。

指定するパラメーター1指定するパラメーター2
ユーザータスクリストGID不要
ワークスペースGID自分のassingeeGID(meでもOK)

GASによる全タスクの取得方法

ひとつずつ、コードを確認します。都度、新しいスクリプトファイルに記述しましょう。

プロジェクトIDによる全タスク取得

プロジェクトGIDを指定すると、プロジェクト内の全タスクを取得できます。

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

  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());
    console.log(jsonResponse);
  } catch (e) {
    console.log("Exception when calling API: " + e.toString());
  }
}

ログ出力は、割愛します。

セクションIDによる全タスク取得

セクションGIDを指定すると、セクション内の全タスクを取得できます。

// 取得したいタスクのセクションGID
const SECTION_ID = 'あなたのセクションID';

function getTasksFromSection() {
  const accessToken = ACCESS_TOKEN; //グローバルエリアに記述済み
  const sectionId = SECTION_ID; //グローバルエリアに記述済み
  const url = 'https://app.asana.com/api/1.0/tasks?section=' + sectionId;

  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());
    console.log(jsonResponse);
  } catch (e) {
    console.log("Exception when calling API: " + e.toString());
  }
}

セクションGIDの確認方法ですが、GASで確認するしかないようです。以下を実行してみましょう。

// 取得したいタスクのプロジェクトGID
const PROJECT_ID = "あなたのプロジェクトID";

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

  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());
    console.log(jsonResponse);
  } catch (e) {
    console.log("Exception when calling API: " + e.toString());
  }
}

そして以下の2つは、担当者が自分のみ(つまりマイタスク)の全タスクの取得方法です。

ユーザータスクリストによる全タスク取得

ユーザータスクリストGIDを指定すると、指定したユーザー(ここでは自分とします)の全タスクを取得できます。

// 取得したいタスクのユーザータスクリストGID
const USERTAKSLIST_ID = "あなたのユーザータスクリストGID";

function getMyUserTaskList() {
  const accessToken = ACCESS_TOKEN; //グローバルエリアに記述済み
  const userTaskListGID = USERTAKSLIST_ID; //グローバルエリアに記述済み
  const url = `https://app.asana.com/api/1.0/user_task_lists/${userTaskListGID}/tasks`;

  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());
    console.log(jsonResponse);
  } catch (e) {
    console.log("Exception when calling API: " + e.toString());
  }
}

ユーザータスクリストGID(ここでは自分とします)の確認方法ですが、GASで確認するしかないようです。以下を実行してみましょう。

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

  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());
    const userTaskListId = jsonResponse.data.gid;
    console.log("User Task List ID: " + userTaskListId);
  } catch (e) {
    console.log("Exception when calling API: " + e.toString());
  }
}

ワークスペースGIDとassineeGID(meでもOK)による全タスク取得

ワークスペースGIDとassineeGID(meでもOK)を指定すると、指定したユーザー(ここでは自分とします)の全タスクを取得できます。

function getMyAssignedTasks() {
  const accessToken = ACCESS_TOKEN; //グローバルエリアに記述済み
  const workspaceId = WORKSPACE_GID; //グローバルエリアに記述済み
  const url = `https://app.asana.com/api/1.0/tasks?assignee=me&workspace=${workspaceId}`;

  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());
    console.log(jsonResponse);
  } catch (e) {
    console.log("Exception when calling API: " + e.toString());
  }
}

まとめ

以上で、「複数タスクの取得とフィルター掛け」をお送りしました。

コードの紹介が多くなりましたが、さまざまなアプローチで、複数タスク(全タスク)を取得できます。

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をコピーしました