承認式フォームの誕生!
GoogleAppsのフォームからの投稿に承認機能を付与する
承認式フォームの作成が、ひとまず完成しました。
フォームからの投稿は、スプレッドシートに収容されますが、
その収容された情報と同じ行に、メールからのワンアクセスだけで、
対象セルに承認のマーキングを行うというものです。
メールからのアクセスによって送ることのできる情報は、URLのみです。
なので最初はスプレッドシートに、アクセス時に起動する関数があったので、
新規で自動作成したスプレッドシートごと、もしくはシートのページごとのURLの違いと併用し、
それで判定を行う事を考えていたのですが、それではスクリプト動作の承認が必要になって
多重にボタンを押す必要が出てきたりなどなど、いろいろ効率も悪かったため、
「ウェブアプリケーション」として作成する方法に移行しました。
今考えると、スプレッドシートのアクセス時に行うなんて、
なんと原始的な方法だったのでしょう。
「ウェブアプリケーション」を使用すると、
URLの付加情報、つまり「パラメーター」というものを、
スクリプト上で変数として受け取る事が可能となります。
しかもそれが日本語の文字列を、そのまま使えるというのだからイカしてるとは、
前に書いた気がします。
関数名を「doGet」にする事で、ウェブアプリケーションとして動作した際に、
最初に自動的に動作するURLとなります。
パラメーターとなる部分は、ウェブアプリケーションとして導入時に紹介されるURLの後に、
?num=10&text=あいうえお
のように追加した部分です。
「?」で区切ることで、そこから先はパラメーターであると定義し、
「&」で区切ることで、複数のパラメーターの作成が可能です。
それらは「doGet(e)」の仮引数の中に収容されており、
「e.parameter[“num”]」で取り出す事が可能となります。
URLが「(ウェブアプリケーションのURL)?num=10&text=あいうえお」とした場合、
「e.parameter[“num”]」で取り出せるのは「10」であり、
「e.parameter[“text”]」なら「あいうえお」という文字列が取り出せます。
数字の場合は、数字か文字列か忘れたけど、「-0」すれば数字になるようなので、まぁいいか。
認証時に表示させるHTMLファイルは、スクリプトエディタ内で、
新規でHTMLファイルを作成し、上記の関数で呼び出します。
HTMLファイルを変数として定義しておき、
それを「doGet」上の最後に戻り値として出せば出力できます。
このHTMLファイルが、画面に描画されます。
スタイルなども、いつも通りに書くことができますが、難点はプレビューができないこと。
なので、別のHTMLエディタなどで作成しておき、それをコピペする、
もしくはカンで勝負するのがいいでしょう。
このHTML内で「<?= 関数名 ?>」を書き込むと、その関数の戻り値を表示できます。
たとえば・・・
function text(){
var string = “かきくけこ”;
return string;
}
この関数の結果を、「<?= text(); ?>」で表示可能です
(この場合、「かきくけこ」と表示)。
ウェブアプリケーションとして導入するには、
まずはスクリプトを「バージョン」として保存しておく必要があります。
「ファイル」から「バージョンを管理 試用運用中」を選択。
「試用運用中」が妙に気になるのですが、いつ本格運用になるのでしょう。
「バージョン」として保存したスクリプトを、
「ウェブアプリケーション」にするには、
「公開」→「ウェブ アプリケーションとして導入」を選択するか、
ボタンをクリックするだけです。
できれば、バージョン管理のほうも、
このボタンをワンタッチで出来るようになってほしいところです。
「ウェブ アプリケーションとして導入」画面においては、
「プロジェクト バージョン」は、
とりあえず数字の大きなものを(正確にはバージョン管理の際のバージョンを)。
「次のユーザーとしてアプリケーションを実行」では、ようするに、
スクリプトの動作を行うアカウントが、スクリプトの作者(自分)か、
アプリケーションを動作させる相手になるかです。
相手に動作させるようにすると、動作の際にスクリプトの承認が行われたり、
相手がアクセスできないシートなどを読み込んでいる場合にエラーが起きるので、
基本的には、「自分」でいいかも。
「アプリケーションにアクセスできるユーザー」は、
ドメイン外の人にも使わせたい場合は、「全員」にしておくといいと思います。
URLのパラメーターを組んで、それを参照しまくっているようなスクリプトでは、
どのみち外部の人間がアプリケーションのURLのみでアクセスしても、
何も返されないと出るだけです。
なんなら、自動生成したパスワードみたいなものをパラメーターに仕込んでおき、
それを起動の条件にするのもいいでしょう。
これらのシステムを制作するには、慣れれば大体動作が想像できるのですが、
最大の難点は、プレビューができないこと。
それは仕方ないにしても、「バージョン管理」と、「アプリケーションとして導入」の、
2つの手順を踏む必要があるのも、少々面倒な点ですね。
しかし、これをマスターすれば、GoogleAppsを利用して、
色々なシステムの構築が可能になりますし、
冒頭で書いた、新規作成したスプレッドシートを利用して・・・みたいなやり方よりも、
ずいぶんラクになります。