0

Google Apps Script の基本的なドキュメントやチュートリアルをいくつか読みました。コード実行の「範囲」に関する説明は見つかりませんでした。

これが私がこれまでに理解していることです:

 All code consists of one or more statements
 All statements must (?) be contained in a "function"
     (a slight different from non-google javascript? - is this a false assumption?) 
 All functions reside in a container called a "file"
 Each "file" is part of a "project" container (or library)
 Each project container is stored in a "spreadsheet" container.

これらは「物理的な」(編集アクセス) 境界です。


私の質問は、実行中のステートメントの「論理的」境界とは何ですか?

JavaScript が Web ページで動作するのと同様に、すべての変数/オブジェクトがスコープ内でグローバルであると想定することから始めました。「編集アクセス」コンテナーが変数/オブジェクト定義の範囲を制限するとは思いませんでした。私は間違っていた。

「ライブラリ」構造は PHP の「インクルード」操作に似ていると思いました。これにより、同じコード セットをすべてのアプリケーション (スプレッドシート コンテナー) にコピーする必要がなくなり、既に「テスト済み」のコードを使用する必要がなくなると考えました。含まれるプロジェクトで使用できるリソースは、含まれるプロジェクトの共通リソースで使用できるリソースと同じであると想定しました)。要するに、私は間違っていました。「プロパティ」は定義スプレッドシートに保存され、含まれるプロジェクトによって「所有」されていると見なされます。

それをいじってみると、「プロジェクトキー」が新しい「名前空間」をスプレッドシートコンテナーに追加するだけであることがわかりました。各名前空間で発生することは、その名前空間に残ります。名前空間間の唯一の (最も単純な) 通信は、関数パラメーターと戻り値を介したものです。

特に、ユーザーとプロジェクトのプロパティはスコープが設定され、それらを含むスプレッドシート ドキュメントに残ります。スプレッドシート ドキュメント内の各プロジェクトには、個別のユーザー プロパティとプロジェクト プロパティのセットがあります。

同じプロジェクト/ライブラリ名が複数のスプレッドシート ファイルに表示される可能性があり、完全に独立しています。

これはどこかに文書化されていますか?また、スコーピング (同じプロジェクト/ライブラリを共有するさまざまなアプリケーションからのスレッド間の通信) について知っておく必要がある他のことはありますか?

また、関数がライブラリ スコープで定義されたオブジェクトへの参照を返す場合、それは呼び出し元のプロジェクトで保持されますか? プロジェクトの UserProperties "サービス" オブジェクトを指す変数を渡したり戻したりして、別のプロジェクトのそのデータにアクセスできますか?

4

2 に答える 2

2

これは、ライブラリのユーザーガイドの最後に記載されています: https ://developers.google.com/apps-script/guide_libraries

スコープを設定する方法を決定するとき、私たちは最も一般的なユースケースについて真剣に考え、驚きをできるだけ減らすように努めましたが、完璧ではありませんでした。

パラメータの受け渡しを使用して、ライブラリとプロジェクト間でScriptPropertiesオブジェクトを共有できるかどうかについての質問については、現在のところ不可能です。特定のプロパティのゲッター/セッターはいつでも公開できます。

要求された動作なしでは達成できない興味深いユースケースを念頭に置いている場合は、問題追跡システムにバグを報告してください。ありがとう!

于 2012-06-26T23:18:34.643 に答える
0

私もこれと格闘しました。ドキュメントは非常に優れていますが、少し混乱しています。

共有する概念と共有しない概念を理解するには、少し試行錯誤が必要でした。

UserProperties はユーザー レベルで存在し、プロジェクトやライブラリだけに関連付けられているわけではないことを述べておきたいと思います。ライブラリを使用する場合、ScriptProperties の場合のように UserProperties を渡す必要はありません。

いたるところにきちんとしたものがあります:-)

ジム

于 2012-12-08T11:49:15.667 に答える