2016-05-17 3 views
3

マイコードは、ユーザーが送信したGoogleフォームデータを処理してGoogle Docにインポートし、Googleシート機能で決定されたユーザーとファイルを共有し、ユーザー。通知メールなしのアドバンストドライブサービスによるaddEditors()

ユーザのグループは、のように1つの値(セルのリスト - [email protected], [email protected], etc.)から開始し、split(", ")です。addEditors()で使用するための配列です。

DriveApp File.addEditors()メソッドを使用しているときに、その操作に関連付けられた電子メール通知を送信しないで、これらのユーザーの編集権限を設定する必要があります。私が理解しているように、これにはAdvanced Drive Serviceが必要です。私はすでにenabledのスクリプトを持っています。

通知なしでこれらのアクセス許可を追加するための構文と正確なコードは何ですか?

以下の私のコードのサンプル -

function mergeApplication() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Merge Data"); 
    var range = sheet.getActiveRange(); 
    var formSheet = ss.getSheetByName("Form Responses"); 
    var lastRow = formSheet.getLastRow(); 
    var lastColumn = sheet.getMaxColumns(); 
    function checkAndComplete() { 
    var urlColumn = lastColumn; 
    var checkColumn = (urlColumn - 1); 
    var checkRange = sheet.getRange(2, checkColumn, (lastRow - 1), 1); 
    var check = checkRange.getBackgrounds(); 
    var red = "#ff0404"; 
    var yellow = "#ffec0a"; 
    var green = "#3bec3b"; 
    for (var i = 0; i < check.length; i++) { 
     if (check[i] == green) { 
     continue; 
     } else { 
     var statusCell = sheet.getRange((i+2), checkColumn, 1, 1); 
     var urlCell = sheet.getRange((i+2), urlColumn, 1, 1); 
     var dataRow = sheet.getRange((i+2), 1, 1, (lastColumn - 2)); 
     var emailTag = sheet.getRange((i+2), (checkColumn - 2)).getValue(); 
     var emailEditors = emailTag.split(", "); 

...それが使用される場所にマージコードを下スキップ...

var docCopy = docToUse.makeCopy(docName, folderDestination); 
var docId = docCopy.getId(); 
var docToSend = DriveApp.getFileById(docId); 
docToSend.addEditors(emailEditors); 

答えて

2

はここで静かに与えるユーティリティ関数ですGoogleドライブファイルに対するユーザーの書き込み権限

/** 
* Add write permission for the given user to the given document. 
* 
* Uses the Advanced Drive Service, which must be enabled. 
* 
* from: http://stackoverflow.com/a/37289790/1677912 
* 
* @param {string} docId  Document ID to add permissions to. 
* @param {string} userEmail Email address of user to be given editor privileges. 
*/ 
function addEditorSilent(docId, userEmail) { 
    var permissionResource = { 
    role: 'writer', 
    type: 'user', 
    value: userEmail 
    }; 
    var optionalArgs = { 
    sendNotificationEmails: false 
    }; 
    Drive.Permissions.insert(permissionResource, docId, optionalArgs); 
} 

、代わりに:

var docCopy = docToUse.makeCopy(docName, folderDestination); 
var docId = docCopy.getId(); 
var docToSend = DriveApp.getFileById(docId); 
docToSend.addEditors(emailEditors); 

用途:

var docCopy = docToUse.makeCopy(docName, folderDestination); 
var docId = docCopy.getId(); 
for (var i=0; i<emailEditors.length; i++) { 
    addEditorSilent(docId, emailEditors[i]); 
} 
+0

このコードが割り当て権限以外の何かをしていますか?テストの実行中に、Googleドキュメントのコピーが2つ作成されました。助言がありますか? – MasterCrander

+0

私のテストは自分のコードで行われていましたが、明らかに実行可能なバージョンがありませんでしたが、これは不完全でした。しかし、 'makeCopy()'への複数の呼び出しを探します。 – Mogsdad

+0

ありがとう、私はいくつかの 'console.log()'テストを行います。権限リストに電子メールグループを追加すると、そのグループのすべてのメンバーが追加されますか? – MasterCrander

関連する問題