こんにちは、管理人の@Salesforce.Zです。
調査や、個人開発時にSalesforceの開発者コンソルが便利かと思います。
今回、共有したいのが開発者コンソルで、日付項目を条件にするメモと日付項目をローカル日付にする方法です。
目次
開発者コンソルでSOQLに使う日付項目の扱い
SELECT Id, CreatedDate FROM Account
こんなクエリだけ、下記のようになります。
取引先の作成日(CreatedDate列)がまあ、画像通りの感じになります。
対象レコードを探す時に不便と思います。
そこで、format(datetime field)で解決になります。
SELECT Id, format(CreatedDate) FROM Account
日付リテラルでクエリ条件にする
対象データをクエリで絞って、変数に格納するのがよくある
条件に日付項目を使う場合、日付リテラルを使うと便利です。
SELECT Id , format(CreatedDate) FROM Account WHERE CreatedDate = LAST_90_DAYS
SELECT Id
, format(CreatedDate)
FROM Account
WHERE CreatedDate > LAST_N_DAYS:365
いろいろ便利な日付リテラルが用意されています。
リテラル定数をメソッドの引数に渡す場合
下記data access object(略はDAO)があるとします
public with sharing class yourDaoClassName { /** * レコードのリストを取得 * @param ids レコードIDのセット * @return List<sObject>(取得できなかった場合はEmpty) */ public static List<Account> getThisMonthRecs(String thisMon_literals_str, String recdTypeDevname, String query_fields){ String query = 'SELECT Id, Name'; query += query_fields; query += ' FROM Account'; query += ' WHERE date_field1__c = ' + thisMon_literals_str; query += ' AND RecordType.DeveloperName = :recdTypeDevname'; return Database.query(query); } }
リテラル定数を上記のgetThisMonthRecsの引数に渡す
yourDaoClassName.getThisMonthRecs('THIS_MONTH', 'recordtypeDevName')
普段クエリに動的条件を変更する場合、引数名の前に「:」をつけて、変数として扱うがリテラル定数の場合
動的クエリの文字列外に
query += ' WHERE date_field1__c = ' + thisMon_literals_str;
こうすれば、引数として、自由自在にリテラル定数を設定可能になります。