如何知道谷歌应用程序脚本的进度状态



我创建了一个应用程序脚本来自动执行几个任务:

Function 1. - Create a new folder and retrieve the ID.
Function 2. - Create a copy of a doc file in the folder.
Function 3. - Replace the text of several tags of type {{TEXT}} in the document.
Function 4. - Insert an image in the document.
Function 5. - Retrieve the public link of the doc document.

这5个功能在相同的应用程序脚本中使用";全局";函数,该函数允许我检索创建的文件夹和文档的ID我使用cURL(从终端(运行此应用程序脚本。

脚本的持续时间大约为10秒,我想知道是否可以获得一条消息(或文本值(作为响应,该消息将在每个功能完成时更新。

我在互联网和Stackoverflow上查看过,但我发现的所有内容都指向使用电子表格中的"flush"命令来更新单元格的值。我需要的是更新终端中的响应消息。

有人能帮帮我吗?。

非常感谢。

Wardiam

通过以下函数,

函数1.-创建一个新文件夹并检索ID。功能2.-在文件夹中创建文档文件的副本。功能3.-替换文档中多个类型为{{text}}的标记的文本。功能4.-在文档中插入图像。功能5.-检索单据的公共链接。

我认为在您的情况下,可以使用以下3种模式。

  1. 所有函数都被视为一个函数。

    • 在这种情况下,无法实现I would like to know if it is possible to get a message (or a text value) in response that is updated as each function is completed.的目标
    • 为了在每个函数完成时检索响应,每次都使用curl命令执行每个函数。鲁本的评论已经提到了这一点
  2. 当在";函数1";,从该功能返回文件夹ID,并且文件夹ID用在";函数2";。并且,当复制文档时,从函数返回文档ID,并将其用于"复制";函数3"函数4";以及";函数5";。

    • 在这种情况下,不需要使用全局变量。为了检索响应,每次使用curl命令执行每个函数。但是,当执行每个函数时,需要将每个响应值提供给下一个函数。我想这可能有点复杂
  3. 当在";函数1";,文件夹ID被放入PropertiesService;函数2";运行时,将使用从PropertiesService检索到的文件夹ID。并且,当文档被复制时,文档ID被放入PropertiesService,并且当";函数3"函数4";以及";函数5";运行时,将使用从PropertiesService检索到的文档ID。

    • 在这种情况下,不需要使用全局变量。并且,在每个函数运行期间,文件夹ID和文档ID都会被放置和获取。这样,每个函数都可以使用curl命令按顺序运行。因此,我认为使用curl命令的脚本可能会变得有点简单

从以上情况来看,我想在我的回答中提出模式3。

用法:

示例脚本:

作为测试此模式的示例脚本,使用了以下脚本。

// Create a new folder and retrieve the ID.
function function1() {
const folderId = DriveApp.createFolder("sampleFolder").getId();
PropertiesService.getScriptProperties().setProperty("folderId", folderId);
return "Function1: Done.";
}
// Create a copy of a doc file in the folder.
function function2() {
const folderId = PropertiesService.getScriptProperties().getProperty("folderId");
const folder = DriveApp.getFolderById(folderId);
const documentId = DocumentApp.create("sampleDocument").getId();
DriveApp.getFileById(documentId).moveTo(folder);
PropertiesService.getScriptProperties().setProperty("documentId", documentId);
return "Function2: Done.";
}
function function3() {
const documentId = PropertiesService.getScriptProperties().getProperty("documentId");
// do something
return "Function3: Done.";
}
function function4() {
const documentId = PropertiesService.getScriptProperties().getProperty("documentId");
// do something
return "Function4: Done.";
}
function function5() {
const documentId = PropertiesService.getScriptProperties().getProperty("documentId");
// do something
return "Function5: Done.";
}
  • 在这个示例脚本中,文件夹ID和文档ID在每个函数运行期间都被放置和获取
  • 在这个示例脚本中,不包括任何错误处理。所以当你使用这个时,请添加它

测试

为了从每个函数中检索每个响应,在本例中,脚本运行5个curl命令。示例脚本如下。

#!/bin/sh
accessToken="###your access token###"
url="https://script.googleapis.com/v1/scripts/###your script ID###:run"
curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{"function": "function1", devMode: true}" ${url}
curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{"function": "function2", devMode: true}" ${url}
curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{"function": "function3", devMode: true}" ${url}
curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{"function": "function4", devMode: true}" ${url}
curl -X POST -H "Authorization: Bearer ${accessToken}" -H "Content-Type: application/json" -d "{"function": "function5", devMode: true}" ${url}

当运行上述脚本时,将获得以下结果。

{
"done": true,
"response": {
"@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
"result": "Function1: Done."
}
}
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
"result": "Function2: Done."
}
}
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
"result": "Function3: Done."
}
}
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
"result": "Function4: Done."
}
}
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.apps.script.v1.ExecutionResponse",
"result": "Function5: Done."
}
}

当然,作为测试,您也可以手动运行每个curl命令。

注:

  • 在这个答案中,假设您已经能够使用Google Apps Script API执行Google Apps脚本项目的功能。请小心

参考:

  • 方法:scripts.run

相关内容

  • 没有找到相关文章

最新更新