SOQLとは?
さて、先ほどのプログラムの中にSQLに似た構文があったのを思い出してください。まさにあれが、「SOQL」です。Salesforce.com Object Query Languageの略です。Salesforceにおけるオブジェクトを取り扱うためのQueryLanguageです。
ApexClass/Triggerの中で利用できるのはもちろんですが、Salesforce.comより提供されているforce.com Explorerや、今後紹介予定のAPIアクセスでも利用します。
SOQLの全てを解説してしまうと、何ページも説明が必要になってしまうので、簡単なところだけ説明します。SQL経験者であれば、サブクエリの利用なども含め、試行錯誤で多くのことができると思います。
・Java+SQL開発との違い
SQLとはどこが違うのでしょうか?ぱっと見た感じでは大きな違いを感じないと思いますが、その通り大きな違いはありません。ApexClass/TriggerでSOQLを利用するのと、JavaでJDBCを利用したDBアクセスプログラムを作るのとでは多少の違いがあるので、簡単に紹介します。
SELECT Id,Name,Experience__c,Tech__c FROM Developper__c WHERE Tech__c includes (:tech) AND Experience__c >:min AND Experience__c <:max
・条件文等に利用する変数をバインドさせる。
Tech__c includes (:tech) AND Experience__c >:min
:techや:minのところが変数バインドしている個所です。
includesは複数選択リスト内に含まれているかをチェックするシンタックスです。反対はexcludesです。
・多くの日付リテラルが利用可能
TODAY -今日を表すリテラル LAST_N_DAYS:n -過去n日以内という意味で使えるリテラル
このような日付のリテラルが利用できます。
ApexClass/TriggerでのSOQL利用
今回のサンプルでは、GETパラメータのmin/max/techを検索条件として変数バインドで指定しています。
JDBCやその他ORマッピングを利用した場合のDBアクセスと比較するとどうでしょうか? Connectionオブジェクトの生成(取得)もStatement、Resultの変数もなく、[ ] で括るだけでSOQLの結果が配列で取得できています。
非常に優しく、易しいですね。
Force.com Pagesの確認
ひと通りApexClassの説明を終えましたが、実行するためにForce.com Pages(VisualForce)を少し変更してみましょう。
<apex:page cache="true" expires="10" showHeader="false" title="開発者名簿" controller="DevelopperListController" > <meta http-equiv="content-type" charset=UTF-8" /> <h1><font color="#FF0000">開発者</font></h1> <h2>Developper__cテーブルの中身を表示</h2> <apex:dataList var="dev" value="{!developpers}" type="1"> {!dev.Name}:{!dev.Experience__c}:{!dev.Tech__c}<br/>: </apex:dataList> </apex:page>
前回、Force.com Pagesの作成で説明したので詳細は説明しませんが、
controller="DevelopperListController"
ここに注目してください。
前回はstandardController="Developper__c"としていました。また、recordSetvar="developper"と指定することで、デフォルトでdevelopper変数の中にDevelopper__cのオブジェクトの配列が格納されていました。
今回はstandardControllerではなく、controller属性を利用し、作成した独自のControllerであるDevelopperListControllerを設定することで、DevelopperListControllerをControllerとして利用する定義をしています。
<apex:dataList var="dev" value="{!developpers}" type="1">
ここでは前回、valueにdevelopper変数をしていしていましたが、今回は"developpers"と記述することによって「DevelopperListController::getDeveloppers()」メソッドを実行し、その結果配列をvalueとして利用しています。
実際の動きを見る
では実際の動きを確認してみましょう。
ブラウザに以下のURLを入力して、ページを表示してみてください。
https://ap.salesforce.com/apex/DevelopperList
注意:ドメイン/サブドメイン部分は環境によって違う可能性があります。上記URLでアクセス出来ない場合はログイン中のSalesforceのドメイン以下を、/apex/(Pages名)としてみてください。
次に、GETパラメータを渡してみましょう。
https://ap.salesforce.com/apex/DevelopperList?min=7
GETパラメータに、min=7を指定しました。
SOQLで、minの値を経験年数カラムと比較していますので、経験年数7年以上の人だけが結果として出ていますね。
実際に、DevelopperListController::getDeveloppersが呼ばれているのを感じていただけたかと思います。
ここまでできれば、簡単なWebアプリケーションはForce.com内でできてしまいそうですね。Sitesを利用すれば作成したページを外部に公開することも可能です。それはまた次の機会に説明します。そんなに難しくないので、自分で調べてもすぐにできると思います!
次回はApexTriggerを利用しつつ、ガバナ制限についての説明をしていきます。より実践的な内容になっていきますが、Salesforce.comからどんどん新機能が提供されてきていますので、そういう情報もお知らせしていきます。
Copyright © ITmedia, Inc. All Rights Reserved.