自分の位置および近くの場所 (20 km) を表示します。このために、郵便局のすべての要件を格納するトランザクションを作成します。現在位置から 20 km の範囲内にある近くの場所のみを表示するために、現在位置とそれらの位置の間のすべての距離が再計算されます。距離の値はデータベースに格納され、データセレクターでフィルタされます。次に、スマート デバイス アプリケーションに配達先 (グリッドの SD Maps コントロールを使用) タイプおよび現在位置 (GeoLocation 外部オブジェクトの GetMyLocation メソッドを使用) を表示します。
次に、この実装に必要な 4 つの手順について詳しく説明します。
最初に、郵便局のすべての要件を格納するために使用されるトランザクションを作成します。
POReqId * // Autonumber
POREqAddress // Char(500): 住所または説明
POReqLoc // Geolocation: 緯度、経度
POReqDeliver // boolean
PoReqPin // Image: アイコン画像
POReqNear // boolean
POReDistance // Numeric(10,4)
WWSmartDevices パターンを適用して (WWPostOffices が作成される)、次を設定します:
- List/Grid/Control Type = SD MAPS
- List/Grid/Location Attribute = POReqLoc
- List/Grid/Pin Image Attribute = POReqPin
Menu for Smart Devices オブジェクトを作成して、WorkWithDevicesPostOffice アイテムを追加します。
オブジェクトの WWPostNear List に "NearPoints" アクションを作成して、GetMyLocation メソッドを呼び出します。
アクションを作成するには、 [ List ] ノードをクリックし、 [ 追加 ] ボタンを右クリックしてから [ アクションを挿入 ] を選択し、アクション名として GetMyLoc を入力します。GetMyLocation メソッドを呼び出すには、 [ イベント ] に移動して、次のコードを記述します:
Event 'NearPoints'
&GetMyLocation = Geolocation.GetMyLocation(0,0,false)
EndEvent
// ここで:
// &GetMyLocation は GeoLocationInfo データタイプに基づいており、
// Geolocation は変数ではなく、外部オブジェクトの静的な参照です。
注: GetMyLocation メソッドは、デバイス側で実行されるので、アクションから呼び出す必要があります。プロシージャーから呼び出すことはできません。
ネストされたアクションを作成し、ここから、データベースに “自分の位置” を格納するプロシージャーを呼び出します (ネストされたアクションを同時にトリガーするために、Composite コマンド節を使用する必要があります)。
このアクションは、上述の GetMyLocation メソッドを呼び出した結果である、GeoLocationInfo パラメーターを設定します。サンプルコードは次のようになります:
Event 'NearPoints'
Composite
&GetMyLocation = Geolocation.GetMyLocation(0,0,false)
StoreNear_Points(&GetMyLocation)
EndComposite
EndEvent
これは、StoreNear_Points プロシージャーが自分の位置を挿入し、データベースに格納されているすべての地点への距離を更新することを意味します。
parm(&GetMyLocation)
for each // 自分の現在位置へのあらゆる地点の距離を計算および更新します。
where POReqDeliver = false
&Currdistance = &GeoLocation.GetDistance(&GetMyLocation.Location, POReqLoc)
if &Currdistance < &distance
POReqNear = true
else
POReqNear = false
endif
POReqdistance = &distance
endfor
データをリフレッシュするためのネストされたアクションを作成します。記述するコードは、次のようになります: SD Actions.refresh()
最終的に、次のようになります:
次のように、Data Selector オブジェクトを作成します:
この条件は、次のように定義されます: POReqNear = true or POReqdistance < &distance
Data Selector は、WWPostNear/List/DataSelector に含める必要があります。実行すると、次のようになります:
これらの例の完全なナレッジベースは、Postman から利用できます。
|