- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
SalesforceにおけるLocation型の違いとAddressのキャストについて
1. Locationの2つの意味
Salesforceでは「Location」という名前が 2つの異なる用途 で使用されています。
-
Locationオブジェクト(Schema.Location)
-
物理的な場所を表すオブジェクト
-
SELECT Id FROM Location のようなSOQLで取得できる
-
-
Locationクラス(Location)
-
地理的な緯度・経度情報 を持つクラス
-
BillingAddress や ShippingAddress などの Address型のフィールドと互換性 がある
-
2. Address を Location クラスにキャストできる理由
Address は Salesforce の特殊な型であり、Location クラスに変換できます。例えば、次のようなコードは問題なく動作します。
Account acc = [SELECT BillingAddress FROM Account LIMIT 1]; Location billingLocation = acc.BillingAddress; // 変換可能
このキャストが可能な理由は、Address 型のフィールドは内部的に Location クラスと互換性があるためです。
Location クラスには latitude(緯度)や longitude(経度)のプロパティが含まれています。
System.debug('Latitude: ' + billingLocation.latitude); System.debug('Longitude: ' + billingLocation.longitude);
3. なぜ Location を SOQL で取得するとエラーになるのか?
Location という名前が クラスとオブジェクトの両方で使用されているため、そのまま SELECT Id FROM Location を実行すると、Salesforceは Location クラスと誤認識し、コンパイルエラーを引き起こします。
エラーとなるコード
Listlocations = [SELECT Id FROM Location]; // エラー
理由: Location クラスはオブジェクトではなく、型として認識されるため。
正しく書く方法
Schema 名前空間を明示することで、Location オブジェクトとして取得できます。
Listlocations = [SELECT Id FROM Location]; // 正常動作
ポイント:
- Schema.Location を明示することで、SOQL の Location がクラスではなくオブジェクトであることをSalesforceに伝えられる。
4. AddressとLocationを扱う際の注意点
項目 | Location クラス | Schema.Location (オブジェクト) |
---|---|---|
用途 | 地理情報(緯度・経度) | Salesforce標準オブジェクト |
キャスト可能 | Address 型から変換可能 | Address 型とは直接関係なし |
SOQLでの取得 | SOQL不可 | SELECT Id FROM Location |
使用例 | BillingAddress の取得・緯度経度情報の処理 | 物理的な「場所」の管理 |
まとめ
- Location には クラスとオブジェクトの2種類 ある
- Address フィールドは Location クラスにキャスト可能(地理座標データが含まれるため)
- SOQL で Location を取得する場合は Schema.Location を使用する必要がある
この違いを理解することで、Salesforceでの地理情報の管理やSOQLクエリのエラーを回避できます。
コメント
コメントを投稿