請求書アプリを作りながら、AppSheetの使い方を学びましょう。
前回(第6回)は請求書のひな形をGoogleドキュメントで作成しました。
今回は、AppSheet Automation(オートメーション)で、Googleドキュメントのひな形を使って請求書を作成し、PDFで発行するBot(ボット)を作成します。
さらに、発行したPDFのパス(Googleドライブ上の場所情報)を取得して、テーブルに保存するStep(ステップ)を追加します。
目次
1. AppSheet Automationで請求書をPDFで発行する
Automationは、Botを作成して、Event → Step → Task の順で設定していきます。
最後に、BehaviorメニューからActionを作成します。
Actionを実行することによりBotが起動して、Botに設定されたAutomationが実行されるという流れです。
Bot(ボット)を作成する
AppSheetエディタの左側メニュー「Automation」をクリック、タブメニューにある「Bots」をクリックしてBot(ボット)設定を行います。
「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ドキュメントのひな形を選択します。
Googleドライブを選択します。
「請求書」のGoogleドキュメントを選択して、「Select」をクリックします。
Templateに「DocID=1....」と表示されたら無事にひな形が選択されました。
続けて、「File Folder Path」と「File Name Prefix」を設定します。
三角フラスコアイコンがあるフィールドをクリックします。
「File Folder Path」はPDFを保存するGoogleドライブの場所を設定します。
Expression Assistantに「"/請求書/"」と入力します。
AppSheet請求書アプリのルートディレクトリに「請求書」フォルダを作成するという意味です。
「File Name Prefix」はPDFにつけるファイル名を設定します。
以下の式をコピペして使ってください。
CONCATENATE([件名], " ", [取引先ID].[取引先], "様 ", [請求書番号])
Expression Assistantには以下のように入力します。
このアプリでは請求書のファイル名に「件名 取引先 請求書番号」という名前をつけたいと思います。
CONCATENATEというAppSheet関数は()の中に、つなげたい文字列や [ 列名 ] をカンマ(, )で区切って列挙するだけで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エディタの左側メニュー「Behavior」をクリック、タブメニュー「Actions」をクリックします。
「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」というフォルダがあるので開いてみましょう。
「Invoice-○○○○○○○」というフォルダがあると思うので開いてみましょう(○○○○○○○はowner's IDを含む文字列です)。
「請求書」というフォルダがあると思います。
Taskで設定した保存先の名前です。
請求書PDFが保存されていれば成功です。
前回(第6回)作成したGoogleドキュメントのひな形に、各テーブルの値が差し込まれて請求書が作成されました。
2. AppSheet Automationで請求書のパスを保存する
GoogleドライブにAppSheetが発行した請求書PDFが保存されていることが確認できました。
ここでは、請求書アプリにPDFのリンクを表示して、アプリからPDFを開けるようにしましょう。
第2回で「請求書」テーブルに「請求書ファイル」という列を用意しておきました。この列にPDFのパスを保存します。
AppSheetアプリのフォルダパスを取得する
さきほど、請求書PDFが保存されていた「Invoice-○○○○○○○」というフォルダがありました。
このフォルダのパス(Googleドライブ内の場所)を取得します。
AppSheetエディタの左側メニュー「Info」をクリック、タブメニュー「Properties」をクリックします。
「App Properties」をクリックして設定パネルを開きます。
「Default app folder」の内容をコピペしてメモしておいてください。
「/appsheet/data/アプリ名-owner's ID」という文字列になっています。
BotにStepを追加する
さきほど作成したBot、「請求書PDF発行」にStepを追加します。
AppSheetエディタの左側メニュー「Automation」をクリック、タブメニュー「Bots」をクリックします。
「Add a step」をクリックします。
「Step name」にステップの名前をつけます。
「請求書パス保存ステップ」と名前をつけました。
Stepができたら、クリックして選択します。
「Run a task」をクリックして、Stepの種類を変更します。
Stepの種類を「Run a data action」に変更します。
右側に設定パネルが開きます。
はじめに「Set row values」をクリックして選択します。
次に「Set these column (s)」で「請求書ファイル」を選択し、三角フラスコアイコンをクリックします。
Expression Assistantに以下の式を入力します。
「○○○○○○○」の部分を、コピペしてメモしておいた「Default app folder」の内容「/appsheet/data/Invoice-○○○○○○○」の「○○○○○○○」に置き換えれば大丈夫です。
【請求書のパス式】
CONCATENATE("/appsheet/data/Invoice-○○○○○○○/請求書/",[件名]," ",[取引先ID].[取引先], "様 ",[請求書番号],".pdf")
Expression Assistant は以下のようになります。
CONCATENATE関数を使用して文字列を結合します。
設定が完了すると以下のようになります。
では、AppSheetで請求書を発行してみましょう。
請求書を選択して、「請求書発行」Actionボタンをクリックして発行します。
請求書が発行され、Googleドライブに保存されると「請求書ファイル」に請求書のファイル名とリンクが表示されます。
リンクをクリックすると、請求書が表示されると思います。
スプレッドシートの「請求書ファイル」列に、請求書PDFのパスが保存されています。
アプリではこのパスをリンクとして表示しています。
これで、わざわざGoogleドライブにアクセスしなくても請求書を表示したり、別の場所に保存できるようになりました。
以上で、請求書アプリが完成しました。
このアプリを作ることで、SELECT関数の使い方やAppSheet Automationによる自動化を学ぶことができました。
AppSheetアプリの使い方を身につけるにあたり必須で重要なスキルが含まれています。
是非、ご自身で作ってみてください。