- Может ли скрипт Google Apps узнать свое собственное имя? или его идентификатор?
Не как таковой. Обычной практикой является создание в скрипте глобальной константной строки, содержащей собственный идентификатор. С идентификатором вы можете получить имя файла сценария с помощью
var SCRIPT_ID = 'abcdefghijklmnopqrstuvwxyz0123456789'; // Constant
...
var scriptFileName = DriveApp.getFileById(SCRIPT_ID).getName();
И наоборот, если у вас есть имя файла сценария, вы можете получить его идентификатор, используя DriveApp.getFilesByName(name)
, а затем вызывая getId()
для файловых объектов. Однако, поскольку несколько файлов могут иметь одно и то же имя, вам необходимо учитывать возможность дублирования.
Обратите внимание, что ScriptApp.getService().getUrl()
вернет null
, если сценарий не развернут как веб-приложение, и в этом случае он вернет URL-адрес интерфейса веб-приложения, а не сам файл сценария.
- Может ли он получить идентификатор содержащей его папки?
Да. Однако важно помнить, что файлы на Диске могут находиться в нескольких папках и, следовательно, иметь несколько родителей.
function getScriptParent() {
var thisScript = DriveApp.getFileById(myId);
var parents = thisScript.getParents();
while (parents.hasNext()) {
var folder = parents.next();
Logger.log(folder.getId());
}
}
- Может ли он узнать, где он находится в иерархии папок?
Можно проследить путь файла обратно к корню, найдя родителей каждой папки-предка. Однако, опять же, у каждого файла и папки на Диске может быть несколько родителей, поэтому найти пути не так просто. Если у вас есть только один допустимый путь, вы можете просто взять первого родителя каждого файла/папки и сделать шаг назад. Если вам нужны все действительные пути, вам, вероятно, потребуется реализовать BFS или DFS, чтобы найти и записать их все.
- Может ли сценарий "А" получить/установить свойства сценария "Б"?
Невозможно получить доступ к ScriptProperties скрипта из другого скрипта. Если вы хотите отправлять данные между сценариями, лучше всего использовать какое-либо внешнее хранилище данных, например базу данных SQL, доступ к которой осуществляется через JDBC.
- Может ли сценарий "А" редактировать какие-либо аспекты библиотек, используемых сценарием "Б"?
Если вы спрашиваете, может ли сценарий А изменить библиотеки, включаемые сценарием Б, то нет, это невозможно. Сценарий B также не может программно изменить используемые им библиотеки — этот выбор необходимо сделать в интерфейсе редактора сценариев.
- Может ли сценарий "А" опубликовать сценарий "Б"?
No.
- Может ли сценарий "А" изменить текст сценария "Б"?
No.
- Может ли сценарий "А" управлять версиями сценария "Б"?
No.
- Может ли скрипт "А" сделать с собой любое из действий 5, 6, 7 или 8?
В основном нет — программно можно управлять только деполированием веб-приложений. Сценарий может управлять собственным развертыванием в качестве веб-приложения с помощью ScriptApp.Service методы. См. ScriptApp.Service.enable(restriction) метод для получения дополнительной информации.
person
Ryan Roth
schedule
20.10.2014