2016-03-24 12 views
0

私のサービスアカウントがファイルの所有者でないGoogleドライブのファイルの所有権を変更しようとしています。私はこの配列は、バッチが私のサービスアカウントに所有権が変更されるbatchPermissionChangeであるために渡す必要がありますアレイを別の関数に渡す

var files = [ 
    {[email protected], id=CjOqUeno3Yjd4VEFrYzg}, 
    {[email protected], id=CjOqUYWxWaVpTQ2tKc3c}, 
    {[email protected], id=CjOqUNTltdHo2NllkcWs}, 
    {[email protected], id=CjOqUVTRRMnU2Y0ZJYms}, 
    {[email protected], id=CjOqUXzBmeE1CT0VLNkE}, 
    {[email protected], id=CjfKj4ur7YcttORkXTn8D2rvGE}, 
    {[email protected], id=CjOqUY3RFUFlScDBlclk} 
    ] 

次の機能:

function getDriveFiles(folder, path) { 
    var folder = DriveApp.getFolderById("0B23heXhtbThYaWdxzMc"); 
    var path = ""; 
    var files = []; 
    var fileIt = folder.getFiles(); 
    while (fileIt.hasNext()) { 
     var f = fileIt.next(); 
     if (f.getOwner().getEmail() != "[email protected]") 
     files.push({owner: f.getOwner().getEmail(), id: f.getId()}); 
    } 
    return files; 
} 

だから私の配列は次のようになります。しかし、ユーザーごとにbatchPermissionChangeを実行したいと思います。たとえば、[email protected]に4つのファイルがある場合、batchPermissionChange関数を4回トリガしたくない場合は、[email protected]で1回トリガし、4つのfileIDを含めます。

function batchPermissionChange(ownerEmail, filesArray){ 
Do batch job Google... https://www.googleapis.com/batch 
} 

質問

がどのように私は彼の4つのFILEID年代に例えば[email protected]のための関数のbatchPermissionChange(ownerEmail、filesArray)を実行していますか?私は、配列の各項目に対して 'batchPermissionChange'を実行するように配列をループすることができますが、ユーザー[email protected]に対してバッチ関数を4回トリガします。

+0

だから問題は何ですか?何が問題になっていますか?あなたは実際にここで質問をしません。 – forgivenson

+0

質問が更新されました。 –

答えて

1

ファイルのリストを取得するときに、すべてのファイルを単一の配列にプッシュするのではなく、マップ内のキーが所有者であり、配列がファイルのリストである配列マップを作成できますその所有者。このようにそれを行う、

{ 
    '[email protected]': ['CjOqUeno3Yjd4VEFrYzg', 'CjOqUYWxWaVpTQ2tKc3c', 'CjOqUNTltdHo2NllkcWs', 'CjOqUVTRRMnU2Y0ZJYms'], 
    '[email protected]': ['CjOqUXzBmeE1CT0VLNkE'], 
    '[email protected]': ['CjfKj4ur7YcttORkXTn8D2rvGE', 'CjOqUY3RFUFlScDBlclk'] 
} 

さて、あなたはbatchPermissionChangeを呼び出したいあなたのコードの地域で:

function getDriveFiles(folder, path) { 
    var folder = DriveApp.getFolderById("0B23heXhtbThYaWdxzMc"); 
    var path = ""; 
    var files = {}; 
    var fileIt = folder.getFiles(); 
    while (fileIt.hasNext()) { 
    var f = fileIt.next(); 
    var owner = f.getOwner().getEmail(); 
    var id = f.getId(); 

    if (owner != "[email protected]") { 
     // if the owner doesn't exist yet, add an empty array 
     if (!files[owner]) { 
     files[owner] = []; 
     } 

     // push the file to the owner's array 
     files[owner].push(id); 
    } 
    } 
    return files; 
} 

filesオブジェクトは、次のようなものを探してしまいます

for(var ownerEmail in files) { 
    if(files.hasOwnProperty(ownerEmail)) { 
    // NOTE: I'm not sure what the first parameter should be for this, but 
    // this shows how to send the array of files for just one user at a 
    // time, so change the first parameter if I got it wrong. 
    batchPermissionChange(ownerEmail, files[ownerEmail]); 
    } 
} 
+0

まさにこのようなものが私が探しているものです。私はあなたの提案を試みましたが、配列は以前と同じように見えています。配列は同じに見えるべきか、私は視覚的な変化を見ることができるはずですか? –

+0

それは非常に異なっているはずです。私は答えを例で更新しました。 – forgivenson

+0

私は、ファイルの配列を送信する最後の部分が間違っているかもしれない、私は "var owner;と "ownerEmail"です。 –

関連する問題