How to: Implement Location in C/AL NAV 2016
This example illustrates how you can retrieve location information. The
example implements a GetLocation action on the Customer Card (page 21)
that returns the GPS coordinates of the current customers address. It does not
save this information to the database. Scenarios in which this functionality
could be useful would be displaying a map that shows where your customer is
located based on the GPS coordinates. Or, functionality to plan the next round
of customer visits based on the addresses of your customers.
Important
The location information is only available on devices that run the
Microsoft Dynamics NAV Universal App and have GPS capabilities. This means that
location information is not available from the Microsoft Dynamics NAV Windows
client or from a browser.
To implement location in
C/AL
- In
the development environment, on the Tools menu, choose Object
Designer to open the Object Designer window.
- In Object
Designer, choose Pages, select the Customer Card (page
21) and then choose the Design button.
- From
the Page Designer window, on the View menu, choose C/AL Globals.
- Create
the following variable:
Variable name
|
DataType
|
SubType
|
||
Location
|
DotNet
|
Microsoft.Dynamics.Nav.Client.Capabilities.LocationProvider
|
||
LocationAvailable
|
Boolean
|
- On
the View menu, select C/AL Code and in the C/AL Editor
locate the OnOpenPage trigger.
- Instantiate
the Location variable by adding
the following code to the OnOpenPage trigger.
Copy
Code
|
IF
Location.IsAvailable THEN
BEGIN
Location := Location.Create;
LocationAvailable := TRUE;
END;
|
See the bellow screenshot of OnOpenPage Trigger
- Next, create the page action. Choose the View menu, and then select Page Actions.
- Locate
the ActionGroup named Customer and create a new action; GetLocation
with the following properties.
Property
|
Value
|
Name
|
GetLocation
|
Visible
|
LocationAvailable
|
Promoted
|
Yes
|
PromotedCategory
|
Process
|
PromotedIsBig
|
Yes
|
See the bellow screenshot of GetLocation action Trigger
- Now,
in the C/AL Editor, on the GetLocation - OnAction
trigger, insert the following line of code.
Copy
Code
|
Location.RequestLocationAsync;
|
See the bellow screenshot of GetLocation - OnAction Trigger
- While
still in the C/AL Editor, on the LocationChanged
trigger add the following code to handle the GPS coordinates. LocationChanged is
called when the device has obtained a status.
Copy
Code
|
Location::LocationChanged(Location
: DotNet "Microsoft.Dynamics.Nav.Client.Capabilities.Location")
IF(Location.Status
= 0) THEN
MESSAGE('Your position: %1 %2',
Location.Coordinate.Latitude,Location.Coordinate.Longitude)
ELSE
MESSAGE('Position not available');
|
Important
|
Location.Status can be
0 =
Available, 1 = NoData (no data could be obtained), 2 = TimedOut
(location information not obtained in due time), or 3 =
NotAvailable (for example user denied app access to location).
|
See the bellow screenshot of Location::LocationChanged Trigger
- Close
the C/AL Editor, and then save and compile the page.
- You
can now test the modified Customer Card page in the Microsoft Dynamics NAV
Universal App from either a tablet or a phone with GPS capabilities.
LocationOptions Overview
Microsoft
Dynamics NAV 2016
When implementing location from C/AL, there are some options that you can optionally pass to
LocationProvider.RequestLocationAsync(options)
.
The options can be accessed by using
Microsoft.Dynamics.Nav.Client.Capabilities.LocationOptions
found in the Microsoft.Dynamics.Nav.ClientExtensions
dll.
For most scenarios it is not necessary to specify options.
Location Options List
bool EnableHighAccuracy
A value to provide a hint to the device that this
request must have the best possible location accuracy.
|
int Timeout
The maximum length of time (milliseconds) that is
allowed to pass to a location request.
|
int MaximumAge
The maximum length of time (milliseconds) of a cached
location.
|
References: MSDN