No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
もうひとこと: コードについて
FindNearby Apex クラスのクエリ
次のスニペットは、Visualforce ページから渡される変数を使用して、ページにアクセスしているデバイスから 20 マイル以内にある倉庫を検索する動的な SOQL クエリです。このページは、すべてのモバイルデバイスと、HTML5 対応のデスクトップブラウザで機能します。
ページで場所を取得できないときは、サンフランシスコを中心に検索が行われます。この機能をブラウザでテストする場合、デバイスのセキュリティ設定によっては、ページが場所にアクセスすることを承認する必要のあることがあります。
1 String queryString =
2 'SELECT Id, Name, Location__Longitude__s,
3 Location__Latitude__s, ' +
4 Street_Address__c, Phone__c, City__c ' +
5 'FROM Warehouse__c ' +
6 'WHERE DISTANCE(Location__c,
7 GEOLOCATION('+lat+','+lon+'), \'mi\') < 20 ' +
8 'ORDER BY DISTANCE(Location__c,
9 GEOLOCATION('+lat+','+lon+'), \'mi\') ' +
10 'LIMIT 10';Visualforce ページの initialize 関数
Visualforce ページの initialize 関数では、HTML5 地理位置情報 API を使用して、ユーザの座標を取得します。ブラウザがプラグインや外部ライブラリを使用せずに位置を取得し、続いて、JavaScript Remoting を使用して Apex コントローラの getNearby 関数を呼び出し、座標を渡します。
1function initialize() {
2 var lat, lon;
3
4 // Check to see if the device has geolocation
5 // detection capabilities with JavaScript
6 if (navigator.geolocation) {
7 navigator.geolocation.getCurrentPosition(
8 function(position){
9 lat = position.coords.latitude;
10 lon = position.coords.longitude;
11
12 //Use VF Remoting to send values to be
13 //queried in the associated Apex Class
14 Visualforce.remoting.Manager.invokeAction(
15 '{!$RemoteAction.FindNearby.getNearby}', lat, lon,
16 function(result, event){
17 if (event.status) {
18 console.log(result);
19 createMap(lat, lon, result);
20 } else if (event.type === 'exception') {
21 //exception case code
22 } else {
23
24 }
25 },
26 {escape: true}
27 );
28 });
29 } else {
30 //Set default values for map if the device doesn't
31 //have geolocation capabilities
32 /** San Francisco **/
33 lat = 37.77493;
34 lon = -122.419416;
35
36 var result = [];
37 createMap(lat, lon, result);
38 }Visualforce ページのリダイレクトコード
FindNearbyWarehousesPage ページでは、Google Maps の JavaScript API v3 を使用して、付近の倉庫の位置を地図上に示します。SOQL クエリによって返されたレコードに基づいて地図が拡大縮小され、地図上に各レコードのマーカーが表示されます。
このコードの最も重要な部分は、このページが Salesforce1 アプリケーションで表示されているかどうかを判断している部分です。表示されている場合は、倉庫レコードへのリダイレクトリンクのコードが若干異なります。このページが Salesforce1 アプリケーションで実行される場合は、navigateToSobjectRecord メソッドを使用して、アプリケーションを実行したままレコード詳細ページにアクセスする必要があります。この点は簡単な try/catch コンストラクトでチェックして、その結果に応じてリダイレクトリンクを設定できます。
1try{
2 if(sforce.one){
3 warehouseNavUrl =
4 'javascript:sforce.one.navigateToSObject(
5 \'' + warehouse.Id + '\')';
6 }
7} catch(err) {
8 console.log(err);
9 warehouseNavUrl = '\\' + warehouse.Id;
10}
11 var warehouseDetails =
12 '<a href="' + warehouseNavUrl + '">' +
13 warehouse.Name + '</a><br/>' +
14 warehouse.Street_Address__c + '<br/>' +
15 warehouse.City__c + '<br/>' +
16 warehouse.Phone__c;