根据您的以下功能,
功能 1. - 创建一个新文件夹并检索 ID。
功能 2. - 在文件夹中创建 doc 文件的副本。
功能 3. - 替换文档中多个 {{TEXT}} 类型标签的文本。
功能 4. - 在文档中插入图像。
功能 5. - 获取 doc 文档的公共链接。
我认为在您的情况下,可以使用以下 3 种模式。
-
所有功能都被视为一个功能。
- 在这种情况下,您的
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 已经提到了这一点。
-
在“功能 1”创建新文件夹 ID 时,从该功能返回文件夹 ID,并在“功能 2”中使用文件夹 ID。并且,在复制 Document 时,从函数返回文档 ID,并将其用于“Function 3”、“Function 4”和“Function 5”。
- 在这种情况下,不需要使用全局变量。为了检索响应,每次使用 curl 命令执行每个函数。但是,在执行每个函数时,需要将每个响应值提供给下一个函数。我认为这可能有点复杂。
-
在“功能 1”创建新文件夹 ID 时,将文件夹 ID 放入 PropertiesService,而在运行“功能 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,
"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 Script 项目的功能。请注意这一点。
参考: