doPost および doGet 関数の最大の問題は、プロジェクトごとに 1 つの doGet と 1 つの doPost しか持てないことです。これは、これらの関数が共有リソースを使用し、この種の関数が 1 つのプロジェクトの関数間で共有されるためです。
実際には、1 つのプロジェクトで異なることを行う複数の doPost クエリを使用するための 2 つの回避策があります (少なくとも私は知っていて、そのうちの 2 つだけをテストしました)。
最も簡単な (そして最良の) 方法は、doPost 関数を必要とするタスクごとに 1 つの doPost 関数で異なる関数を使用することです。ここでの秘訣は、プロジェクト内のさまざまなフォームを区別するのに役立つ隠しフィールドをフォームに追加する必要があるということです。
次に、「if()else if()else」ブロックを追加して、隠しフィールドの値に応じて適切な関数を選択できます。
たとえば、2 つの関数がある場合は、次のことができます。
function doGet(e){
var app=UiApp.createApplication();
some stuff;
return app;
}
function doPost(e){
some stuff
if(e.parameter.form=="value1"){
function1(e,otherParameters);
}
else if(e.parameter.form=="value2"){
function2(e,otherParameters);
}
else{
}
some other stuff
}
function function1(e,otherParameters){
var app=UiApp.getActiveApplication();
var panel=app.createVerticalPanel();
var formPanel=app.createFormPanel();
var button=app.createSubmitButton();
var formHidden=app.createHidden().setName("form");
other widgets;
panel.add(formHidden);
panel.add(other widgets);
panel.add(button);
formPanel.add(panel);
some stuff;
app.add(formPanel);
}
function function2(e,otherParameters){
var app=UiApp.getActiveApplication();
var panel=app.createVerticalPanel();
var formPanel=app.createFormPanel();
var button=app.createSubmitButton();
var formHidden=app.createHidden().setName("value2");
other widgets different from those in function1;
panel.add(formHidden);
panel.add(other widgets);
panel.add(button);
formPanel.add(panel);
some stuff different from what you have in function1;
app.add(formPanel);
}
doPost 関数がある別のプロジェクト (Project2 など) を作成し、このプロジェクトを Web アプリとしてデプロイすることもできます。
アイデアは、FormPanel の setAction("url") メソッドを使用して、特定のフォームからいくつかの URL に情報を送信できるということです。このメソッドを使用すると、クエリを処理する Web ページにフォームのコンテンツを送信できます。したがって、このメソッドの文字列値を Web アプリの URL に設定すると、Google スクリプト フォームのコンテンツがこのアプリに送信されます。これは、doPost 関数を使用してクエリを処理するアプリです。
このオプションは、開発が少し難しく、現在 FileUpload からの Blob をまったく処理していないという欠点があります。
それがあなたを助けることを願っています
乾杯
ニコラス