Skip to content

Instantly share code, notes, and snippets.

@lbrenman

lbrenman/Account.js

Last active Aug 29, 2015
Embed
What would you like to do?
Appcelerator Arrow Post Block to add GPS coordinates to the Salesforce Account
var Arrow = require("arrow");
var Model = Arrow.Model.reduce("appc.salesforce/Account","Account",{
"fields": {
"Name": {
"type": "string",
"description": "Account Name",
"readonly": false,
"maxlength": 255,
"required": true,
"optional": false,
"writeonly": false
},
"Type": {
"type": "string",
"description": "Account Type",
"readonly": false,
"maxlength": 40,
"required": false,
"optional": true,
"writeonly": false
},
"BillingStreet": {
"type": "string",
"description": "Billing Street",
"readonly": false,
"maxlength": 255,
"required": false,
"optional": true,
"writeonly": false
},
"Phone": {
"type": "string",
"description": "Account Phone",
"readonly": false,
"maxlength": 40,
"required": false,
"optional": true,
"writeonly": false
},
"Website": {
"type": "string",
"description": "Website",
"readonly": false,
"maxlength": 255,
"required": false,
"optional": true,
"writeonly": false
},
"lat": {
"type": "String",
"custom": true
},
"lon": {
"type": "String",
"custom": true
}
},
"after": "addgps",
"actions": [
"create",
"read",
"update",
"delete",
"deleteAll"
],
"singular": "Account",
"plural": "Accounts"
});
module.exports = Model;
var Arrow = require('arrow');
var request = require('request');
var googleMapAPIKey = "<Your API Key>";
var baseURL = "https://maps.googleapis.com/maps/api/geocode/json?address=";
var PostBlock = Arrow.Block.extend({
name: 'addgps',
description: 'add lat, long to the retreived data',
action: function(req, resp, next) {
// req.log.info("Post Example Block executed");
var body = JSON.parse(resp.body);
var data = body[body.key];
var dataLen = data.length;
var replies = 0;
// console.log("data = "+JSON.stringify(data));
// console.log("dataLen = "+dataLen);
if(dataLen){ //findAll
data.forEach(function (_row, _index) {
var url=baseURL+encodeURIComponent(prepareAddress(_row.BillingStreet))+"&key="+googleMapAPIKey;
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var res = JSON.parse(body);
_row.lat = res.results[0].geometry.location.lat;
_row.lon = res.results[0].geometry.location.lng;
replies++;
if(replies == dataLen) {
setReply();
}
} else {
console.log("google maps geocode request error");
replies++;
if(replies == dataLen) {
setReply();
}
}
});
});
} else { //findOne
var url=baseURL+encodeURIComponent(prepareAddress(data.BillingStreet))+"&key="+googleMapAPIKey;
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var res = JSON.parse(body);
data.lat = res.results[0].geometry.location.lat;
data.lon = res.results[0].geometry.location.lng;
setReply();
} else {
console.log("google maps geocode request error");
setReply();
}
});
// console.log("data = "+JSON.stringify(data));
}
function prepareAddress(str) {
return str.replace(/(\r\n|\n|\r)/gm,",");
}
function setReply() {
console.log("post block addgps executed");
resp.success(body[body.key], next);
}
}
});
module.exports = PostBlock;
{
"success": true,
"request-id": "cfe6321b-a23d-40d1-b6a9-28feba4fa310",
"key": "accounts",
"accounts": [
{
"id": "001i000000PscewAAB",
"Name": "GenePoint",
"Type": "Customer - Channel",
"BillingStreet": "345 Shoreline Park\nMountain View, CA 94043\nUSA",
"Phone": "(650) 867-3450",
"Website": "www.genepoint.com",
"lat": 37.423958,
"lon": -122.0721391
},
{
"id": "001i000000PscexAAB",
"Name": "United Oil & Gas, UK",
"Type": "Customer - Direct",
"BillingStreet": "Kings Park, 17th Avenue, Team Valley Trading Estate,\nGateshead, Tyne and Wear NE26 3HS\nUnited Kingdom",
"Phone": "+44 191 4956203",
"Website": "http://www.uos.com",
"lat": 55.05473019999999,
"lon": -1.4665574
},
{
"id": "001i000000PsceyAAB",
"Name": "United Oil & Gas, Singapore",
"Type": "Customer - Direct",
"BillingStreet": "9 Tagore Lane\nSingapore, Singapore 787472\nSingapore",
"Phone": "(650) 450-8810",
"Website": "http://www.uos.com",
"lat": 1.384019,
"lon": 103.826043
},
{
"id": "001i000000PscezAAB",
"Name": "Edge Communications",
"Type": "Customer - Direct",
"BillingStreet": "312 Constitution Place\nAustin, TX 78767\nUSA",
"Phone": "(512) 757-6000",
"Website": "http://edgecomm.com",
"lat": 29.6024873,
"lon": -95.54378609999999
},
{
"id": "001i000000Pscf0AAB",
"Name": "Burlington Textiles Corp of America",
"Type": "Customer - Direct",
"BillingStreet": "525 S. Lexington Ave\r\nBurlington\r\nNC\r\n27215\r\nUSA",
"Phone": "(336) 222-7000",
"Website": "www.burlington.com",
"lat": 36.0905435,
"lon": -79.43733
},
{
"id": "001i000000Pscf1AAB",
"Name": "Pyramid Construction Inc.",
"Type": "Customer - Channel",
"BillingStreet": "2 Place Jussieu\r\nParis\r\n75251\r\nFrance",
"Phone": "(014) 427-4427",
"Website": "www.pyramid.com",
"lat": 48.8460258,
"lon": 2.3552132
},
{
"id": "001i000000Pscf2AAB",
"Name": "Dickenson plc",
"Type": "Customer - Channel",
"BillingStreet": "1301 Hoch Drive\r\nLawrence\r\nKS\r\n66045\r\nUSA",
"Phone": "(785) 241-6200",
"Website": "dickenson-consulting.com",
"lat": 38.957344,
"lon": -95.250569
},
{
"id": "001i000000Pscf3AAB",
"Name": "Grand Hotels & Resorts Ltd",
"Type": "Customer - Direct",
"BillingStreet": "2334 N. Michigan Avenue, Suite 1500\nChicago, IL 60601, USA",
"Phone": "(312) 596-1000",
"Website": "www.grandhotels.com",
"lat": 41.850015,
"lon": -87.624203
},
{
"id": "001i000000Pscf4AAB",
"Name": "Express Logistics and Transport",
"Type": "Customer - Channel",
"BillingStreet": "620 SW 5th Avenue Suite 400\nPortland, Oregon 97204\nUnited States",
"Phone": "(503) 421-7800",
"Website": "www.expressl&t.net",
"lat": 45.5190932,
"lon": -122.6771044
},
{
"id": "001i000000Pscf5AAB",
"Name": "University of Arizona",
"Type": "Customer - Direct",
"BillingStreet": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States",
"Phone": "(520) 773-9050",
"Website": "www.universityofarizona.com",
"lat": 32.2332841,
"lon": -110.9488008
},
{
"id": "001i000000Pscf6AAB",
"Name": "United Oil & Gas Corp.",
"Type": "Customer - Direct",
"BillingStreet": "1301 Avenue of the Americas \nNew York, NY 10019\nUSA",
"Phone": "(212) 842-5500",
"Website": "http://www.uos.com",
"lat": 40.7616971,
"lon": -73.9801263
},
{
"id": "001i000000Pscf7AAB",
"Name": "sForce",
"BillingStreet": "The Landmark @ One Market\r\nSan Francisco\r\nCA\r\n94087\r\nUSA",
"Phone": "(415) 901-7000",
"Website": "www.sforce.com",
"lat": 37.79396,
"lon": -122.39496
}
]
}
{
"success": true,
"request-id": "cfe6321b-a23d-40d1-b6a9-28feba4fa310",
"key": "accounts",
"accounts": [
{
"id": "001i000000PscewAAB",
"Name": "GenePoint",
"Type": "Customer - Channel",
"BillingStreet": "345 Shoreline Park\nMountain View, CA 94043\nUSA",
"Phone": "(650) 867-3450",
"Website": "www.genepoint.com"
},
{
"id": "001i000000PscexAAB",
"Name": "United Oil & Gas, UK",
"Type": "Customer - Direct",
"BillingStreet": "Kings Park, 17th Avenue, Team Valley Trading Estate,\nGateshead, Tyne and Wear NE26 3HS\nUnited Kingdom",
"Phone": "+44 191 4956203",
"Website": "http://www.uos.com"
},
{
"id": "001i000000PsceyAAB",
"Name": "United Oil & Gas, Singapore",
"Type": "Customer - Direct",
"BillingStreet": "9 Tagore Lane\nSingapore, Singapore 787472\nSingapore",
"Phone": "(650) 450-8810",
"Website": "http://www.uos.com"
},
{
"id": "001i000000PscezAAB",
"Name": "Edge Communications",
"Type": "Customer - Direct",
"BillingStreet": "312 Constitution Place\nAustin, TX 78767\nUSA",
"Phone": "(512) 757-6000",
"Website": "http://edgecomm.com"
},
{
"id": "001i000000Pscf0AAB",
"Name": "Burlington Textiles Corp of America",
"Type": "Customer - Direct",
"BillingStreet": "525 S. Lexington Ave\r\nBurlington\r\nNC\r\n27215\r\nUSA",
"Phone": "(336) 222-7000",
"Website": "www.burlington.com"
},
{
"id": "001i000000Pscf1AAB",
"Name": "Pyramid Construction Inc.",
"Type": "Customer - Channel",
"BillingStreet": "2 Place Jussieu\r\nParis\r\n75251\r\nFrance",
"Phone": "(014) 427-4427",
"Website": "www.pyramid.com"
},
{
"id": "001i000000Pscf2AAB",
"Name": "Dickenson plc",
"Type": "Customer - Channel",
"BillingStreet": "1301 Hoch Drive\r\nLawrence\r\nKS\r\n66045\r\nUSA",
"Phone": "(785) 241-6200",
"Website": "dickenson-consulting.com"
},
{
"id": "001i000000Pscf3AAB",
"Name": "Grand Hotels & Resorts Ltd",
"Type": "Customer - Direct",
"BillingStreet": "2334 N. Michigan Avenue, Suite 1500\nChicago, IL 60601, USA",
"Phone": "(312) 596-1000",
"Website": "www.grandhotels.com"
},
{
"id": "001i000000Pscf4AAB",
"Name": "Express Logistics and Transport",
"Type": "Customer - Channel",
"BillingStreet": "620 SW 5th Avenue Suite 400\nPortland, Oregon 97204\nUnited States",
"Phone": "(503) 421-7800",
"Website": "www.expressl&t.net"
},
{
"id": "001i000000Pscf5AAB",
"Name": "University of Arizona",
"Type": "Customer - Direct",
"BillingStreet": "888 N Euclid \nHallis Center, Room 501\nTucson, AZ 85721\nUnited States",
"Phone": "(520) 773-9050",
"Website": "www.universityofarizona.com"
},
{
"id": "001i000000Pscf6AAB",
"Name": "United Oil & Gas Corp.",
"Type": "Customer - Direct",
"BillingStreet": "1301 Avenue of the Americas \nNew York, NY 10019\nUSA",
"Phone": "(212) 842-5500",
"Website": "http://www.uos.com"
},
{
"id": "001i000000Pscf7AAB",
"Name": "sForce",
"BillingStreet": "The Landmark @ One Market\r\nSan Francisco\r\nCA\r\n94087\r\nUSA",
"Phone": "(415) 901-7000",
"Website": "www.sforce.com"
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment