I have developed a mash-up of Salesforce.com and Google Maps. The script was developed in PHP and utilizes the PHP Nusoap Sforce Toolkit, created by Ryan Choi, to communicate with the Sforce API and Phoogle, developed by System 7 Designs, to communicate with the Google API.

Using the PHP Nusoap toolkit, this script logs into Salesforce and queries for all Account records that have a complete address. After setting up a Phoogle map instance, the script adds each address to the map. In addition to sending the map the latitude and longitude values, it also passes an HTML formatted string that populates each pin with the Account Name, Address and a link to the record in Salesforce.com.

The demo is now closed because my web host turned off calls to file_get_contents and I am not planning on re-writing the functionality. I noticed that the code is not running properly on IE. It gets an error and says “Operation Aborted”. I am not sure why. I have found a bunch of posts giving some solutions, but none of them seem to work. Still working on that.

The script has been tested on PHP 4.3.11, 4.4.1 and PHP5. In order for this to work on PHP5, you must download the latest version of the code, which came out on 12/6/2005. Older versions of the code need to use PHP4 because the soapclient class conflicts with another class in many PHP5 installs.

The script is free for download and licensed under the GPL. To get this setup on your own webserver, do the following:

Download the scripts. The zip file contains all of the files you need.

The PHP NuSoap Sforce toolkit code was not changed. The master source for this code, as well as other sample files for it, are at its Sourceforge page. The included PHP NuSoap Sforce toolkit files are:

salesforce.php: Primary file that defines the salesforce class.

nusoap.php

partner.wsdl

I had to make some changes to the Phoogle files. I have communicated these changes to the Phoogle developers so they may get incorporated. The master source for the Phoogle code and documentation on its functionality is located here. The included Phoogle files are:

phoogle.php

Sign-up for a Google API key. Google requires you to have a new API key for every web server directory you use.

Enter your API key into the google-map-api-key.php file.

Open the MapAccounts.php file and search for the phrase Enter a default username here. Update the file with your username.

Open the MapAccounts.php file and search for the phrase Enter a default password here. Update the file with your password.

Load all of these files to your web server.

Run the MapAccounts.php file

Phoogle geocodes addresses using the Yahoo Geocode API. I have noticed that the current code has some trouble with multi-line addresses. If you are receiving errors, that could be why.

Please comment on this post and let me know what you think. Also, comment here and add links to how you have used this script or modified it. Have fun!

Updated 12/8/2005:
I made some small tweaks to the code that allows it to be run from within a custom tab so that it leverages the existing Salesforce session and applies all of the user’s visibility settings. I was able to get it working by having a Custom Tab with the following URL:

You are welcome to try it out with the URL at arrowpointe.com if you want to, but I encourage you to host the PHP files yourself and link to your own files. My pages are NOT running in HTTPS. That’s why you should host them yourself. Also, I could change the code in my files at any time, so your link might break too.

In case you didn’t notice when looking at the code, you can alternatively pass in a username and password using the “un” and “pw” parameters the same way you can do it to log into Salesforce.

Note that the code is sensitive and, therefore, only pulls back Accounts with a complete addresses. Also, things like multi-line addresses or addresses that cannot be geocoded will result in script errors. I don’t have the error handling working now and this is not intended to be service I am providing at this time.

It works in PHP5 now too. The Salesforce PHP Nusoap package was updated on Sourceforge.

Jim Thompson Said,

Ray Masa Said,

This is a very cools script. However, since I donÃ¢â‚¬â„¢t use Salesforce (or any other CRM), I thought I might be able to modify your script to work with my own database (which has addresses) and display them on the map.

However, I have not been able to modify it. I keep getting different errors (depending on what I change). Wondering if you could point me in the right direction.

First (since I am not connecting to Salesforce.com), I removed the following required file from the MapAccounts.php
salesforce.php

And replaced a different required file (db.php), which includes connection information to my database.

Then I removed the salesforce specific code from the MapAccount.php:
From Line 33: // Create Salesforce object and set the default batch size.

To Line 80: } else { // successful login

Then I changed the $queryString =, to query fields in my database.

This is as far as I have been able to figure out. What am I missing? Have I removed things I should not have?

Ray Masa Said,

Ray Masa Said,

Just a quick updated, looked through the Phoogle documentations and emailed Justin (Phppgle developer) and he was a great help as well. Among you, him and the documentations and scripts on your and his site I was able to get it working using my own database.

George Morris, are you using the URL I have indicated above or did you download the files and install them on your webserver?

The URL above is not supported. It was used as a test and you are welcome to try it, but I cannot confirm that it will work correctly. Using the downloaded files should work.

Your client’s username and password should work fine. You client should be on the Enterprise or Ultimate Editions. These are the only ones that have access to the Sforce API. If you client is using the professional edition, then this solution will not work because the API is not enabled without an additional fee.

Another option for Google Mapping your data is to use a Salesforce S-Control. Check it out here.

Lou Goddard Said,

I’ve downloaded the files and hosted them with 2003 Standard Server running PHP 5.1.4 on IIS 6. I have edited the files to include my Google API key as well as my username and password. The scirpt is not working from both within Salesforce and externally. Any suggestions are welcome.

pardeep: I have recently switched my preference from Phoogle to GoogleMapAPI.class.php, which you mention, and I have had good success with it.

Can you provide more explanation as to what is not working properly? Maybe some examples.

I have found that it works best using the Google geocoding service rather than Yahoo. Yahoo only supports the US. Google supports the US and a lot more. I would start there. Then make sure you are sending a street address, city, state (if applicable), postal code and country (use the ISO codes if you can). separate each value with spaces. It should work fine.

Adam F Said,

Is there a way to actually do everything inside SalesForce using an s-control? I saw that someone had done it about a year ago, but since then all of the pages have been removed. I really would like to contain everything inside the SalesForce system to maintain tight security and easy accessibility.

Salesforce had developed something a while back to do this. I know they have it working, but I don’t know of many people ever got this to work successfully for themselves. I think it has a lot of dependencies. I am sure it is possible, but not something I have done.

What I have done is just as easy, but it works in PHP rather than s-controls. It uses the Salesforce API for communicating with Salesforce and the PHP toolkit to communicate with the API. It is currently not setup to use SSL, but it could be. The authentication to Salesforce could also be setup to be based upon a current Salesforce session. In other words, a user would access it via a web tab and the only way the code could access the salesforce database is to leverage the currently logged in users session. If someone went to the page without having logged into Salesforce.com, they’d get an error.

Lastly, the files sit on your webserver, not mine. You can do anything you want with them once they are on your site.

W2F Said,

I want to get the PHP developer tool provided by Sales Force to use the API which can edit the contacts and leads within Sales Force.

I have tried running the script on PHP 5.2 on my machine (file SforcePartnerClientTest.php), but i keep getting the error on connection that says:

Warning: require_once(PHPUnit2/Framework/TestCase.php) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\salesforce update\test\SforcePartnerClientTest.php on line 2

Can anybody help?

Thanks

Jordan Thompson Said,

Hi, Is anyone looking at doing this with Quickbooks? A Mashup for their customer list would be GREAT. I am not sure if it is a proprietary format and DB and therefore impossible. If so we will have to wait on QB to do it. Any thoughts would be great. Thank you !!!