首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么要像我一样执行webapp,谁都会看到effectiveUser和activeUser是编辑器,而不是所有者?

为什么要像我一样执行webapp,谁都会看到effectiveUser和activeUser是编辑器,而不是所有者?
EN

Stack Overflow用户
提问于 2022-03-14 23:48:05
回答 1查看 361关注 0票数 0

因此,我有一些限制在电子表格上的函数,它对受编辑器保护的范围进行了修改。这些函数将在编辑器单击电子表格上的按钮时运行。这些函数还从编辑器无法访问的其他文件中获取数据。因此,按照下面的注释,它必须作为一个web app部署,由我运行,并被任何人访问。

我的理解是,其中必须有一个doGet()函数,并调用web应用程序url。但是,我不知道在哪里添加这个doGet()函数,如下所示。

现有职能的实例:

file: globals.gs,它是将电子表格之外的数据带到文件中的地方。

代码语言:javascript
运行
复制
const CAD_PRODUTO = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const config = {
  get ssBDCadProd() {
    delete this.ssBDCadProd;
    return (this.ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO));
  }
const sheetBDCadProd = config.ssBDCadProd.getSheetByName('CadProduto');

函数位于电子表格中,它根据外部文件中的数据创建一个新的数字:

代码语言:javascript
运行
复制
function gerarRef() {
  try {
    const response = Browser.msgBox('Do you want to create a new record?', Browser.Buttons.YES_NO);
    if (response == 'no') {
      return;
    } else {
      let ref = 0;
      const refExistentes = sheetBDCadProd.getRange(2, 1, sheetBDCadProd.getLastRow(), 1).getValues(); //Calls other file
      let ultRef = Math.max(...refExistentes);
      Logger.log('Ult.: ' + ultRef)
      if (ultRef == 0 || ultRef == '') {
        ref = 10000;
      } else {
        ref += ultRef + 1;
      }
      const refRng = sheetCadProd.getRange('B5').setValue(ref);
      refRng.offset(0, 2).activate();
    }
  } catch (err) {
    Browser.msgBox('Ocorreu um erro: ' + err);
  }
}

除了上面的功能,我还有很多其他的功能。然后如何应用web app方法?

多谢百万!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-15 15:24:45

web应用程序部署设置(如"Run“和”by任何人“)仅在doGetdoPost函数上有效,并且仅当它们被HTTP请求调用时(当它们通过使用web被调用时)。

如果您已通过插入绘图并为其分配函数来在电子表格上设置按钮,则web应用程序部署设置将不会对直接调用Google脚本服务(如SpreadsheetApp )的函数产生任何影响,但如果该函数使用UrlFetchApp服务向您的web应用程序发出HTTP请求,则可能会工作。

下面是一个过于简化的Google脚本服务器端代码(.gs),用于调用web应用程序:

代码语言:javascript
运行
复制
function callMyWebApp(){
  const url = 'put here your web app URL';
  const response = UrlFetchApp.fetch(url); // This will do a GET request
  // do something with the response
}

一种更简单的方法可能是使用可安装触发器,因为它不需要处理另一个“复杂层”,因为它不需要向您的项目(UrlFetchApp)中添加另一个服务,也不需要在每次更新代码时部署web应用程序并制作一个新版本,但是如果您想将编辑器授权的范围保持在最低限度,就必须使用web应用程序方法。

相关

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71475453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档