4

私のスクリプトをアドオンに変換しています。ニーズの 1 つはテンプレートを構成することなので、フィールド ピッカーを起動するサイドバーをプログラムしました。サイドバーにはピッカー用の十分なスペースがないため、サーバー側で次のコードを呼び出して、サイドバーから作成したモーダル ダイアログからピッカーを起動する必要があります。

var html = HtmlService.createHtmlOutputFromFile('TemplatePicker.html')
  .setWidth(600).setHeight(425);
SpreadsheetApp.getUi().showModalDialog(html, 'Select the file with the template');

私の問題は、ユーザーがファイルを選択すると、選択したファイルの ID を取得すると、その ID をサイドバーに渡すことができないことです。someJSFunctionOfSidebar(id)andを呼び出してみparent.someJSFunctionOfSidebar(id)ましたが、うまくいかなかったので、サーバー側に値を渡してそこからサイドバーをリロードすることでようやく終了しましたが、非常に遅く、結果の効果が醜いです。

私の質問は:

で作成されたモーダル ダイアログからクライアント レベルで値SpreadsheetApp.getUi().showModalDialogをその親に渡す方法はありますか? おそらくそれは実際にはその親ではなく、それが機能しない理由です。

4

2 に答える 2

8

おそらくそれは実際にはその親ではなく、それが機能しない理由です。

そうです - ここでは実際に DOM の親子関係はありません。サイドバーとモーダル ダイアログはどちらもサーバー サイド スクリプトから起動され、独立しています。ただし、どちらもサーバーと通信できるため、ストア アンド フォワード手法を使用してピッカーからサイドバーに結果を取得できます。

基本的な考え方:

  • サイドバーは、ピッカーの起動を要求するとすぐに、ピッカーの結果についてサーバーのポーリングを開始します。
  • を使用して、ピッカーの結果がサーバーに送信されますgoogle.script.run
  • サーバーは結果を一時的に保存します。これは、状況に応じて、グローバル変数と同じくらい簡単な場合があります。
  • 結果が得られると、次のポーリングでそれが取得されます。

ポーラーの基本的な考え方については、アドオンから Google Doc をポーリングする方法をご覧ください。

メッセージ シーケンス チャート

于 2014-08-14T16:25:19.487 に答える