[Asana API]グローバルとカスタムメニューとmain

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

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

今日は最終回で、10回目です。

前回のおさらい

前回は、「カスタムAsanaクラス」をお届けしました。

[Asana API]カスタムAsanaクラス
どうも。ケニー(tsujikenzo)です。このシリーズでは「スプレッドシート連携でタスク登録をしよう」をお届けしています。今日は9回目です。前回のおさらい前回は、「スプレッドシートクラス」をお届けしました。...

最後は、アクセストークンなどを格納するグローバルの書き方と、カスタムメニューとmain(エントリーポイント)を実装して終わりたいと思います。

今回は、「グローバルとカスタムメニューとmain」です。

今日のアジェンダ

  • グローバルエリアについて
  • カスタムメニュー
  • main(エントリーポイント)

グローバルエリアについて

どこからでも呼び出せる、グローバルエリア(領域)。

GASでは、プロパティストアを使って、アクセストークンなどの機密情報を格納することは、ご存知だと思います。

global.gsのような命名で、スクリプトファイルを作成しましょう。

function setPropertyStore() {

    //プロパティストアの選択
    const properties = PropertiesService.getScriptProperties();

    const ASANA_ACCESSTOKEN = "あなたのアクセストークン";
    properties.setProperty('ASANA_ACCESSTOKEN', ASANA_ACCESSTOKEN);

    const WORKSPACE_GID = "あなたのワークスペースID";
    properties.setProperty('WORKSPACE_GID', WORKSPACE_GID);

    const SPREADSHEET_ID = "あなたのスプレッドシートID";
    properties.setProperty('SPREADSHEET_ID', SPREADSHEET_ID);
}

クラス側で呼び出す際は、このように記述します。

/** クラスCustomAsana */
class CustomAsana {

  /** コンストラクタ */
  constructor() {
    this.accessToken = PropertiesService.getScriptProperties().getProperty("ASANA_ACCESSTOKEN");
    this.workspaceId = PropertiesService.getScriptProperties().getProperty("WORKSPACE_GID");
  }

  /** タスクを登録する */
  createTask(task) {
    //省略
  }

}

/** Postシートクラス */
class PostSheet {

  /** コンストラクタ */
  constructor() {
    this.sheetName = 'post';
    this.SPREADSHEET_ID = PropertiesService.getScriptProperties().getProperty('SPREADSHEET_ID');
    this.sheet = SpreadsheetApp.openById(this.SPREADSHEET_ID).getSheetByName(this.sheetName);
  }

  /** すべてのRecordsをオブジェクトレコーズで取得するメソッド
   * @return{Array} objArray
   */
  getPostSheetRecords() {
  //省略
  }
}

カスタムメニュー

カスタムメニューに表示して欲しい項目は、以下です。

  • postシートに転記する
  • Asanaにタスクを登録する
  • Asanaのタスクを更新する(未実装)

以下のような、onOpen.gsになるでしょう。

function onOpen() {

  const ui = SpreadsheetApp.getUi();

  ui.createMenu('🍉カスタムメニュー')
    .addItem('🚀postシートに転記する', 'transferTasoToPostSheet') //function-main.gs
    .addItem('🚀Asanaにタスクを登録する', 'createTaskToAsana')//function-main.gs
    .addItem('🚀Asanaのタスクを更新する(未実装)', 'putTaskToAsana')//function-main.gs
    .addToUi();

}

スプレッドシートでは、このような表示になります。絵文字などは積極的に使うようにしています。かわいいでしょ。 

main(エントリーポイント)

main(エントリーポイント)となるfunctionは、新規スクリプトファイルに記述します。

ファイル名は「🚀function-main.gs」のような感じです。

以下のようなコードになります。

function main() {
  //Javaの名残でmain関数を記述していますが意味はありません。
}


//以下、onOpenのカスタムメニュー構造に対応しています

/**
 * 🚀postシートに転記する関数
 */
function transferTasoToPostSheet() {
  //Postシートのインスタンス化
  const p = new PostSheet();

  // starの付いていないレコードを取得し、postシートに貼り付ける
  console.log(p.setRecordWithoutStar());

}


/**
 * 🚀Asanaにタスクを登録する関数
 */
function createTaskToAsana() {
  //Postシートのインスタンス化
  const p = new PostSheet();

  // Asanaにタスクを登録する(未実装)
  console.log(p.postTaskToAsana());

}


/**
 * 🚀Asanaのタスクを更新する関数(未実装)
 */
function putTaskToAsana() {
  // Asanaにタスクを登録する
  // console.log(p.postTaskToAsana());

}

onOpenから、それぞれのfunctionを実行して、動作を確認しましょう。

GitHubリポジトリ

このブログで作成したGASはこちらです。

GitHub - tsujike/blog-AsanaAPI2024: はじめてのAsanaAPI連携です
はじめてのAsanaAPI連携です. Contribute to tsujike/blog-AsanaAPI2024 development by creating an account on GitHub.

GID取得系のGASは、別の機会にでも。

まとめ

以上で、「グローバルとカスタムメニューとmain」をお送りしました。

この先、まだまだ実装しなければならない処理がありますが、いったん区切りとさせていただきます。

Asanaはタスクをこなすだけでなく、「なぜそのタスクが必要なのか」という問いまで与えてくれます。

いや、与えてくれるようになるまで、目標やKGI/KPIやMBOや仮説思考といった、組織マネジメントや課題解決方法も学び続けなければなりません。

これからも頑張っていこうと思います。

最後まで読んでいただき、ありがとうございました。

このシリーズの目次

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