Decoding Salesforce

Decoding Salesforce

The hows and whys of Salesforce.com

Posts Tagged ‘Visualforce’

Inline Google Maps using Visualforce

Sometime ago we’ve seen how to integrate Google Maps in a Salesforce.com page to pinpoint a specific address on the map, more precisely, how to add an inline map to pinpoint an Account Billing Address. I revisited the script I wrote more than a year ago and produced it as a Visualforce page, here’s the result.

The finished product

Here’s a screenshot of what we are going to get:

Inline Google Maps using Visualforce

Improvements

  • I’m now using Google Maps API v3, which makes the map faster to load and doesn’t require an API key anymore.
  • I removed the search term {!Account.BillingState}, so the script should now correctly map any address, not only US ones.
  • It degrades nicely if the Account Billing Address isn’t found, as shown below:

Setup

Follow the 3 steps below:

  1. In Salesforce.com, navigate to Setup > Customize > Develop > Pages and create a new Visualforce Page with the following code:
    <apex:page standardController="Account">
    
    <head>
    
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
    <script type="text/javascript"> 
    
    $(document).ready(function() {
      
      var myOptions = {
        zoom: 15,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        mapTypeControl: false
      }
      
      var map;
      var marker;
      
      var geocoder = new google.maps.Geocoder();
      var address = "{!Account.BillingStreet}, " + "{!Account.BillingCity}, " + "{!Account.BillingPostalCode}, " + "{!Account.BillingCountry}";
      
      var infowindow = new google.maps.InfoWindow({
        content: "<b>{!Account.Name}</b><br>{!Account.BillingStreet}<br>{!Account.BillingCity}, {!Account.BillingPostalCode}<br>{!Account.BillingCountry}"
      });
    
      geocoder.geocode( { address: address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK && results.length) {
          if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
          
            //create map
            map = new google.maps.Map(document.getElementById("map"), myOptions);
          
            //center map
            map.setCenter(results[0].geometry.location);
            
            //create marker
            marker = new google.maps.Marker({
                position: results[0].geometry.location,
                map: map,
                title: "{!Account.Name}"
            });
            
            //add listeners
            google.maps.event.addListener(marker, 'click', function() {
              infowindow.open(map,marker);
            });
            google.maps.event.addListener(infowindow, 'closeclick', function() {
              map.setCenter(marker.getPosition()); 
            });
            
          }
          
        } else {
          $('#map').css({'height' : '15px'});
          $('#map').html("Oops! {!Account.Name}'s billing address could not be found, please make sure the address is correct.");
          resizeIframe();
        }
      });
      
      function resizeIframe() {
        var me = window.name;
        if (me) {
          var iframes = parent.document.getElementsByName(me);
          if (iframes && iframes.length == 1) {
            height = document.body.offsetHeight;
            iframes[0].style.height = height + "px";
          }
        }
      }
      
    });
    </script>
    
    <style>
    #map {
      font-family: Arial;
      font-size:12px;
      line-height:normal !important;
      height:250px;
      background:transparent;
    }
    </style>
    
    </head>
     
    <body>
    <div id="map"></div> 
    </body> 
    </apex:page>
    
  2. Add the Visualforce page on the Account page layout (in a single-column section) and set it’s height to be 250px.
  3. All done! :) Navigate to one of your Account records and verify the map is displaying correctly!

Let me know if you have any questions/comments!

Tabbed Account page using Visualforce

Ok, so, I’ve been poking around at Visualforce a little in my spare time and I came across this tutorial on how to create a tabbed Account page on the Salesforce Developer site.

Check it out! Tabbed browsing within records in salesforce, this should help tidy up some of those annoyingly long Page Layouts.

I’ve implemented this in my Developer Org and it Looks great, I can’t wait until Visualforce is released to Production.

The World Of Apex

Hi Everyone! Sorry for the long absence from posting.

Where have I been I hear you ask, as the title of the post suggests, I’ve been lost in the “The World of Apex”, as I like to call it.

What is Apex? Apex is salesforce.com’s on demand programming language, it’s similar to Java in its syntax but differs in some important ways; you can get all the info on the force.com developer site.

For an administrator like me Apex is one of the most useful technologies that Salesforce have produced, it allows so much more flexibility when building customization onto your existing applications and building new custom applications.

Before I go into much more detail I want to get one thing clear, I am by no means a developer, I’ve done some small amounts of programming here and there, but nothing substantial, I don’t even hold a college degree, so if I can program Apex so can you!

When I started looking into Apex I was amazed at how powerful it was but found out very quickly how much hassle it can also cause. Salesforce have built what they call governor limits into Apex, which is basically a set of in built limits which you need to work within when developing; you can find more information about it here. The reason for this is that instead of running on your machine, Apex runs completely on the salesforce.com servers and they simply can’t afford that someone would write a program that could hog all the resources on their servers and cause the whole system to crumble.

Over the next few posts (I say posts because I really don’t know how often I’m going to get posting) I’m going to go through some basic concepts of Apex and provide examples of Apex triggers and classes I’ve written.

If you’ve visited the link above to the developer site you’ll also have seen information on that page regarding Visualforce. Visualforce is a HTML like markup language that allows you to restructure and build custom pages and User Interfaces for your salesforce.com implementation, currently its still in a developer preview and isn’t available to your live systems so I won’t be delving into that one just yet.

Well that’s the introductions out of the way, next post: “Getting Started”..