为什么 webapp 以我的身份执行,任何人访问都显示 effectiveUser 和 activeUser 是编辑者,而不是所有者?
Why webapp to execute as me, accessed by anyone shows effectiveUser and activeUser being the editor, not the owner?
所以,我有一些绑定到电子表格的功能,这些功能可以对受编辑保护的范围进行修改。当编辑点击电子表格上的按钮时,函数将是 运行。这些函数还从其他文件中获取数据,编辑者无法访问这些文件。
因此,根据下面的评论,它必须由我部署为 web app
、运行 并由任何人访问。
我的理解是里面一定有一个doGet()
函数,要调用web app url。但是,我不知道在哪里添加这个 doGet()
函数,如下所示。
现有功能示例:
file: globals.gs
,这是将电子表格之外的数据导入文件的地方
const CAD_PRODUTO = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const config = {
get ssBDCadProd() {
delete this.ssBDCadProd;
return (this.ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO));
}
const sheetBDCadProd = config.ssBDCadProd.getSheetByName('CadProduto');
电子表格中的函数,它根据外部文件中的数据创建一个新数字:
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
方法?
万分感谢!
像“运行 as me”和“By Anyone”这样的 Web 应用程序部署设置仅对 doGet
和 doPost
函数有效,并且仅当它们通过 HTTP 调用时请求(当使用网络应用程序调用它们时 URL)。
如果您通过插入绘图并为其分配函数来设置电子表格上的按钮,则网络应用程序部署设置不会对直接调用 Google Apps 脚本服务的函数产生任何影响类似于 SpreadsheetApp,但如果该函数使用 UrlFetchApp 服务向您的 Web 应用程序发出 HTTP 请求,则可能会起作用。
这是一个过度简化的 Google Apps 脚本服务器端代码 (.gs),用于调用网络应用程序:
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-app 并在每次更新代码时创建一个新版本,但如果您希望将编辑授权的范围保持在最低限度,则必须使用网络应用程序方法。
相关
所以,我有一些绑定到电子表格的功能,这些功能可以对受编辑保护的范围进行修改。当编辑点击电子表格上的按钮时,函数将是 运行。这些函数还从其他文件中获取数据,编辑者无法访问这些文件。
因此,根据下面的评论,它必须由我部署为 web app
、运行 并由任何人访问。
我的理解是里面一定有一个doGet()
函数,要调用web app url。但是,我不知道在哪里添加这个 doGet()
函数,如下所示。
现有功能示例:
file: globals.gs
,这是将电子表格之外的数据导入文件的地方
const CAD_PRODUTO = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const config = {
get ssBDCadProd() {
delete this.ssBDCadProd;
return (this.ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO));
}
const sheetBDCadProd = config.ssBDCadProd.getSheetByName('CadProduto');
电子表格中的函数,它根据外部文件中的数据创建一个新数字:
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
方法?
万分感谢!
像“运行 as me”和“By Anyone”这样的 Web 应用程序部署设置仅对 doGet
和 doPost
函数有效,并且仅当它们通过 HTTP 调用时请求(当使用网络应用程序调用它们时 URL)。
如果您通过插入绘图并为其分配函数来设置电子表格上的按钮,则网络应用程序部署设置不会对直接调用 Google Apps 脚本服务的函数产生任何影响类似于 SpreadsheetApp,但如果该函数使用 UrlFetchApp 服务向您的 Web 应用程序发出 HTTP 请求,则可能会起作用。
这是一个过度简化的 Google Apps 脚本服务器端代码 (.gs),用于调用网络应用程序:
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-app 并在每次更新代码时创建一个新版本,但如果您希望将编辑授权的范围保持在最低限度,则必须使用网络应用程序方法。
相关