Google Apps脚本是否允许任何内省?

时间:2014-10-03 17:48:31

标签: google-apps-script introspection

  1. Google Apps脚本可以学习自己的名字吗?还是它的身份?

  2. 可以获取其包含文件夹的ID吗?

  3. 可以了解它在文件夹层次结构中的位置吗?

  4. 脚本可以" A"获取/设置脚本" B"?

  5. 的属性
  6. 脚本可以" A"编辑脚本" B"?

  7. 使用的库的任何方面
  8. 脚本可以" A"发布脚本" B"?

  9. 脚本可以" A"改变脚本的文字" B"?

  10. 更新2014/10/03 16:00 EDT

    1. 脚本可以" A"管理脚本的版本" B"?

    2. 脚本可以" A"自己做5,6,7或8中的任何一个?

2 个答案:

答案 0 :(得分:1)

  1. Google Apps脚本可以学习自己的名字吗?还是它的身份?
  2. 不是这样的。通常的做法是在包含自己的ID的脚本中创建一个全局常量字符串。使用ID,您可以使用

    获取脚本文件名
    var SCRIPT_ID = 'abcdefghijklmnopqrstuvwxyz0123456789'; // Constant
    ...
    var scriptFileName = DriveApp.getFileById(SCRIPT_ID).getName();
    

    相反,如果您拥有脚本的文件名,则可以使用DriveApp.getFilesByName(name)然后在文件对象上调用getId()来获取其ID。但是,由于多个文件可以具有相同的名称,因此您需要处理重复的可能性。

    请注意ScriptApp.getService().getUrl()将返回null,除非脚本部署为Web应用程序,在这种情况下,它将返回Web应用程序界面的URL,而不是脚本文件本身。

    1. 可以获取其包含文件夹的ID吗?
    2. 是。但是,重要的是要记住Drive中的文件可能放在多个文件夹中,因此有多个父文件。

      function getScriptParent() {
        var thisScript = DriveApp.getFileById(myId);
        var parents = thisScript.getParents();
        while (parents.hasNext()) {
          var folder = parents.next();
          Logger.log(folder.getId());
        }
      }
      
      1. 可以了解它在文件夹层次结构中的位置吗?
      2. 通过查找每个祖先文件夹的父项,可以将文件的路径追溯回根目录。但是,同样,Drive中的每个文件和文件夹都可以有多个父项,因此查找路径并不简单。如果您只有一个有效的路径,您可以只取每个文件/文件夹的第一个父级并向后退。如果您想要所有有效路径,那么您可能希望实现BFS或DFS来查找和记录它们。

        1. 脚本“A”可以获取/设置脚本“B”的属性吗?
        2. 无法从其他脚本访问脚本的ScriptProperties。如果要在脚本之间发送数据,最好的选择是使用某种外部数据存储,例如通过JDBC访问的SQL数据库。

          1. 脚本“A”可以编辑脚本“B”使用的库的任何方面吗?
          2. 如果您询问脚本A是否可以更改脚本B包含的库,那么不,这是不可能的。脚本B无法以编程方式更改它使用的库 - 这些选择必须在脚本编辑器界面中进行。

            1. 脚本“A”可以发布脚本“B”吗?
            2. 没有

              1. 脚本“A”可以改变脚本“B”的文本吗?
              2. 没有

                1. 脚本“A”可以管理脚本“B”的版本吗?
                2. 没有

                  1. 脚本“A”可以自行执行5,6,7或8中的任何一项吗?
                  2. 通常不会 - 只能通过编程控制网络应用程序解除。脚本可以通过ScriptApp.Service方法将自己的部署作为Web应用程序进行管理。有关详细信息,请参阅ScriptApp.Service.enable(restriction)方法。

答案 1 :(得分:0)

一些参考文献回答了你的一些(众多)问题:(如果我想到其他答案元素,我会更新)


获取脚本自己的网址:ScriptApp.getService().getUrl()


从另一个脚本中读取Google Apps脚本的内容:Is it possible to read the contents of a Google Apps Script from another Script

ScriptApp.getResource("Code").getDataAsString();


找到当前脚本文件所在文件夹的路径:

function getScriptFolderTree() {
  var thisScript = getThisScriptInDrive();
  var names = []
  var Ids = []
  var folder = thisScript.getParents()[0];
  while (folder.getName() != "Root"){
      names.unshift(folder.getName());
      Ids.unshift(folder.getId());
    var parents = folder.getParents();
       var folder = parents[0];
  }
Logger.log('Root/'+names.join().replace(/,/g,'/'))  
Ids.unshift(DocsList.getRootFolder().getId())
Logger.log(Ids)  
}


function getThisScriptInDrive() {
  return DocsList.find("poiuytrezazertyujhgfdsdcvcxyydryfhchfh")[0];
}

Borrowed from this post(Corey G原始回答+我的开发示例)


(待完成......)