ScriptDbによるオブジェクトデータベース (2/6)
作成:2012-07-01 14:03
更新:2012-07-01 14:03
更新:2012-07-01 14:03
■すべてのオブジェクトを取得する
では、保存したオブジェクトをとり出すにはどうすればいいのでしょうか。これには、いくつかのやり方があります。まず、単純な方法から。
loadは、オブジェクトIDを引数に指定してオブジェクトをとり出すものです。saveでオブジェクトを保存する際、それらのオブジェクトにはそれぞれユニークなIDが割り当てられます。このIDを指定することで、オブジェクトを取り出せます。
ただし、このIDは、1から順番に割り振られるような単純なものではありません。したがって、あらかじめオブジェクトのIDがわかっていないと使えません。
もう1つの方法は、「クエリーを利用するものです。これは、以下のように実行します。
・{}――何も指定しない。すべてのオブジェクトをとり出す。
{ type: 取り出すオブジェクトの種類 }――指定したtypeのオブジェクトをすべてとりだす。
これにより、すべてのオブジェクトを取り出したり、特定の種類のオブジェクト(saveするとき、typeで指定した値)のオブジェクトをすべてとり出すことができます。
こうしてqueryによって取り出された値は、「ScriptDbResult」というオブジェクトになっています。これは一種のコレクションオブジェクトで、「hasNext」や「next」といったメソッドを持っており、これにより順番にオブジェクトを取り出していくことができます。
オブジェクトとして保存した値(nameやmailなど)は、nextで取り出したScriptDbMapにちゃんと保管されていますから、そのままこれらのプロパティを指定して値を取り出すことができます。この他、以下のようなメソッドも用意されています。
・オブジェクトIDを得る
・JSONテキストを得る
保存した値をまとめてとり出すなら、toJsonでJSONテキストを取り出し利用するのがいいでしょう。必要によっては、JSON.parseなどでJavaScriptオブジェクトに戻して操作することもできますから。
下のリストは、保存しているすべてのpersonaldataオブジェクトを取り出し、そのIDと保存している値をアクティブシートに書き出すものです。 while(result.hasNext())というように、hasNextの値がtrueである間、繰り返しを続けています。その中で、 var obj = result.next();で次のオブジェクトを選択し、必要に応じて保存されている値を取り出し処理すればよいでしょう。
変数 = 《ScriptDbInstance》
.load( オブジェクトID );
loadは、オブジェクトIDを引数に指定してオブジェクトをとり出すものです。saveでオブジェクトを保存する際、それらのオブジェクトにはそれぞれユニークなIDが割り当てられます。このIDを指定することで、オブジェクトを取り出せます。
ただし、このIDは、1から順番に割り振られるような単純なものではありません。したがって、あらかじめオブジェクトのIDがわかっていないと使えません。
もう1つの方法は、「クエリーを利用するものです。これは、以下のように実行します。
変数 = 《ScriptDbInstance》.query( 条件の連想配列 );「query」は、引数に指定した条件に符合するオブジェクトをまとめてとり出すためのものです。条件については後述するとして、ここではシンプルなものを2つだけ覚えておきましょう。
・{}――何も指定しない。すべてのオブジェクトをとり出す。
{ type: 取り出すオブジェクトの種類 }――指定したtypeのオブジェクトをすべてとりだす。
これにより、すべてのオブジェクトを取り出したり、特定の種類のオブジェクト(saveするとき、typeで指定した値)のオブジェクトをすべてとり出すことができます。
こうしてqueryによって取り出された値は、「ScriptDbResult」というオブジェクトになっています。これは一種のコレクションオブジェクトで、「hasNext」や「next」といったメソッドを持っており、これにより順番にオブジェクトを取り出していくことができます。
while(《ScriptDbResult》.hasNext()){こんな具合ですね。これで、ScriptDbResultから順にオブジェクトを取り出していくことができます。result.nextは、ScriptDbResultで取得されているオブジェクトを1つずつ取り出します。取り出したオブジェクトは「ScriptDbMap」というオブジェクトになっています。この形でオブジェクトは保存されているのですね。
var obj = result.next();
……objを操作する……
}
オブジェクトとして保存した値(nameやmailなど)は、nextで取り出したScriptDbMapにちゃんと保管されていますから、そのままこれらのプロパティを指定して値を取り出すことができます。この他、以下のようなメソッドも用意されています。
・オブジェクトIDを得る
変数 = 《ScriptDbMap》.getId();
・JSONテキストを得る
変数 = 《ScriptDbMap》.toJson();
保存した値をまとめてとり出すなら、toJsonでJSONテキストを取り出し利用するのがいいでしょう。必要によっては、JSON.parseなどでJavaScriptオブジェクトに戻して操作することもできますから。
下のリストは、保存しているすべてのpersonaldataオブジェクトを取り出し、そのIDと保存している値をアクティブシートに書き出すものです。 while(result.hasNext())というように、hasNextの値がtrueである間、繰り返しを続けています。その中で、 var obj = result.next();で次のオブジェクトを選択し、必要に応じて保存されている値を取り出し処理すればよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
function showDatas(){ var sheet = SpreadsheetApp.getActiveSheet(); var db = ScriptDb.getMyDb(); var result = db.query({type:"personaldata"}); var i = 1; while(result.hasNext()){ var data = result.next(); sheet.getRange(i,1).setValue(obj.getId()); sheet.getRange(i,2).setValue(data.name); sheet.getRange(i,3).setValue(data.mail); sheet.getRange(i,4).setValue(data.tel); sheet.getRange(i,5).setValue(data.age); i++; } }
※関連コンテンツ
「Google Apps Scriptプログラミング [中級編]」に戻る