Salesforce to Highrise conversion successful
|
|
I just converted an organization from Salesforce to Highrise. I have the same feeling after cleaning up my office… no clutter, much cleaner, peaceful, and more productive – thank you 37 Signals! In the process I wrote a small conversion script that takes a Salesforce offline backup (what you get when you close down your account or you request it) and converts it to an Outlook-style CSV file that you can import into Highrise. It only converts contacts and accounts, no opportunities, cases, etc. Those could be imported using the Highrise API, but I don’t need them for this project. The code below requires Ruby and the FasterCSV gem.
#!/usr/bin/env ruby
# Convert Salesforce backup to Outlook export file that can be imported in Highrise.
#
# Mike Sax, Feb 6, 2008 - mike @ sax.net
#
# Free to use as-is - not supported - it works on my machine.
require 'rubygems'
require 'fastercsv'
FILES_PATH = "/Users/Mike/Downloads/salesforce"
FIELDS = [ "Title","First Name","Middle Name","Last Name","Suffix","Company","Department","Job Title",
"Business Street","Business Street 2","Business Street 3","Business City","Business State",
"Business Postal Code","Business Country/Region","Home Street","Home Street 2","Home Street 3",
"Home City","Home State","Home Postal Code","Home Country/Region","Other Street","Other Street 2",
"Other Street 3","Other City","Other State","Other Postal Code","Other Country/Region",
"Assistant's Phone","Business Fax","Business Phone","Business Phone 2","Callback","Car Phone",
"Company Main Phone","Home Fax","Home Phone","Home Phone 2","ISDN","Mobile Phone","Other Fax",
"Other Phone","Pager","Primary Phone","Radio Phone","TTY/TDD Phone","Telex","Account","Anniversary",
"Assistant's Name","Billing Information","Birthday","Business Address PO Box","Categories","Children",
"Directory Server","E-mail Address","E-mail Type","E-mail Display Name","E-mail 2 Address",
"E-mail 2 Type","E-mail 2 Display Name","E-mail 3 Address","E-mail 3 Type","E-mail 3 Display Name",
"Gender","Government ID Number","Hobby","Home Address PO Box","Initials","Internet Free Busy",
"Keywords","Language","Location","Manager's Name","Mileage","Notes","Office Location",
"Organizational ID Number","Other Address PO Box","Priority","Private","Profession","Referred By",
"Sensitivity","Spouse","User 1","User 2","User 3","User 4","Web Page" ]
def csv_to_hash(filename)
records = {}
FasterCSV.open("#{FILES_PATH}/#{filename}", "r") do |csv|
field_names = csv.shift
for row in csv.read
record = {}
for i in 0..row.length
record[field_names[i]] = row[i]
end
records[row[0]] = record
end
end
records
end
accounts = csv_to_hash("Account.csv")
contacts = csv_to_hash("Contact.csv")
FasterCSV.open("outlook.csv", "w", :force_quotes => true) do |out|
out << FIELDS
for key, contact in contacts
account = contact["AccountId"] ? accounts[contact["AccountId"]] : nil
record = {}
record["Job Title"] = contact["Title"]
record["First Name"] = contact["FirstName"]
record["Middle Name"] = contact[""]
record["Last Name"] = contact["LastName"]
record["Company"] = account["Name"] if account
record["Business Street"] = contact["MailingStreet"]
record["Business City"] = contact["MailingCity"]
record["Business State"] = contact["MailingState"]
record["Business Postal Code"] = contact["MailingPostalCode"]
record["Business Fax"] = contact["Fax"]
record["Business Phone"] = contact["Phone"]
record["Mobile Phone"] = contact["MobilePhone"]
record["E-mail Address"] = contact["Email"]
record["E-mail Display Name"] = "#{contact['FirstName']} #{contact['LastName']}"
# Can't add notes to company, so append them to contact notes.
record["Notes"] = "#{contact['Description']}\r\n#{account ? account['Description'] : ''}"
record["Web Page"] = account["Website"] if account
line = []
for name in FIELDS
line << record[name]
end
out << line
end
end
#eof
|
|
|
Hi Mike, Brand new to Highrise so apologies if this is a bit of a remedial question. We are trying to use Highrise as a salesforce automation app, primarily to manage our interactions with clients and ideally have some ability to manage a sales pipeline. From what I have seen it doesn’t seem super apparent how we would get salesforce-like functionality in that area. Appreciate any insight you can provide. Thanks much, |
