google-apps-script - 谷歌脚本: multiple doPost in one project

标签 google-apps-script

请求摘要:

我知道 FormPanel 可以与 doPost(e) 配合使用。

但是如果我有几个 formPanel,并且每个 formPanel 都需要使用不同的 doPost(e) 集?

由于 doPost(e) 是固定名称,如何拥有一些不同的 doPost(e),如 doPost1(e)、doPost(2) 等。

与createSubmitButton同样的问题,因为它自动查找函数doPost(e),如何引导每个formPanel的提交触发正确的doPostX(e)

如果上述不可能,是否意味着每个项目仅限于只有单个 doPost(e) 函数?

谢谢

最佳答案

doPost和doGet函数可能存在的问题是每个项目最多只能有一个doGet和一个doPost。这是因为这些函数使用共享资源,因此此类函数在一个项目的函数之间共享。

实际上有两种解决方法(至少我知道并且只测试了其中两种)来使用多个 doPost 查询,这些查询在一个项目中执行不同的操作。

最简单(也是最好)的方法是在单个 doPost 函数中使用不同的函数,每个需要 doPost 函数的任务都使用一个函数。 这里的技巧是,您需要在表单中添加一个隐藏字段,以帮助您区分项目中的不同表单。

然后您可以添加“if()else if()else” block 来根据隐藏字段的值选择正确的函数。

例如,如果您有两个功能,您可以执行以下操作:

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。 使用此方法,您可以将表单内容发送到将处理您的查询的网页。因此,如果您将此方法的字符串值设置为您的网络应用程序的 url,您将向此应用程序发送 google-script 表单的内容。这个应用程序将使用其 doPost 函数来处理查询。

此选项开发起来有点困难,并且存在当前根本不处理来自 FileUpload 的 Blob 的缺点。

希望对你有帮助

干杯

尼古拉斯

关于google-apps-script - 谷歌脚本: multiple doPost in one project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14249237/

相关文章:

javascript - 如何让触发器在复制的电子表格+脚本中工作?

javascript - 谷歌应用程序脚本 html 选择从电子表格数据加载的选项

javascript - 如何使用谷歌应用程序脚本刷新javascript中的标签

google-apps-script - 如何从Google Apps脚本中的数据单元中检索超链接?

google-apps-script - 复制模板电子表格脚本时,可在谷歌电子表格脚本中安装 onEdit 触发器

google-apps-script - 按列名而不是列索引获取列值

google-apps-script - 使用 Google Apps 脚本获取当前脚本版本

javascript - Google Script HTML 服务中的可点击超链接未打开

javascript - 如何在 Google Script 中传递所有数组

google-apps-script - 如何使用脚本在 Google 表单上禁用 "Response receipts"?