public class DriveCode{
@future (callout=true) // future method needed to run callouts from Triggers
public static void getDistance(){
// gather account info
Property__c [] a = [SELECT Street_Address__c,
City__c,
State__c,
Zip__c,
Service_Center__c,
NeedDistance__c
FROM Property__c
WHERE Id ='a031Q00001wPRnYQAW'];
if(a[1].NeedDistance__c == true){
// build callout
String dstreet = ' ';
String dcity = ' ';
String dstate = ' ';
String dzip = ' ';
String saddress = ' ';
if(a[1].Street_Address__c != null){dstreet = a[1].Street_Address__c;}
if(a[1].City__c != null){dcity = a[1].City__c;}
if(a[1].State__c != null){dstate = a[1].State__c;}
if(a[1].Zip__c != null){dzip = a[1].Zip__c;}
if(a[1].Service_Center__c != null){saddress = a[1].Service_Center__c;}
String destaddress = EncodingUtil.urlEncode(dstreet + ' ' + dcity + ' ' + dstate + ' ' + dzip, 'UTF-8');
String serveaddress = EncodingUtil.urlEncode(saddress, 'UTF-8');
Http h = new Http();
HttpRequest req = new HttpRequest();
//req.setEndpoint('http://maps.googleapis.com/maps/api/distancematrix/json?origins=' + a[1].Origin_Zip__c + '&destinations=' + a[1].Destination_Zip__c + '&mode=driving&units=imperial&sensor=false');
req.setEndpoint('http://maps.googleapis.com/maps/api/distancematrix/json?origins=' + destaddress +'&destinations=' + serveaddress + '&key=AIzaSyDgO1iTw2QWJMBbgn73ODqgryrZ6sLtWTw');
//req.setEndpoint(EncodingUtil.urlEncode('http://maps.googleapis.com/maps/api/distancematrix/json?origins=' + a[1].Origin_Street__c + '+' + a[1].Origin_City__c + '+' + a[1].Origin_State__c + '+' + a[1].Origin_Zip__c + '&destinations=' + a[1].Destination_Street__c + '+' + a[1].Destination_City__c + '+' + a[1].Destination_State__c + '+' + a[1].Destination_Zip__c + '&mode=driving&units=imperial&sensor=false', 'UTF-8'));
//req.setEndpoint(GEOCODING_URI_BASE + EncodingUtil.urlEncode(address, 'UTF-8'));
req.setMethod('GET');
req.setTimeout(60000);
integer distance = null;
string tdistance = null;
//HttpResponse res = h.send(req);
// callout
HttpResponse res = h.send(req);
System.debug(res.getBody());
// parse coordinates from response
JSONParser parser = JSON.createParser(res.getBody());
while (parser.nextToken() != null) {
if ((parser.getCurrentToken() == JSONToken.FIELD_NAME) &&
(parser.getText() == 'distance')){
parser.nextToken(); // object start
while (parser.nextToken() != JSONToken.END_OBJECT){
String txt = parser.getText();
parser.nextToken();
if (txt == 'text')
tdistance = parser.getText();
else if (txt == 'value')
distance = parser.getIntegerValue();
}
}
}
// update coordinates if we get back
if (distance != null){
a[1].Distance_Miles__c = distance;
//a[1].tdistance__c = tdistance;
a[1].NeedDistance__c = False;
//a[1].Description1__c = req.getEndpoint();
//a[1].Description2__c = res.getBody();
//String originaddress = a[1].Origin_Street__c != null ? a[1].Origin_Street__c + ' ' : '' +
//a[1].Origin_City__c != null ? a[1].Origin_City__c + ' ' : '' +
//a[1].Origin_State__c != null ? a[1].Origin_State__c + ' ' : '' +
//a[1].Origin_Zip__c != null ? a[1].Origin_Zip__c : '';
//String originaddress = EncodingUtil.urlEncode(a[1].Origin_Street__c + ' ' + a[1].Origin_City__c + ' ' + a[1].Origin_State__c + ' ' + a[1].Origin_Zip__c, 'UTF-8');
a[1].LinkToDirections__c = 'http://maps.googleapis.com/maps/api/distancematrix/json?origins=' + destaddress +'&destinations=' + serveaddress + '&key=AIzaSyDgO1iTw2QWJMBbgn73ODqgryrZ6sLtWTw';
//a[1].Description1__c = EncodingUtil.urlEncode(originaddress, 'UTF-8') + '---' + originaddress;
update a;
}
}
Else {
a[1].LinkToDirections__c = 'test';
a[1].NeedDistance__c = True;
update a;
}
}
}
I am not a coder, but I am pretty ok at finding code and making it work. Can someone please help with with this. Why is it not finding the record.@isTest
private class DrivefutureTest {
@isTest static void test1() {
// startTest/stopTest block to run future method synchronously
Test.startTest();
DriveCode.getDistance();
Test.stopTest();
}
}
Hi Alex,I hope you are doing well .....!!Please use https instead of http while request the API. Just Copy below link and paste in your browser :
https://maps.googleapis.com/maps/api/distancematrix/json?origins=Vancouver+BC|Seattle&destinations=San+Francisco|Victoria+BC&mode=bicycling&language=fr-FR&key=AIzaSyDgO1iTw2QWJMBbgn73ODqgryrZ6sLtWTwFor more info: https://developers.google.com/maps/documentation/distance-matrix/introHope this helps you.If this helps kindly mark it as BEST ANSWER so that it may help others in the future.Thanks & Regards,Foram Rana