Printing Mailing Labels from Salesforce

Thanksgiving and Christmas are just around the corner – would you like to send cards to your customers?  Doing this with Salesforce and a Dymo printer is quite straightforward.

You may want to create a new field in your Contacts account that allows you to mark customers who should receive cards.  I have a Status field that allows me to find customers who have a Support agreement with me, and I select on that basis.  (If you’re unsure how to add a new field to an object, watch this video from Salesforce.)

In Salesforce, go to Reports->New Report.   Select “Accounts & Contacts,” and use the report type “Contacts & Accounts.”   Update the columns so you use the following fields:

 

First Name Last Name Account Name Mailing Street Mailing City Mailing State/Province Mailing Zip/Postal Code

If required, you can also add Mailing Country.  Once you have all your fields selected, use filters to reduce the list to only the contacts you want, selecting on the field you used to determine if the contact gets a card.  In my case, that would be the Status field.  Then do an Export, and choose “Details Only” with format CSV.

In the Dymo Label app on your computer, use File->Import Data->New.  The default label is Address Barcode on Top, but you can change this if you like.  I like the address label without a barcode.  Select your data file (the CSV you just created from Salesforce), and click Next.  On the “Arrange Data Fields on the Label Layout” page, check the box labelled “Use first row as field names.”  To create the label, you just double click on each field, and lay it out on the label.  By the time you’re done, you should have something like this:

Dymo label for Salesforce Contact

Now just print them out and get cracking on those holiday cards!

From Zen Cart to Salesforce – Handling Accounts

Unlike most B2C e-commerce systems, Salesforce makes a distinction between Contacts, which are identified by an email address, and Accounts, which are identified by a name and site.  Contacts belong to an Account, and an Account may have many Contacts.

The way I handled this relationship in the first version of  Zen Cart to Salesforce was simply use the email address as the Account name. This has a significant advantage, since the email address for a shopping cart account is an immutable field.

However, some larger customers have multiple email addresses associated with a single account.   Also, some customers had e-mail address changes over the life of their relationship with me.

For these reasons, I decided to add a “salesforce_account_name”  field to the customers table.  I populate this only in cases where the email address is not sufficient.   I also had to modify the customer export script to export that field rather than the email address in the Account column of the CSV when it was set.

This new way of handling Accounts is reflected in the 360 Sales Reporting modification I did, to get more accurate per-account sales data.

Showing Zen Cart Customer Updates needed by Salesforce

If you’ve installed my Zen Cart to Salesforce Customer Import tool, and done a few exports of customers from your admin, you’d probably like an easy way to see how many updates (if any) are outstanding when you login to your Zen Admin.

I have made a small modification to the admin dashboard (in Zen Cart 1.5.5) to do this, which is described below.  Steps:

a) Add the define BOX_ENTRY_UPDATES_TO_SALESFORCE to admin/includes/languages/english/index.php.

define('BOX_ENTRY_UPDATES_TO_SALESFORCE','New/Updated records for Salesforce');

b) Add the logic to calculate and display the number of new/updated records to admin/index_dashboard.php.

Calculate it below the salemaker query on line 31:

$last_export = $db->Execute("SELECT * FROM " . TABLE_SFDC_CONFIG);
$last_customers_export = $last_export->fields['last_customers_export'];
$salesforce_customers_query = "SELECT count(*) AS count FROM " . 
   TABLE_CUSTOMERS . " c, " . TABLE_ADDRESS_BOOK . " a, " . 
   TABLE_CUSTOMERS_INFO . " ci WHERE a.customers_id = c.customers_id 
   AND a.address_book_id = c.customers_default_address_id AND 
   ci.customers_info_id = c.customers_id AND 
   (ci.customers_info_date_account_created > '" . 
   $last_customers_export . "' OR 
   ci.customers_info_date_account_last_modified > '" . 
   $last_customers_export . "')";
$salesforce = $db->Execute($salesforce_customers_query);

Now display it below the customers count display on line 72:

 
echo '<div class="row"><span class="left">
   <a href="' . zen_href_link(FILENAME_SFDC_EXPORT_CUSTOMERS) . '">' . 
   BOX_ENTRY_UPDATES_TO_SALESFORCE . '</a></span>
   <span class="rigth"> ' . $salesforce->fields['count'] . '</span></div>';

The typo in the class name right is required in Zen Cart 1.5.5; it has been fixed in Zen Cart 1.5.6.

Dreamforce 2018 – talking about small business

Dreamforce is the largest software conference in the world, drawing over 170,000 participants from all over the world to San Francisco, California.  The topic?  Salesforce.

I was fortunate to be selected to share my experience with Salesforce Essentials (and talk about small business in general) at this year’s Dreamforce conference. This was the quote I liked the best, which was shared by the Salesforce SMB team on Twitter.

That Software Guy at Dreamforce 2018.

That Software Guy gets a shoutout from Salesforce

The Salesforce folks have given me another nice mention on their blog.  They even talk about my Zen Cart to Salesforce integration, which was a nice touch.   Although I did this integration for Zen Cart, it could easily be adapted for any other cart, so I’m hoping it helps out some non-ZenCart folks too.

First Salesforce Essentials user on the Salesforce blog

Who was it?  Why, your humble servant, of course!

Rekha Srivatsan (PM of Essentials) interviewed me on the SMB use case for Essentials.  She told me she loved my story, and as the keynote speaker for this year’s Dreamforce conference, wanted to present it.  WOW!  (What am I going to say, no?)

So we had a conversation which she summarized on the Salesforce blog.

Thanks, Rekha and the Salesforce team!

Zen Cart Products Prices into Salesforce

Yesterday we imported products from Zen Cart into Salesforce.  Now we have to set prices for those products, since products and prices are separate in Salesforce.

So I created a Zen Cart Export Prices for Salesforce tool to help you do that.  Just like product import, it uses dataloader.io.  It’s a little tricky, because you use different techniques to import prices for new products vs updating prices for products that already have prices, but I walk you through everything.

Zen Cart Products into Salesforce

Recently I wrote up a blog post about putting your Zen Cart Customers into Salesforce.  Although many people stop there, if you want to build Quotes in Salesforce, the next thing you need to do is a product import.  So I created a Zen Cart Export Products for Salesforce tool to help you do that.  It’s not as easy a process as exporting customers because the Salesforce Data Import Wizard doesn’t handle products, but dataloader.io does – and there’s a generously sized free tier, so give it a shot!