ボタンだけを含むUIをユーザーに最初に提示するスクリプトがあります。そのボタンをクリックすると、スクリプトはドキュメントを調べて、一部のファイルの所有権を変更します。
スクリプトをロードすると、ユーザーは赤い枠線の付いた標準の「認証が必要」ページで迎えられます。ユーザーがボタンをクリックしてアプリに必要な権限を付与すると、ボタンのあるページに移動します。
ただし、ボタンをクリックすると、次のようなダイアログが表示されます。
エラーが発生しました:そのアクションを実行するには認証が必要です。
アプリは、スクリプトを実行するユーザーとして実行するように設定されており、スクリプトアクセスは「誰でも」に設定されています。
何が間違っているのかについて何か考えはありますか?
私のdoGet():
function doGet(e) {
var app = UiApp.createApplication();
var button = app.createButton('Transfer');
app.add(button);
var handler = app.createServerHandler('init');
button.addClickHandler(handler);
return app;
}
init()メソッドは、特定のフォルダー(スクリプト内のIDによって静的に設定されます)を調べ、現在のユーザーが所有するファイルを探し、所有権を別のユーザーに譲渡します。
function init() {
// Create new log as a a Drive document
var log = DocsList.createFile("Ownership Transfer Log");
var user = Session.getActiveUser();
var targetEmail = "newemail@example.com";
transferFolderOwnership('[Drive folder ID]', user.getEmail(), targetEmail, log);
}
そしてtransferFolderOwnership:
function transferFolderOwnership(folderId, userEmail, targetEmail, log) {
var rootFolder = DocsList.getFolderById(folderId);
var files = rootFolder.getFiles();
// Transfer files
var file;
for (var i = 0; i < files.length; i++) {
file = DriveApp.getFileById(files[i].getId());
if (file.getOwner() == userEmail) {
file.transferOwnership(targetEmail);
}
}
// Do the same for folders
}