Как создать ярлык в Google Drive Apps Script вместо нескольких родителей - PullRequest
1 голос
/ 27 мая 2020

Я пытался прочитать об этом здесь: https://developers.google.com/drive/api/v3/shortcuts

И я понимаю основы ярлыков, но не могу понять, как использовать это в коде - синтаксис.

Мне нужно вместо того, чтобы помещать папку в несколько папок, помещать ярлыки в эти папки, названные так же, как и исходная папка.

У меня есть исходная папка с именем Project1, помещенная в Черновики. Ярлыки для этой папки должны быть помещены в Папка 2 / Черновики, Папка 3 / Черновики и Папка 4 / Черновики.

Если я впоследствии изменю имя исходной папки Project1 ex. в «Новое здание» мне нужно найти ярлыки в папках 2, 3 и 4 (по идентификатору? - я могу поместить идентификатор ярлыков в таблицу, откуда я могу перебирать их) - а затем переименовать их как исходные новое имя папки.

И когда я перемещаю Project1 из Черновиков в Подтвержденные. Мне нужно переместить ярлыки из Folder2 / Drafts в Folder2 / Confirmed et c.

В основном так выглядел код basi c для размещения новой папки

        var folder1 = draft.createFolder("DRAFT - "+"Project1");
        var folder1Url = folder1.getUrl();
        var folder1Id = folder1.getId();
        folder2Draft.addFolder(folder1);

При изменении имени папки имя (конечно) изменится в других местах. Но, насколько я понимаю, с ярлыками дело обстоит не так. Я тестировал его с помощью созданных вручную ярлыков, которые подтвердили это.

Часть переименования, которая мне нравится при подтверждении проекта:

   var folder1 = DriveApp.getFolderById(folder1Id);
   var folder1NameOld = folder1.getName();
   var folder1NameNew = folder1NameOld.replace("DRAFT - ","");
   folder1.setName(folder1NameNew);

И я перемещаю файл при подтверждении проекта с помощью простой:

    confirmed.addFolder(folder1);
    draftsFolder.removeFolder(folder1);

Сценарий выполнен в виде электронной таблицы, и я уже поместил все идентификаторы папок в лист данных в файле, чтобы я мог очень легко ссылаться на разные папки и, при необходимости, также собирать Идентификаторы ярлыков, чтобы их можно было переименовать.

Обновление: чтобы задать более четкий вопрос: как это сделать с помощью ярлыков вместо использования нескольких родителей?

function shortcut() {

  var s = SpreadsheetApp.getActive();
  var sheet = s.getActiveSheet();
  var projectFolderId = sheet.getRange('B1').getValue();
  var folder1DraftId = sheet.getRange('B2').getValue();
  var folder2DraftId = sheet.getRange('B3').getValue();

  var folder1 = DriveApp.getFolderById(projectFolderId);
  DriveApp.getFolderById(folder1DraftId).addFolder(folder1);
  DriveApp.getFolderById(folder2DraftId).addFolder(folder1);
}

1 Ответ

2 голосов
/ 28 мая 2020

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите использовать следующий сценарий в качестве ярлыка.

    function shortcut() {
    
      var s = SpreadsheetApp.getActive();
      var sheet = s.getActiveSheet();
      var projectFolderId = sheet.getRange('B1').getValue();
      var folder1DraftId = sheet.getRange('B2').getValue();
      var folder2DraftId = sheet.getRange('B3').getValue();
    
      var folder1 = DriveApp.getFolderById(projectFolderId);
      DriveApp.getFolderById(folder1DraftId).addFolder(folder1);
      DriveApp.getFolderById(folder2DraftId).addFolder(folder1);
    }
    
  • At выше скрипт, folder1 помещается в папки folder1DraftId и folder2DraftId.

Для этого как насчет этого ответа?

Пункты модификации:

  • В этом случае используется метод files.create в Drive API. Но на текущем этапе метод Files: insert в Drive API v2 также может создавать ярлык. Итак, в этом ответе используется Drive API v2 расширенных служб Google.

Измененный скрипт:

Когда ваш скрипт изменяется, он становится следующим. Перед запуском скрипта включите Drive API в расширенных сервисах Google .

От:
var folder1 = DriveApp.getFolderById(projectFolderId);
DriveApp.getFolderById(folder1DraftId).addFolder(folder1);
DriveApp.getFolderById(folder2DraftId).addFolder(folder1);
Кому:
const folderIDs = [folder1DraftId, folder2DraftId];
folderIDs.forEach(f => {
  Drive.Files.insert({
    shortcutDetails: {targetId: projectFolderId},
    parents: [{id: f}],
    title: DriveApp.getFolderById(projectFolderId).getName(),
    mimeType: "application/vnd.google-apps.shortcut"
  });
});

Ссылки:

...