Salesforce.com for your iPhone… NOW!
Posted on July 2, 2008
Too many times we have tried to look up a contact or account in Salesforce.com on our iPhone and give up after waiting 10 minutes for each page to load. The reason is that the iPhone is just not capable of loading the 50+ images, 10+ javascript files, 5+ CSS files, and then process all the javascript code in the user interface.
We are putting the finishing touches on MintFly.com - a system that creates iPhone friendly pages from your Salesforce.com account. This way, we can look up an address, update a record, or search our database within seconds instead of minutes.
» Filed Under Salesforce.com | Leave a Comment
Open Source Code Contribution Visualization
Posted on June 13, 2008
This stunning visualization of of code contribution to an open source project (Python) is not only a stunning display of colors and motion. The video starts with one contributor for the longest time. The code is completely circling him and there is no other input. There is so much effort put into the project over such a long period of time before any other contributors were introduced. Once other contributors come about, their additions are few and far between. The little contributions slowly start to build up and accelerate until they become a full stream and eventually eclipse the original person who started the project.
The fact that one person took so long to build it is a testament that open source projects are in fact very similar to our businesses. Someone out there is putting in a lot of effort, working toward a vision, and is dedicated to the goal. Businesses aren’t an over-night success with a grand opening event, they are a consistent challenge to the owner to acquire customers and keep the bottom line low.
code_swarm - Python from Michael Ogawa on Vimeo.
» Filed Under Uncategorized | Leave a Comment
Beauty In Advertising
Posted on May 17, 2008
Creating beauty in advertising makes people appreciate your brand. Jet Blue’s new advertising campaign thanking you for not flying, as they do the flying for you, and numerous silly images make it a pleasant experience to see run into their brand. It is a risk, as not all of these endeavors turn out well, but when it’s slightly quirky and improves your day - you do crazy things like spending a dozen more dollars on a short-haul flight because you want to try out Jet Blue, those guys that made you smile a few times last week.
If you’re looking for advertising inspiration you should check out SkaryIdeas.com:
» Filed Under Uncategorized | Leave a Comment
Ajax Loading Animated Gif Generator
Posted on May 14, 2008
AJAX web applications typically use a processing or loading indicator when pulling data back from the server. We use them in S-Controls for Salesforce.com integrations and for our other web projects. Recently when performing a web search for a generic animated loading indicator (this search) I was amazed and surprised at a great tool that someone created:
The site gives you a lot of different styles of moving gifs and then lets you assign colors (or transparency) to the indicator and then you can download it for use in your site. Awesome little tool site!
» Filed Under Uncategorized | Leave a Comment
Help! I need to Lock an Opportunity after Close!
Posted on February 20, 2008
Problem: We’re using a “Closed Won” Opportunity as a financial booking and we need a way to lock the record from people editing it once it reaches this state. This also means we can’t allow people to modify the Opportunity LineItems (aka Opportunity Products).
Solution: Validation Rules to the rescue!
I originally searched Google / SFDC Help for validation rules and triggers for delete but didn’t find any articles that made it apparent. A validation rule is executed any time a record is saved either through the Salesforce.com Application or through the API (including Outlook, Excel Connector, and custom code). In our case, Opportunities are only allowed to be deleted by Admin role (me). This means that they can only be edited (1/2 the battle).
This means we need two Validation rules…
- Disallow editing of an Opportunity once the stage is “Closed Won”: and(PRIORVALUE(StageName) = “Closed Won”, not( $UserRole.Name = “Finance”))
- Disallow editing of Opportunity Products once the Opportunity Stage is “Closed Won”: AND( NOT($UserRole.Name = “Finance”), ISPICKVAL( Opportunity.StageName , “Closed Won” ))
Now, when someone (sales, support, whoever) tries to edit the Opportunity to change the date, they will receive the error message from validation rule 1, hopefully stating they need to go to finance to make changes. If someone tries to update an Opportunity Product amount, description, or custom field they will receive an error from validation rule 2. In this example, only Finance can edit your Closed Won Opportunities but you could also unlock it for Admin or other roles depending on the size of your organization.
This was implemented for use in a close process where Salesforce.com is tied out completely to contract values so we can use Lucidera and Salesforce.com reports for real business decisions as we are completely confident the data is correct. What do you think?
» Filed Under Salesforce.com | 1 Comment
Salesforce.com: Start and Approval Process from custom links and buttons
Posted on February 1, 2008
At one company we have adopted an Opportunity close process using Approval Processes. It is a smallish (70 person) company which uses a desktop finance package and relies on Salesforce.com for the majority of the bookings reporting. To make the data more reliable there is now a process that requires the approval process to change the Opportunity stage to “Closed Won”, what we now consider an “Order”.
To make it more intuitive to the salespeople, we wanted to have a link or button at the top of the Opportunity titled “Convert to Order” which would kick off the approval process. Here is a picture of it in action, a button that submits for approval:

Want to do the same thing?
Navigate To: Setup > Customize > Opportunities > Buttons and Links
Press the “New” button and use these details:
Label: Convert to Order
Name: Convert_to_Order
Display Type: Detail Page Button
Behavior: Execute JavaScript
OnClick JavaScript: if ((Modal.confirm && Modal.confirm(’Once you submit this record for approval, you might not be able to edit it or recall it from the approval process depending on your settings. Continue?’)) || (!Modal.confirm && window.confirm(’Once you submit this record for approval, you might not be able to edit it or recall it from the approval process depending on your settings. Continue?’))) navigateToUrl(’/p/process/Submit?id={!Opportunity.Id}&retURL=%2F{!Opportunity.Id}’);
» Filed Under Salesforce.com | 1 Comment
Free Software Foundation Membership
Posted on December 3, 2007
The Free Software Foundation (FSF) is a 501(c)(3) non-profit organization based in Boston, MA, USA. It relies on individuals like us to support FSF’s mission to preserve, protect and promote the freedom to use, study, copy, modify and redistribute computer software, and to defend the rights of Free Software users.
» Filed Under Open Source | Leave a Comment
Auto-Populate Email Template on “Send an Email”
Posted on September 13, 2007
If you have a collection of just a few really common emails that are sent repeatedly to numerous customers and prospects, you are likely using the email templates functionality. If you get complaints about how long it takes to pick the template from the pop-up window, I have a solution for you…
You can create a “Send an Email” button that pre-populates a specific template into the form. This means you could have your existing “Send an Email” button plus a “Send Reminder Email” and have the form automatically populated with the “reminder” template.
To start, pick a template that you would like to use. Navigate to Setup > Communication Templates > Email Templates and then open the template you would like to use. In the URL / Address bar locate the Salesforce.com ID of the template. In case you’re not familiar with the Salesforce.com IDs, it should be a 15 character ID that starts “00″ and ends with some alpha-numeric characters. Here is one of my template URLs with the Id underlined for illustration:
https://na4.salesforce.com/00D40000000yz5a?setupid=CommunicationTemplatesEmail
Once you have the ID, go to a Lead or Contact and click your old-fashioned “Send an Email” button:

Once the email composition page loads, copy the full URL of the page. It should look something like this:
https://na4.salesforce.com/email/author/emailauthor.jsp?p2_lkid=00Q6000000zzTI2&rtype=00Q&retURL=%2F00Q9000000DytI2
With both the template ID and the URL for the “Send an Email” page, we are ready to create our custom button. Navigate to Setup > Customize > Activities > Task Buttons and Links and press the “New” button to… create a new button.

The new button needs to be created specifically for the screen we will place it. In this example we will use a lead. Paste your “Send an Email” URL that you acquired in the previous step. Now, replace the two Salesforce.com IDs in the url with the string {Lead.ID}. When the button is placed on the screen, this will make it always link back to the lead screen from which you clicked the button. Append the string “&template=” and then the ID of your email template to the end of the URL. This will now default the button to that template which you picked before.
The full URL in my case now looks like this:
https://na4.salesforce.com/email/author/emailauthor.jsp?p2_lkid={!Lead.Id}&rtype=00Q&retURL=%2F{!Lead.Id}&template_id=00D40000000yz5a
Press the “Save” button to save your work and create your shiny new button.
Navigate to Setup > Customize > Leads > Page Layouts to add this new button to a page your user can see. Edit the layout where you want it placed. Click to select the related list at the bottom for “Activity History” and then click “Edit Properties” button. This will give you a pop-up configuration window where you can add your button to the header of that related list. At the bottom of the pop-up window is the section you need:

Move your new button into the “Selected Buttons” list, click “OK” on this window, and then save your page layout. You should have a button now on your Lead page that auto-populates with the template you desire.
» Filed Under Salesforce.com | 4 Comments
Campaign Reports
Posted on April 10, 2007
This post is technical in nature and may be unreadable by non-Salesforce.com-admin people.
Salesforce.com campaigns get a bad reputation regarding their functionality. I think it’s partly to blame on how the reports don’t allow enough joins (campaign-lead-opportunity) reporting and partly to blame on how the CampaignMember record is not available for inclusion in customization and workflow.
One of my regular blog reads, Gokubi, has a post about how difficult it is to use the Campaign object. Here are a couple tips that we compiled for making your experience with Salesforce.com Campaigns more bearable:
1. Look at campaign member details from within the campaign using a report:
Create this report:
Type: Campaigns > Campaigns with Leads (or contacts)
Filter: All Campaigns, and CampaignId equals “abcd”
Save the report in a folder that everyone can see (or at least marketing). You can override the report filters via the query-string. Here is my report URL:
https://na1.salesforce.com/00O60000001BzAf
Now, if you want to override a value in the filters, append this to the URL:
https://na1.salesforce.com/00O60000001BzAf?pv0={Campaign.Id}
The value to the right of “?pv0=” will be inserted into the first filter. If you take the URL you just made and use it as a custom link on a Campaign, you automatically have a campaign-specific report where you can drill into some information directly from the campaign detail screen.
» Filed Under Salesforce.com | 2 Comments
Marketing Dashboard
Posted on February 28, 2007
Measuring marketing is a popular topic right now. The tenure of CMO and marketing VPs is much shorter than your typical VP. Why is that? In my experience, it comes down to how they communicate with the other VPs and their board. Board members are ready with tough questions, trying to stump the marketing staff even before they enter the room. Most marketing organizations are viewed as wishy-washy, creative, and not connected to the bottom-line of the company. It’s really unfortunate when this organization is actually responsible for filling your sales pipeline and doing enough advertising and PR that people know what you do and how you’re better at doing it than your competitors.
If engineering delivers a really crappy product, someone will most likely get fired. If a sales staff misses their sales budget, someone will very likely get fired. If a finance department can’t keep a budget, someone will very likely get fired. If a support staff leaves customers consistently angry with service, someone will very likely get fired. If a marketing staff delivers really bad leads to sales so sales must do their own prospecting to fill their pipeline, nothing will happen to the marketing person.
If this organization is so critical in an organization than why is it so difficult to get reliable measurements? My personal experience is where the key players in marketing come from. They have a degree in English, or if you’re lucky, Communications. The marketing executives who have been around long enough to have solid experience come from a time where marketing wasn’t measurable. Now, with CRM and the electronic advertising mediums, a marketing organization is more measurable than ever. Even with that being the case there is still little being measured.
To quote Einstein: Everything that can be counted does not necessarily count; everything that counts cannot necessarily be counted.
The typical marketing staff probably talks to the board about lead counts. “We collected 12,345 this quarter. It was an increase by 12% over the previous quarter.” Now, the board of directors thinks: “… and?”.
Not only is the board waiting for more detail, looking for diagnostic feedback from the marketing organization, but the VP of sales is looking around the room with a funny face trying to convey to the board that “the lead counts are inflated! Don’t listen to the lead counts! My guys aren’t getting any real leads!”
How to avoid this problem?
- Define a common terminology: Have your marketing and sales people spend time together, not skipping from one topic to another, briefly touching on topics and not delving deeply enough into any to actually fix anything. Have an agenda (maybe this one) about what needs to be defined.
- Build a process: If you have leads that sit assigned to a salesperson as “Open” just because the salesperson thinks that eventually everyone will buy - get rid of that shit! If a sales department would actually close leads (even if only “Closed, Junk”) than the marketing department will be able understand the sales guy when he says that nobody wants to buy. You’re much better-off letting the data speak for itself than wasting your breath trying to convince someone they’re not doing a good job.
- Define what sales wants. Sales is not allowed to say “people ready to buy” because last time I checked, nobody actually asked someone registering for a whitepaper “would you like to buy our product now?”. By sales struggling to define what a good lead actually is, you’ve given the sales staff some understanding of how difficult the marketing role actually is.
- Have marketing and sales come up with a measure on how marketing can successfully meet the needs of sales: Just created a metric, a graph, or a table that represented the core deliverable of a marketing department (from the sales perspective).
» Filed Under Uncategorized | Leave a Comment
