AppSheetで請求書アプリ(第7回)Automationで請求書をPDFで発行

folder_openAppSheet

請求書アプリを作りながら、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を作成します。

AppSheet AutomationでBotを作成する。

Botの名前をつけます。
「Bot name」で「請求書PDF発行」という名前をつけました。

Botの名前を入力する。

Event(イベント)を作成する

次に、Event(イベント)を作成します。
EventはBotを実行するためのトリガ(きっかけ)になる設定です。
Eventで設定した値が更新されたり、指定した時刻になった時にAppSheetがBotを呼び出して実行します。

「Configure event」をクリックします。

AppSheet AutomationのトリガになるEventを設定する。

Eventの名前をつけます。
「Event name」に「請求書トリガ」という名前をつけました。

Eventの名前を入力する。

画面右側に、Eventの設定パネルが開きます。
Event typeを「Data Change」にして「Updates only」を選択します。
Tableを「請求書」にします。

続けて、Conditionに式を設定します。Conditionのフィールドをクリックします。

Eventに条件式を設定する。

Expression Assistant に以下のように式を入力して、「Save」をクリックして保存します。
第2回で、「請求書」テーブルに「トリガ」列というNumber列を用意しておきました。
この式の意味は、「トリガ列の値が変更されたら・・・」という意味です。

  • [_THISROW_BEFORE]:「この行(レコード)の前の値」
  • [_THISROW_AFTER]:「この行(レコード)の後の値」
  • <>:等しくない

なので、「前のトリガの値と後のトリガの値が等しくない」時にBotを実行します。

Event の Condition の Expression Assistant を設定する。

設定すると以下のように表示されます。

Eventに条件式を設定した。

後で設定するActionで「トリガ」の値を変更します。
すると、AppSheetが「前のトリガの値と後のトリガの値が等しくない」→「トリガの値が変更された」と判断して、Botが呼び出されます。

Step(ステップ)を作成する

続いて、Step(ステップ)を作成します。
Step(ステップ)をひとつ追加すると、自動的にProcess(プロセス)が設定されます。

「Add a step」をクリックします。

AppSheet Automation のStep(ステップ)を設定する。

Step(ステップ)の名前をつけます。
「Step name」に「請求書PDF発行ステップ」と名前をつけました。

Step(ステップ)に名前を付ける。

Stepが追加されるので、クリックして開きます。

Step(ステップ)を設定する。

ステップの種類を選択します。ここでは「Run a task」にします。

StepにTask(タスク)を設定する。

画面右側にTask設定パネルが開きます。

Task(タスク)を設定する

そのまま右側のパネルで設定を続けられますが、もう少し大きなパネルでやりましょう。
タブメニュー「Tasks」をクリックします。
「請求書PDF発行ステップ Task - 1」というTask(タスク)があるので、クリックして開きます。

Automationメニュー、Taskタブに移動してTask(タスク)の設定を行う。

設定パネルで以下のように設定します。

  • Task category:「Create a new file」
  • Task name:「請求書PDF発行タスク」
  • Table name:「請求書」
  • HTTP Content Type:「PDF」

続けて、Templateの書類アイコンをクリックします。
ここで第6回で作成したGoogleドキュメントのひな形を選択します。

PDFのひな形を選択する。

Googleドライブを選択します。

Google ドライブをクリックする。

「請求書」のGoogleドキュメントを選択して、「Select」をクリックします。

Googleドキュメントの「請求書」を選択する。

Templateに「DocID=1....」と表示されたら無事にひな形が選択されました。
続けて、「File Folder Path」と「File Name Prefix」を設定します。
三角フラスコアイコンがあるフィールドをクリックします。

File Folder Path とFile Name Prefix を設定する。

「File Folder Path」はPDFを保存するGoogleドライブの場所を設定します。
Expression Assistantに「"/請求書/"」と入力します。
AppSheet請求書アプリのルートディレクトリに「請求書」フォルダを作成するという意味です。

File Folder Path の Expression Assistant を設定する。

「File Name Prefix」はPDFにつけるファイル名を設定します。
以下の式をコピペして使ってください。

CONCATENATE([件名], " ", [取引先ID].[取引先], "様 ", [請求書番号])

Expression Assistantには以下のように入力します。

File Name Prefix の Expression Assistant を設定する。

このアプリでは請求書のファイル名に「件名 取引先 請求書番号」という名前をつけたいと思います。
CONCATENATEというAppSheet関数は()の中に、つなげたい文字列や [ 列名 ] をカンマ(, )で区切って列挙するだけで1つの文字列にできます。

CONCATENATE関数 CONCATENATE("文字列1", "文字列2", "文字列3", ・・・)
  • Disable Timestamp ? :チェックする
  • Attachment Page Orientation:「Portrait」
  • Attachment Page Size:「A4」

以上で、Taskの設定は完了です。

Disable Timestamp をチェックする。Attachment Page Orientation と Sizeを設定する。

流れを確認する

念のため、Automationの流れを確認してみましょう。
Botsには「請求書PDF発行」というBotがひとつあります。

Bot(ボット)がひとつ追加されたことを確認する。

Eventsには「請求書トリガ」というEventがひとつあります。

Event(イベント)がひとつ追加されたことを確認する。

Processesには「Process for 請求書PDF発行 - 1」がひとつあります。
さきほどの設定手順では、Process(プロセス)を作成する手順はありませんでしたが、Stepを追加すると自動的にProcessも作成されます。
Processの名前はAppSheetが自動的に付けた名前なので、後で変更することもできます。

Process(プロセス)がひとつ追加されたことを確認する。

Tasksには「請求書PDF発行タスク」がひとつあります。

Task(タスク)がひとつ追加されたことを確認する。

Actionを設定する

Botを実行するAction(アクション)を設定します。
AppSheetエディタの左側メニュー「Behavior」をクリック、タブメニュー「Actions」をクリックします。
「New Action」で新しいActionを作成します。

AppSheetエディタ左側メニュー、Behaviorから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」

「請求書発行」Action を設定する。

「Set these columns」は「Add」をクリックして、「トリガ」を設定します。
三角フラスコアイコンをクリックして、Expression Assistantに以下のように入力します。

Set these columns の Expression Assistant を設定する。

この「請求書発行」Acitonを実行すると「トリガ」列の現在の値に1が加算されます。
Eventには「トリガ列の値が変更されたら・・・」という意味の式

  • [_THISROW_BEFORE].[トリガ] <> [_THISROW_AFTER].[トリガ]

を設定しているので、このActionを実行するとAppSheetが「トリガの値が変更された」と判定してBotが実行されるということです。

右上の「Save」をクリックしてActionを保存しましょう。
これでBotを実行する準備ができました。

Botを実行する

Botを実行して請求書をPDFで発行してみましょう。
AppSheetエディタのプレビューで「請求書」を選択し、作成済みの請求書をひとつ選択します。

AppSheetエディタでプレビュー画面を表示して、請求書をひとつ選択する。

さきほど作った「請求書発行」Actionがボタンで表示されています。
ボタンをクリックするとBotが実行されるので、クリックしてみましょう。

「請求書発行」Action ボタンをクリックする。

Botが実行されます。

AppSheet Automation を実行中。

データソースのスプレッドシートを確認してみます。
「請求書」シートの「トリガ」が「1」になっていると思います。
「トリガ」列の値が更新されたので、AppSheetがBotを呼び出して実行します。

「トリガ」列に1が加算された。

では、請求書がPDFで発行されたかを確認してみましょう。
Googleドライブで「AppSheet」フォルダを開きます。
その中に「data」というフォルダがあるので開いてみましょう。

Googleドライブを確認する。

「Invoice-○○○○○○○」というフォルダがあると思うので開いてみましょう(○○○○○○○はowner's IDを含む文字列です)。

Invoiceフォルダを確認する。

「請求書」というフォルダがあると思います。
Taskで設定した保存先の名前です。

「請求書」フォルダの中にある。

請求書PDFが保存されていれば成功です。

請求書がPDFで発行されて保存された。

前回(第6回)作成したGoogleドキュメントのひな形に、各テーブルの値が差し込まれて請求書が作成されました。

AppSheetで請求書がPDFで発行された。

2. AppSheet Automationで請求書のパスを保存する

GoogleドライブにAppSheetが発行した請求書PDFが保存されていることが確認できました。
ここでは、請求書アプリにPDFのリンクを表示して、アプリからPDFを開けるようにしましょう。
第2回で「請求書」テーブルに「請求書ファイル」という列を用意しておきました。この列にPDFのパスを保存します。

AppSheetアプリのフォルダパスを取得する

さきほど、請求書PDFが保存されていた「Invoice-○○○○○○○」というフォルダがありました。
このフォルダのパス(Googleドライブ内の場所)を取得します。

AppSheetエディタの左側メニュー「Info」をクリック、タブメニュー「Properties」をクリックします。
「App Properties」をクリックして設定パネルを開きます。

AppSheetエディタ左側メニュー、info、PropertiesタブでApp Porperties を開く。

「Default app folder」の内容をコピペしてメモしておいてください。
「/appsheet/data/アプリ名-owner's ID」という文字列になっています。

Default app folder のパスをコピペしてメモしておく。

BotにStepを追加する

さきほど作成したBot、「請求書PDF発行」にStepを追加します。
AppSheetエディタの左側メニュー「Automation」をクリック、タブメニュー「Bots」をクリックします。
「Add a step」をクリックします。

Step(ステップ)を追加する。

「Step name」にステップの名前をつけます。
「請求書パス保存ステップ」と名前をつけました。

Step(ステップ)の名前を付ける。

Stepができたら、クリックして選択します。
「Run a task」をクリックして、Stepの種類を変更します。

Step(ステップ)の種類を選択する。

Stepの種類を「Run a data action」に変更します。

Step(ステップ)の種類を「Run a data action」に設定する。

右側に設定パネルが開きます。
はじめに「Set row values」をクリックして選択します。
次に「Set these column (s)」で「請求書ファイル」を選択し、三角フラスコアイコンをクリックします。

Set these columnに値を設定したい列を追加して、式を設定する。

Expression Assistantに以下の式を入力します。
「○○○○○○○」の部分を、コピペしてメモしておいた「Default app folder」の内容「/appsheet/data/Invoice-○○○○○○○」の「○○○○○○○」に置き換えれば大丈夫です。

【請求書のパス式】

CONCATENATE("/appsheet/data/Invoice-○○○○○○○/請求書/",[件名]," ",[取引先ID].[取引先], "様 ",[請求書番号],".pdf")

Expression Assistant は以下のようになります。
CONCATENATE関数を使用して文字列を結合します。

Default app folder のパスをペーストして、パスを完成させる。

設定が完了すると以下のようになります。

Set these columnの設定をしたい列を追加して、式を設定する。

では、AppSheetで請求書を発行してみましょう。
請求書を選択して、「請求書発行」Actionボタンをクリックして発行します。

「請求書発行」Acitonを実行する。

請求書が発行され、Googleドライブに保存されると「請求書ファイル」に請求書のファイル名とリンクが表示されます。
リンクをクリックすると、請求書が表示されると思います。

請求書のパスを取得した。

スプレッドシートの「請求書ファイル」列に、請求書PDFのパスが保存されています。
アプリではこのパスをリンクとして表示しています。
これで、わざわざGoogleドライブにアクセスしなくても請求書を表示したり、別の場所に保存できるようになりました。

スプレッドシートにパスが保存された。

以上で、請求書アプリが完成しました。
このアプリを作ることで、SELECT関数の使い方やAppSheet Automationによる自動化を学ぶことができました。
AppSheetアプリの使い方を身につけるにあたり必須で重要なスキルが含まれています。
是非、ご自身で作ってみてください。

Share Me!

前の投稿
AppSheetで請求書アプリ(第6回)Google Docs で請求書のひな形を作成
次の投稿
AppSheet と Gmail が統合 – dynamic email でできること

関連記事

メニュー