如何了解 Google Apps 脚本的进度状态 示例脚本:测试

问题描述

我创建了一个 Apps 脚本来自动执行多项任务:

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 个函数使用“全局”函数在同一个 Apps 脚本中顺序执行,该函数允许我检索创建的文件夹和 Doc 文档的 ID。 我使用 cURL(从终端)运行此 Apps 脚本。

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

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

有人可以帮我吗?

非常感谢。

瓦迪姆

解决方法

从您的以下功能中,

功能 1. - 创建一个新文件夹并检索 ID。 功能 2. - 在文件夹中创建 doc 文件的副本。 功能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 命令执行每个函数。 Rubén's comment 已经提到了这一点。
  2. 在“功能1”创建新文件夹ID时,文件夹ID从函数返回,文件夹ID用于“功能2”。并且,当文档被复制时,文档 ID 从函数中返回并将其用于“函数 3”、“函数 4”和“函数 5”。

    • 在这种情况下,不需要使用全局变量。为了检索响应,每次使用 curl 命令执行每个函数。但是,当每个函数执行时,每个响应值都需要提供给下一个函数。我认为这可能有点复杂。
  3. 在“Function 1”处创建新文件夹 id 时,将文件夹 ID 放入 PropertiesService,当运行“Function 2”时,使用从 PropertiesService 检索到的文件夹 ID。并且,在复制 Document 时,将文档 ID 放入 PropertiesService,当运行“Function 3”、“Function 4”和“Function 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,"result": "Function2: Done."
  }
}
{
  "done": true,"result": "Function3: Done."
  }
}
{
  "done": true,"result": "Function4: Done."
  }
}
{
  "done": true,"result": "Function5: Done."
  }
}

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

注意:

  • 在本回答中,假设您已经能够使用 Google Apps Script API 执行 Google Apps Script 项目的功能。请注意这一点。

参考:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...