2

リクエストの概要:

FormPanel が doPost(e) で動作することは知っています。

しかし、いくつかの formPanels があり、それぞれが異なる doPost(e) のセットで動作する必要がある場合は?

doPost(e) は固定名なので、doPost1(e)、doPost(2) などのようにいくつかの異なる doPost(e) を持つ方法。

関数 doPost(e) を自動的に検索するため、createSubmitButton と同じ問題があり、各 formPanel の送信をガイドして正しい doPostX(e) を起動する方法

上記が不可能な場合、各プロジェクトが doPost(e) 関数を 1 つだけ持つように制限されているということですか?

ありがとう、

4

2 に答える 2

2

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 をまったく処理していないという欠点があります。

それがあなたを助けることを願っています

乾杯

ニコラス

于 2013-02-05T17:45:41.627 に答える