2017-05-08 15 views
2

私はGoogleスプレッドシートのスクリプトで作業していますが、編集トリガがトリガされたときにHTMLダイアログテンプレートが生成される。Googleのスクリプトコードエディタで手動で関数を実行する代わりに、シートインターフェイスのエディタに権限ポップアップを表示

ScriptApp.newTrigger('onEditSimulation') 
    .forSpreadsheet(SpreadsheetApp.getActive()) 
    .onEdit() 
    .create(); 

とHTMLテンプレートのボタンがあり、onclickのに結合するものは次のとおりです。ボタンの上に結合

onclick = "google.script.run 
        .withSuccessHandler(sended) 
        .withUserObject(this) 
        .resendSpreadSheet(<?=newMail?>) 

サーバー側の機能は、コードエディタで実行した後、通常はそれを機能します承認プロセスが完了しました。
スプレッドシートは他のユーザーと共有する予定ですが、上記の方法は実際にはターゲットユーザーにとってやさしくスムーズではありません。認証ポップアップをシートのインターフェイスに表示するだけのソリューションはありますか?

+0

あなたはシート関数を 'onEdit'呼び出し、彼らが認証されていない場合は、それらが認証ウィンドウにプッシュされますデフォルトでは – Brian

+0

@Brian残念なことに私の状況ではinstallabeトリガが必要です。私のアプリケーションのpotectionクラスから 'addEditor'のようないくつかのAPIが呼び出されています。 – Carr

答えて

1

「許可されていないユーザー」に許可プロセスをトリガーするメニューオプションを手動で実行するように求める小さなスクリプトを実装できます。

この関数は、もちろん1回だけ実行されます。以下

コード例:

function onOpen() { 
    if(! PropertiesService.getUserProperties().getProperty("authorized")){ 
    SpreadsheetApp.getUi().createMenu('Authorize').addItem('Authorize',authorize).addToUi(); 
    var ui = HtmlService.createTemplateFromFile('index') 
    .evaluate() 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
    .setTitle('Authorization request'); 
    SpreadsheetApp.getUi().showModelessDialog(ui,'Authorization request'); 
    } 
} 

function authorize(){ 
    PropertiesService.getUserProperties().setProperty("authorized", "done"); 
} 

のindex.html:

<html> 
    <head> 
    <base target="_top"> 
    </head> 
    <body> 
Please select the "Authorize " option from the menu<br><br> 
<input type="button" value="then close this window" 
    onclick="google.script.host.close()" /> 
</body> 
</html> 
+0

@insas、答えてくれてありがとう、これは私が達成したいもののための唯一の良い方法だと思われます。 'setSandboxMode()'の目的についてもっと説明できますか?私は[ドキュメント](https://developers.google.com/apps-script/reference/html/html-output#setSandboxMode(SandboxMode))を何度か見直しましたが、実際の効果がどのようなものになるかを理解するための経験が不足しています。 – Carr

+1

sandBoxModeは実際にはもう必要ではありませんが、それを使って私を許しても、古い習慣のようなものです...いくつかの時間前HTMLサービスは2つあります他のモード:Google Appsスクリプトコードでマルウェアを防ぐためのCAJAという種類の「コードトランスレータ」を使用したネイティブとエミュレートされたものですが、今はこれがすべて歴史ですが、これを無視しても差し支えありません。 –

関連する問題