X-Squared Featured in ITA Newsletter

This week, X-Squared On Demand was featured in the Illinois Technology Association’s Industry Weekly newsletter ITA Member Q&A.

Thank you to the ITA for featuring us!

Technorati Tags:

Project: Change Owner Button in Visualforce

Salesforce Labs has put out a series of Mass Action packages on the AppExchange. There is Mass Transfer Opportunity Owner (uses AJAX), Mass Update Contact Addresses (AJAX), Mass Update Opportunity Owner, Mass Update Opportunity Close Dates, etc. All of these are “thick client” tools, meaning that data must be loaded onto your computer, altered, and then uploaded back to Salesforce.

Ron Hess released a super bit of code, found in the Visualforce documentation and elsewhere, to Mass Update Opportunity Stage and Close Date. It could, theoretically, be expanded to other fields as well. This got me thinking about doing so with other objects.

A while ago, I took the code for the Mass Delete button and altered it to change the owner of the selected records to the User clicking the button. It was like an Accept button, but I could use it for any object. Actually, it wasn’t as easy as that. I had to make one button for each object, and maintenance was a pain–whenever I created a new object, I needed to clone my code.

Drawing upon some code I found in the Developers Guide, I have written a Visualforce page to mass-change the owner of all selected records to any active User in Salesforce. Yes, it only works with Contacts for now, but my next step will be to use Dynamic Apex to pass the sObject name to the page and its extension/controller, allowing me to reuse one bit of code for multiple objects. We’ll see how it goes. But in the meantime, enjoy this page that lets you perform a search, check which records you want to transfer, and then input a User. I’ve tested it with 50 records at once, so that should suffice for most uses.

VF Page:

<apex:page standardController="Contact" recordSetVar="Contacts" id="updateOwnerPage">
<apex:form>
<apex:sectionHeader title="Change Owner for Contacts"/>
<apex:pageBlock mode="edit">
<apex:pageMessages />
<apex:pageblockSection title="Change" columns="1">
<apex:pageblockSectionItem >
<apex:outputLabel for="owner">New Owner</apex:outputLabel>
<apex:inputField id="owner" value="{!Contact.OwnerId}"/>
</apex:pageblockSectionItem>
</apex:pageBlockSection>
<apex:pageBlockSection title="Selected Contacts" columns="1">
<apex:pageBlockTable value="{!selected}" var="j" bgcolor="#F3F3EC" width="100%"
styleClass="list" rowClasses="dataRow" onRowMouseOver="hiOn(this);" onRowMouseOut="hiOff(this);">
<apex:column >
<apex:facet name="header">Contact Name</apex:facet>
<apex:outputLink value="{!URLFOR($Action.Contact.View, j.id)}">
{!j.FirstName} {!j.LastName}</apex:outputLink>
</apex:column>
<apex:column >
<apex:facet name="header">Account Name</apex:facet>
<apex:outputLink value="{!URLFOR($Action.Account.View, j.Account.id)}">
{!j.Account.Name}</apex:outputLink>
</apex:column>
<apex:column>
<apex:facet name="header">Current Owner</apex:facet>
{!j.Owner.Name}
</apex:column>
</apex:pageBlockTable>
</apex:pageblockSection>
<apex:pageBlockButtons location="bottom">
<apex:commandButton value="Save" action="{!save}"/>
<apex:commandButton value="Cancel" action="{!cancel}"/>
</apex:pageBlockButtons>
</apex:pageBlock>
</apex:form>
</apex:page>

Button:
Go to Setup -> Contact -> Buttons and Links
Create a new button, set it to execute in the current window with sidebar and header, and set it to call a Visualforce page. Select the page you just created. Then add the button to Contact Search Layout and to any Contact related lists you like.

Voila!

Technorati Tags: ,

Upcoming Plans

This is my first blog post since Dreamforce 2008, and I had an amazing time. Hello to everyone I met, and hello to all the people that I said I’d meet - but couldn’t. I left Dreamforce and came to Sydney to visit my family, and am writing this blog post sitting on a deck chair under a setting sun, listening to my niece and nephew play nicely.

This blog post is partly an announcement of X-Squared’s upcoming plans and projects, and partly a way to hold myself to my word. It is said that while managing the Yankees, Joe Torre tried to quit many times, until someone bet him $1000 that he couldn’t quit… and told everyone he knew about the bet. Clearly, $1000 is small change to Torre, but the pressure of the whole world knowing his plan to quit helped him quite a bit. So here is X-Squared On Demand’s list of projects and plans (outside of the standard billing work for our amazing clients):

Jon Mountjoy suggested that I pick one Salesforce development feature and learn it completely instead of making the mistake of trying to learn everything and doing it all poorly. I chose Visualforce. All my side projects from now on will involve Visualforce to some degree.

  • Lookup to Picklist: I’ve always been interested in lookup fields and have written some interesting implementations that use error messages and custom buttons to simplify and focus allowed values for lookups. Here, I plan to present the user with a list of all the target records available and to present them in a picklist. (Of course, if there are more than 50 records, I will leave the field as a lookup.)
  • Filtered Lookup: I have the code for a filtered lookup that utilizes a three-page wizard to choose the proper record for a lookup, but I want to simplify this to allow an administrator to limit a lookup to one Record Type or any other hard-coded filter. Then I’ll use a simplified wizard to enhance that feature, which would basically be like using the lookup filters in Enhanced Lookups currently available in the standard UI.
  • NonProfit EventForce using Google Sites: We started this project at Dreamforce 2008, and I have a non-profit client who would like a tool to allow registration for various kinds of events. This is a super opportunity to expand upon this hackathon project. Colin Loretz has agreed to help on this, and Steve Wright of Salesforce.com Foundation has offered to provide a salesforce.com technical resource if we make the code open-source. I told Steve that in my mind I was writing the code for the Foundation, and that the Foundation could do whatever it wanted with the code. So keep an eye out for this in the next month or two.
  • Airport Codes to Full Name of the airport when entered into a field, using Visualforce.
  • SIC to NAICS: I have NO idea why Salesforce CRM is so attached to SIC codes–after all, the government has completed its changeover to NAICS codes. I plan to use the existing conversion charts provided by the government to allow orgs to convert their data from SIC to NAICS.
  • Google Maps as a Data Enrichment Tool: Input the ZIP Code, and Google Maps will return a city/state. Or input the Street and City/State, and Google Maps will return the ZIP Code. Sorry, DemandTools and Postcode Anywhere, this might cut into your profit margin.
  • Drop.io for AppExchange: I love drop.io as a file sharing and storage tool, and with the release of their API–and Ron Hess’s explanation of his XMLDom Apex Class, it may be time to create a nice app allowing 100MB of storage per record in Salesforce CRM. It might require a couple of hacks before it can be used for more than standard objects, but this will likely be my ongoing work in progress.
  • Use Amazon EC2 Windows to put the Workbench in the Cloud.
  • And finally, I will spend the next year making a list of everyone I want to meet at Dreamforce 2009, and will find a way to see everyone there!

There are probably many more ideas sketched on napkins and pads of paper around my office, but this is a beginning list of projects I’m most passionate about. If anyone would like to help with any, please let me know!

Technorati Tags: , , ,

X-Squared at Dreamforce 2008

Please be sure to register for sessions at Dreamforce.

And DEFINITELY don’t miss my session!

Wrangle Data & Pump up the Configuration
“I’m administering Salesforce. I’ve learned the ropes. Now I want to get great!” In this session, we’ll review the latest insights and subtlties that top Salesforce consultants have learned on the front lines. We’ll focus on data and configuration to help cut the time you spend massaging data. You’ll also learn how to implement tricky config quirks you never thought possible.
Speaker: Ezra Kenigsberg, SALESFORCE.COM
Speaker: David Schach, X-Squared On Demand LLC
Date: Monday, November 3
Time: 11:45 a.m. - 12:45 p.m.

I’m on the Administrator track - we’ll be providing tips for configuring your org implementation and optimizations, and for ensuring that things remain smooth as you move forward as a Super Administrator.

Technorati Tags: ,

Zipcar: CaaS (Car as a Service)

A few weeks ago, I went on a Low Car Diet. No, I didn’t come up with the name; it’s the invention of Zipcar, a growing company with a product that, in these times of rising gas prices, is not only filling a growing demand, but is creating a market for its service.
After speaking to some people at Zipcar, and having rented cars a few times, I have come to realize the following:
In this age of Web 2.0 (and, according to some, Web 3.0), when Software as a Service is growing faster than ever, the on-demand model can be applied to other sectors, creating, for instance, Car as a Service.
OWN NOTHING
Ask anyone who drank the Software-as-a-Service Kool-Aid about in-house servers and you’ll be greeted with a face that looks like someone just took a bite out of a lemon, peel and all. In today’s quickly-evolving Information Technology world, ownership is nothing; rental is everything. How much does it cost to own a file server (including hardware, electricity, air conditioning, salaries for the in-house geeks, space that can’t be used for an office refrigerator, and more) per year? Compare that to the cost of storing files on Amazon Web Services! Compare purchasing a VPN appliance to the monthly cost of certificate-based Single Sign-On products like MyOneLogin by TriCipher. Pooling capital costs and being charged only for what we use is the new model. I don’t want to have to buy a 1TB NAS drive, and then to worry about if it is filling up; I’d rather pay per GB for shared storage, where my information is just as private, and arguably more accessible while being more secure (since nobody can walk into my office and steal my drives).
Cloud Computing is where it’s at. This is the solution to problems caused by using in-house systems and desktop applications inaccessible from any computer outside the office. And Cloud Driving seems to be just as viable a solution to the headache of owning a car and paying for gas, insurance, parking, and maintenance.
Let’s compare Salesforce, the top on-demand software application created by salesforce.com to Zipcar, a leading on-demand driving service created by, well, Zipcar. Read more

Technorati Tags:

A Listing in Alltop!

You know you’ve arrived when Guy Kawasaki give you his blessing and you find your blog in Alltop. Well, that’s exactly what has happened: Find this blog at Customerservice.alltop.com!

Technorati Tags: ,