2016-12-30 17 views
1

私はGoogle App ScriptとGoogle Spreadsheet onOpen()トリガーを使用しています。私はGoogleスプレッドシートにログインしているユーザーをロックしています。GoogleアプリケーションスクリプトのSession.getActiveUser()はクロスドメインユーザーでは機能しません

フォーラムで見つけたクロスドメインのメールIDをロギングしないという制限があります。私は、スプレッドシートの所有者だとそれだけで私たちの会社のドメインの電子メールIDを記録します

1]:

function onOpen(e) 
{ 
    try 
    { 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Action') 
    .addItem('Add Data', 'addData') 
    .addToUi() 

    var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Login Details"); 
    sheet.appendRow([Session.getActiveUser().getEmail(),new Date()]); 

    } 
    catch(e) 
    { 
    Logger.log(e); 
    } 
} 

つの観測開く時から()機能:ここで

は同じのためのコードです。 (スプレッドシートの自動onOpen())

2]スプレッドシートの制限付きスクリプトを開いてonOpen()を実行すると、他のドメインからログオンしたユーザーがログに記録されます。

なぜ同じ理由がありますか?また、ユーザーがクロスドメインで回避する方法はありますか?

+0

あなたは、どのようなフォーラム「私は、フォーラムで見つけクロスドメインの電子メールIDをロギングない」とはどういう意味ですか?また、2回目の観察では、ログインしたユーザーがログに記録されていると言いますが、問題は何ですか?それはロギングかロギング電子メールIDですか?はい、ログインしたユーザーのみを取得します。スクリプトに権限を与えたユーザーを取得する場合は、getEffectiveUser()を使用します。私が言及した上記の点について説明してください。 –

+0

@ShyamKansagra:On StackOverflow&[link](https://developers.google.com/apps-script/reference/base/session#getActiveUser())私のドメインはabc.comで、クライアントドメインはxyz.comで、abc.comでは機能が正常に機能しています。私は[email protected]でログインしたときに、「ログインの詳細」ワークシートにユーザー名を記録します。しかし、もし私が[email protected]でログインしていたら、空のユーザー名を取得します。私が[email protected]でログオンし、スクリプトエディタを開いてonOpenを実行すると、client @xyz.comとして電子メールIDが記録されますが、直接スプレッドシートを開くと、それは表示されません。 –

+0

[email protected]でトリガーを設定するのを忘れてしまったのかもしれません....あなたのドメインでonOpen()のトリガーを設定している場合は同様に、クライアントのIDにトリガーを設定しなければならないコードをコピーしないでください。 –

答えて

0

私はSession.getActiveUser().getEmail()は、その人がオーナーでないときに外部ドメインのonOpenトリガーに問題があると思います。

また、1分間あたりの自動トリガーもアクティブユーザーを記録できません。ここで

が回避策です:

は、スプレッドシート自体にメニューを追加し、クリックされたオプションを使用して、必要な行を追加する機能を実行します。として、Session.getActiveUser().getEmail()私たちはスクリプトから手動で関数を実行しているときに動作しています。

使用このコード:

function addMenu() 
{ 
    var ui = SpreadsheetApp.getUi(); 

    ui.createMenu('Log user') 
     .addItem('Run script', 'appendRow') 
    .addToUi() 
} 

そしてまた、この機能を追加します。

function appendRow() 
{ 
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("YOUR_SHEET").appendRow([Session.getActiveUser().getEmail(),new Date()]); 
} 

、あなたは、アクティブなユーザーをログインそのログインユーザーに移動し、実行]をクリックしたいときは、スクリプトを入力すると、行が追加されます。

また、のonOpen triggerをaddMenu()の機能をクライアント側またはあなた側に設定することを忘れないでください。

詳細については、我々はこれを読むことができます:Class session

+0

あなたの回避策に感謝しますが、スプレッドシートの開いた状態でユーザーをログに記録します。 –

関連する問題