請求書アプリを作りながら、AppSheetの使い方を学びましょう。
前回(第6回)は請求書のひな形(テンプレート)をGoogleドキュメントで作成しました。
今回は、AppSheet Automation(オートメーション)でひな形を使って請求書を作成し、PDFで発行するBot(ボット)を作成します。
さらに、発行したPDFのパス(Googleドライブ上の場所情報)を取得して、テーブルに保存するStep(ステップ)を追加します。
Automationには6つのTask(タスク)が用意されています。
今回は「Create a new file」というTaskでファイル作成します。
その他のTaskの使い方や活用事例については、ブログ記事「AppSheet Automationの使い方(第1回)6つのTaskでできること」を参考にしてください。
【お知らせ】
2022年10月以降、AppSheetエディタの画面が新しく変更されています。
AppSheetのアップデートが速すぎて(汗)、このブログ記事はまだ新エディタの画面には対応していません。
エディタ画面右上にある「Switch to the legacy editor」というアイコンをクリックすると、新エディタと旧エディタの切り替えができます。
記事のアップデートができるまでは、とりあえず、旧エディタに切り替えて解説を読んでください。
目次
1. AppSheet Automationで請求書をPDFで発行する
Automationは、Botを作成して、Event → Step → Task の順で設定していきます。
最後に、Actionを作成します。
Actionを実行することによりBotが起動して、Botに設定されたAutomationが実行されるという流れです。
Bot(ボット)を作成する
AppSheetエディタの左側メニュー「Bots」(旧エディタでは、Automation)をクリック、「Bots」タブに移動します。
「New Bot」をクリックしてBotを作成します。
Botの名前をつけます。
「Bot name」で「請求書PDF発行」という名前をつけました。
Event(イベント)を作成する
次に、Event(イベント)を作成します。
EventはBotを実行するためのトリガ(きっかけ)になる設定です。
Eventで設定した値が更新されたり、指定した時刻になった時にAppSheetがBotを呼び出して実行します。
「Configure event」をクリックします。
Eventの名前をつけます。
「Event name」に「請求書トリガ」という名前をつけました。
画面右側に、Eventの設定パネルが開きます。
Event typeを「Data Change」にして「Updates only」を選択します。
Tableを「請求書」にします。
続けて、Conditionに式を設定します。Conditionのフィールドをクリックします。
Expression Assistant に以下のように式を入力して、「Save」をクリックして保存します。
第2回で、「請求書」テーブルに「トリガ」列というNumber列を用意しておきました。
この式の意味は、「トリガ列の値が変更されたら・・・」という意味です。
- [_THISROW_BEFORE]:「この行(レコード)の前の値」
- [_THISROW_AFTER]:「この行(レコード)の後の値」
- <>:等しくない
なので、「前のトリガの値と後のトリガの値が等しくない」時にBotを実行します。
設定すると以下のように表示されます。
後で設定するActionで「トリガ」の値を変更します。
すると、AppSheetが「前のトリガの値と後のトリガの値が等しくない」→「トリガの値が変更された」と判断して、Botが呼び出されます。
Step(ステップ)を作成する
続いて、Step(ステップ)を作成します。
Step(ステップ)をひとつ追加すると、自動的にProcess(プロセス)が設定されます。
「Add a step」をクリックします。
Step(ステップ)の名前をつけます。
「Step name」に「請求書PDF発行ステップ」と名前をつけました。
Stepが追加されるので、クリックして開きます。
ステップの種類を選択します。ここでは「Run a task」にします。
画面右側にTask設定パネルが開きます。
Task(タスク)を設定する
そのまま右側のパネルで設定を続けられますが、もう少し大きなパネルでやりましょう。
タブメニュー「Tasks」をクリックします。
「請求書PDF発行ステップ Task - 1」というTask(タスク)があるので、クリックして開きます。
設定パネルで以下のように設定します。
- Task category:「Create a new file」
- Task name:「請求書PDF発行タスク」
- Table name:「請求書」
- HTTP Content Type:「PDF」
続けて、Templateの書類アイコンをクリックします。
ここで第6回で作成したGoogleドキュメントのひな形を選択します。
Upload fromで「Google Drive Files」を選択します。
前回(第6回)で作成した「請求書」のGoogleドキュメントのひな形を選択して、「Select」をクリックします。
Templateに「DocId=1....」と表示されたら無事にひな形が選択されました。
次に、「File Folder Path」はPDFを保存するGoogleドライブの場所の設定ですが、ここは空欄でも大丈夫です。
空欄の場合は、アプリフォルダ内に「Files」というフォルダが作成されて、「Files」内にPDFが保存されるようになります。
続けて、「File Name Prefix」を設定します。
三角フラスコアイコンがあるフィールドをクリックします。
「File Name Prefix」はPDFにつけるファイル名を設定します。
以下の式をコピペして使ってください。
[請求書番号] & "-" & [トリガ]
Expression Assistantには以下のように入力します。
請求書のファイル名は「請求書番号」に「トリガ」の数字を付加しています。
請求書を発行する度に「トリガ」の値が「+1」されるので、何度発行しても重複のないファイル名になります。
最後に、以下の項目を設定します。
- Disable Timestamp ? :チェックする
- Attachment Page Orientation:「Portrait」
- Attachment Page Size:「A4」
以上で、Taskの設定は完了です。
流れを確認する
念のため、Automationの流れを確認してみましょう。
Botsには「請求書PDF発行」というBotがひとつあります。
Eventsには「請求書トリガ」というEventがひとつあります。
Processesには「Process for 請求書PDF発行 - 1」がひとつあります。
さきほどの設定手順では、Process(プロセス)を作成する手順はありませんでしたが、Stepを追加すると自動的にProcessも作成されます。
Processの名前はAppSheetが自動的に付けた名前なので、後で変更することもできます。
Tasksには「請求書PDF発行タスク」がひとつあります。
Actionを設定する
Botを実行するAction(アクション)を設定します。
AppSheetエディタの左側メニュー「Action」(旧エディタでは、Behavior)をクリックします。
「New Action」で新しいActionを作成します。
Actionを以下のように設定します。
- Action name:「請求書発行」
- For a record of this table:「請求書」
- Do this:「Data: set the values of some columns in this row」
- Set these columns:「トリガ」「= [ トリガ ] + 1」
- Action icon:「pdf」
「Set these columns」は「Add」をクリックして、「トリガ」を設定します。
三角フラスコアイコンをクリックして、Expression Assistantに以下のように入力します。
この「請求書発行」Acitonを実行すると「トリガ」列の現在の値に1が加算されます。
Eventには「トリガ列の値が変更されたら・・・」という意味の式
- [_THISROW_BEFORE].[トリガ] <> [_THISROW_AFTER].[トリガ]
を設定しているので、このActionを実行するとAppSheetが「トリガの値が変更された」と判定してBotが実行されるということです。
右上の「Save」をクリックしてActionを保存しましょう。
これでBotを実行する準備ができました。
Botを実行する
Botを実行して請求書をPDFで発行してみましょう。
AppSheetエディタのプレビューで「請求書」を選択し、作成済みの請求書をひとつ選択します。
さきほど作った「請求書発行」Actionがボタンで表示されています。
ボタンをクリックするとBotが実行されるので、クリックしてみましょう。
Botが実行されます。
データソースのスプレッドシートを確認してみます。
「請求書」シートの「トリガ」が「1」になっていると思います。
「トリガ」列の値が更新されたので、AppSheetがBotを呼び出して実行します。
では、請求書がPDFで発行されたかを確認してみましょう。
Googleドライブで「AppSheet」フォルダを開きます。
その中に「data」というフォルダがあるので開いてみましょう。
「請求書-○○○○○○○」というフォルダがあると思うので開いてみましょう(○○○○○○○はowner's IDを含む文字列です)。
「Files」というフォルダがあると思います。
「FIles」フォルダ内に請求書PDFが保存されていれば成功です。
前回(第6回)作成したGoogleドキュメントのひな形に、各テーブルの値が差し込まれて請求書が作成されました。
2. AppSheet Automationで請求書のパスを保存する
GoogleドライブにAppSheetが発行した請求書PDFが保存されていることが確認できました。
ここでは、請求書アプリにPDFのリンクを表示して、アプリからPDFを開けるようにしましょう。
第2回で「請求書」テーブルに「請求書ファイル」という列を用意しておきました。この列にPDFのパスを保存します。
BotにStepを追加する
さきほど作成したBot、「請求書PDF発行」にStepを追加します。
AppSheetエディタ左側メニュー「Bots」(旧エディタでは、Automation)をクリックして移動します。
「Add a step」でStepを追加します。
「Step name」にステップの名前をつけます。
「請求書パス保存ステップ」と名前をつけました。
Stepができたら、クリックして選択します。
「Run a task」をクリックして、Stepの種類を「Run a data action」に変更します。
右側に設定パネルが開きます。
はじめに「Set row values」をクリックして選択します。
次に「Set these column (s)」で「請求書ファイル」を選択し、三角フラスコアイコンをクリックします。
Expression Assistantに以下の式を入力します。
【請求書のパス式】
"/appsheet/data/" & CONTEXT("AppName") & "/Files/" & [請求書番号] & "-" & [トリガ] & ".pdf"
式の中に、CONTEXTというAppSheet関数を使用しています。
CONTEXT関数は、引数に指定したキーワードに基づいて情報を返す関数です。
「"AppName"」というキーワードを指定すると、アプリ名を返してくれます。
CONTEXT( "AppName" ) => アプリ名を返す
式全体としては、
- Googleドライブ内の「appsheet」フォルダ内の
- 「data」フォルダ内の
- 「アプリ名(請求書)」フォルダ内の
- 「Files」フォルダ内の
- 「請求書番号-トリガ.pdf」というファイル
という意味になります。
Expression Assistant は以下のようになります。
では、AppSheetで請求書を発行してみましょう。
請求書を選択して、「請求書発行」Actionボタンをクリックして発行します。
請求書が発行され、Googleドライブに保存されると「請求書ファイル」に請求書のファイル名とリンクが表示されます。
リンクをクリックすると、請求書が表示されると思います。
スプレッドシートの「請求書ファイル」列に、請求書PDFのパスが保存されています。
アプリではこのパスをリンクとして表示しています。
これで、わざわざGoogleドライブにアクセスしなくても請求書を表示したり、別の場所に保存できるようになりました。
以上で、請求書アプリが完成しました。
このアプリを作ることで、SELECT関数の使い方やAppSheet Automationによる自動化を学ぶことができました。
AppSheetアプリの使い方を身につけるにあたり必須で重要なスキルが含まれています。
是非、ご自身で作ってみてください。
今回はPDFでしたが、「Create a new file」はExcelのファイル作成もできます。
以下のブログ記事では、Excelで請求書ファイルを作成する方法を解説しています。
また、作成した請求書を「メールに添付して送信したい」という場合は、「Send an email」というTaskを使用します。
「Send an email」の解説も用意しているので興味がある方は参考にしてください。