Mar 28

I created integrations with ExactTarget for a client and found it was an up-hill battle to get information about their web services and rest interface.  The only way to get the documentation is behind lock and key, a private forum and knowledge-base called 3sixty that is slow, has no user participation, and if you are a freelancer it’s just another layer of overhead to get an account to talk to people there – probably the reason why there is virtually no user adoption.  :)

Since I see no merit in contributing code to a private forum that you have to buy in for the sake of that company, I bought a domain and put up a punBB forum to give people a public space to talk openly (like the Salesforce.com forums):
http://ExactTargetDeveloper.com 

Aug 29
Group Edition AppExchange
icon1 James Sullivan | icon2 Salesforce.com | icon4 08 29th, 2008| icon3No Comments »

Due to the number of Salesforce companies we’ve dealt with using Group Edition and missing out on apps like MintFly, Vertical Response, and Jigsaw, we’ve created an “idea” on the Salesforce IdeaExchange:

Why limit AppExchange applications to Professional and above? Some applications like MintFly, Vertical Response, and Jigsaw would be a great help to the Group edition customers.

Please allow AppExchange and other partner applications to work with Group Edition.

Jul 2

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.

picture-7.png

Feb 20

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…

  1. Disallow editing of an Opportunity once the stage is “Closed Won”: and(PRIORVALUE(StageName) = “Closed Won”, not( $UserRole.Name = “Finance”))
  2. 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?

Feb 1

We have adopted an Opportunity close process using Approval Processes in Salesforce because I rely 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:

Screenshot of Convert to Order Button

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}’);

Sep 13

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:

20070913_send_an_email_button.png

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. :)

20070913_create_special_button1.png
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:

20070913_add_button_to_related_list.png

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.

Apr 10
Campaign Reports
icon1 James Sullivan | icon2 Salesforce.com | icon4 04 10th, 2007| icon32 Comments »

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.

Feb 28

I created my first S-Control for a Dashboard. Since I looked everywhere for an example before I got started and found nothing, I wanted to post it here for anyone else searching to find. It takes a list of the asset records and gives a percentage of each grouped by name. I created it because I couldn’t get my report total formulas to do the same for me. It was a fun way to try it out as well: Read the rest of this entry »

Dec 14
S-Control Example
icon1 James Sullivan | icon2 Salesforce.com | icon4 12 14th, 2006| icon3No Comments »

When I started developing AJAX S-Controls I looked everywhere for a good, simple example. Something simple enough to illustrate the mechanics of the process while still being functional. Someone came to me looking for the same thing but now all my S-Controls are hundreds of lines long, so they’re not a simple example.  I made a simple example of an S-Control that prints out the open leads belonging to my user. For each lead, there is a button that allows you to update the status to “Closed Lost”. I based it off this very popular blog post from the SF-Blog. Here it is:  20061214-code.txt

Dec 14

You don’t have to wait for the Winter 2007 release of Salesforce.com to take advantage of approval processes. That’s right – you can do it now using the existing functionality. All you need is a custom field on the activity object and you can make workflow rules to accomplish virtually any approval process. Here’s how:

Enter setup (you must be an admin) and navigate to “App Setup” > “Customize” > “Activities” > “Custom Fields”:
20061213nav.jpg

Now, create a custom field here titled “Workflow_ID” as a text field with length of 50. This field will record the be used to trigger your workflows. The system will ask if you want this field shown or editable by anyone. I suggest that it’s visible to admin but not editable by anyone else. Personally, I haven’t found reason to include it in a layout.
With this custom field, you can now create workflow chains. Where you once had three check-boxes that held the different levels of completion for approvals on a record, you can have the one task workflow handle this. Let’s take Opportunity close as an example.

In an example situation, an Opportunity must be approved by legal before going to finance. A task is created as a template for the legal review. On this task, since you’re admin, populate the Workflow_ID field with “OPPTY_APPROVAL_STEP_1″.

Now, create a workflow rule assigning this task to the finance guy when the Opportunity closes. Great, now you’ve got a legal approval – finance needs to know when it’s complete.

Next step, create a new workflow based off the “Task” object with criteria related to the Workflow_ID field. Use the following criteria:

Workflow_ID , equals , OPPTY_APPROVAL_STEP_1
Status , equals , Completed

Now, when that task is closed, this rule can be triggered. Follow the steps above with a different Workflow_ID key and you have task-based workflow.

« Previous Entries