Copy and Paste Page Layouts
July 24th, 2008The Force.com IDE and the new metadata API have enabled copy and paste moving of Page Layouts. Here’s a quick movie showing just how easy it is:
The Force.com IDE and the new metadata API have enabled copy and paste moving of Page Layouts. Here’s a quick movie showing just how easy it is:
Things have been pretty quiet here as I was on vacation for much of the month of July. I put work completely out of my mind (well, almost completely, more on that later). But I didn’t put triathlon out of my mind–I did 3 races in 3 weeks!
Here are some things I learned:
Here’s my first race report.
God Bless America Super-Sprint Triathlon, Wautoma, Wisconsin
The city of Wautoma, in central Wisconsin, has a population of about 3000, but that probably increases 5 fold in the summer when all the lakes are filled with visitors from the south–mainly Milwaukee and Chicago. We vacationed about 10 minutes from Wautoma, and our visit happened to coincide with the 3rd annual running of the God Bless America Triathlon on the 4th of July.
I surely couldn’t pass up doing a race with a name like that, only 10 minutes from our vacation cottage. So my wife and I signed up for this insanely short race–200m swim (!), 9 mile bike, and 2 mile run.
It turned out to be a lot of fun, and is probably the only triathlon I’ll ever do with a 7 foot tall fiberglass steer in the transition area. About two hundred hardy souls braved the 75 degree water of Silver Lake, and took in the beautiful rolling countryside around the lake.
I’ve never been anywhere near the front of a triathlon. I’m always solidly in the middle of the pack. I’ll paraphrase Joe Friel–one thing you can’t control in Triathlon is who else is going to show up at the race. I’m used to getting my butt kicked by Seattlite triathletes with their $7000 bikes and high VO2 maxes. But this race was on a holiday, in northern Wisconsin, and was crazy-short, so maybe I had a chance to do well.
I can’t really describe what the swim was like. It was over in 3 minutes. I just flailed as fast as I could. I was 7th out of the water and 4th out of transition on the bike. I moved up to second and was a couple bike lengths behind the leader and the motorcycle escort for a mile before he slowly pulled away from me. I ended the bike second overall. Unheard of!
I’m not a fast runner, so I’m used to getting passed on the run. But I vowed that I could go really hard for 2 miles–only 2 miles! I made it about a mile before I was passed, putting me in 3rd place. After the turn around I saw that the guy in 4th place wasn’t far behind me. He caught me with about half a mile left.
But, I didn’t let him go. I stayed behind him and did something I’ve never done before, I passed him back, with about 100m left. I really wanted to place, since I wasn’t sure I’d ever have the opportunity again. I mean, I didn’t want to have to travel to Cutbank, Montana for a race in February or something like that…
Right after I passed him, I saw Beth running out the other way and gave her a high five, even though I was dying. I’m sure that is what kept him from catching me. (He’d have his revenge in a week…)
Beth had a great race even though she hadn’t been training for it. She got really fired up by the racing aspect and remembered how much fun she had in her previous tris.
I ended up 3rd by 3 seconds! I won a sweet t-shirt with a red white and blue eagle head on it, a trophy, and 16 ounces of goo. The race was well-run and a ton of fun. I hope to place in a race again, but I will have to search out the rare opportunities like this one, and hope all those athletes faster than me are at a barbecue or something.
Overall Place: 3
Age Group Place: 1
Overall Time: 41:57
Swim: 3:12
T1: 1:11
Bike: 23:26
T2: 0:46
Run: 13:22 (fastest I’ve run since a dog chased me when I was 10)

The 100-mile Mountains to Sound relay race was run yesterday in 90 degree heat. 25% of the proceeds of the race go to ONW/Northwest client Mountains to Sound Greenway Trust.
The race has 5 stages starting at Snoqualmie Pass at 3000′ and ending in Ballard, at sea level, a mile from my house. Most competitors are part of 5 person teams, but a few hardy souls attempt the race solo.
My friend Brian Bruininks was one of those people who ran it solo. I had the pleasure of running along with him for moral support the last 6 miles of the race, and watching as he won it all! It was truly an inspiring performance and I’m going to try to take some of his ability to “suffer well” into my next few races this summer.
Incredible work, Brian!
Also congrats to Pat Shaw who’s relay team broke the top 10 overall! Nice work Pat!

Is it really fair to go on vacation 1.5 miles from the iphone data coverage boundary? The wrong side of the boundary?
Anyone know where I can buy iphone methadone?
Matthew noticed that when you create an advanced formula on an Opportunity, you see a field called ContactId:

It doesn’t show up in the Admin interface, though. And when Matthew tried to use it, it didn’t have anything in it.
Does anyone know what this lookup field is?
Here’s my optimistic speculation: they are building functionality that will automatically put the Primary Contact Role’s Contact Id in this field. Having that field on the opp would let us do more things more easily using cross-object formulas. Maybe the field made it through QA for Summer ‘08 but the rest of the functionality didn’t make the schedule.
Another speculation is that this field would work the other way–if you create an Opp with a Contact Id in this field they will get a contact role.
Another speculation? It’s neither and I’m just making stuff up. But if that’s the case, why is this field semi-visible? Where did it come from?
Update: This doesn’t appear to be related to the relatively new functionality to connect a new opportunity from a contact to the most recent campaign that contact is member of.
At ONE/Northwest, we’re all about using appropriate tools for the job. Because of that, we’ve done some work building connections between Salesforce.com and Plone. We love Salesforce.com for CRM functions, and Plone is great for externally facing publishing and gathering of information.
Together they can be pretty powerful. My colleague Andrew Burkhalter has produced a couple screen movies of this integration in action.
First, he shows a use case for creating a form that saves data directly to Salesforce.com. This example creates complex, related data from a single form. It’s completely flexible, and very powerful.
In this second video, Andrew walks through our new Plone RSVP product that makes it easy to publish events and take registrations directly to Salesforce.com. Again, we’ve focused on flexibility, allowing you to use any objects you want to represent events and people.
If you want an open-source CMS for managing your website that is integrated with Salesforce.com, you should check out Plone and the connections we’ve created to Salesforce.com.
Back in February, I wrote that VisualForce was going to be a “game changer.” Now that it has been released into the wild and I’ve started to work with it, I wanted to give an update on my thoughts.
This is perhaps the most impressive technology I have seen from Salesforce.com since I started working with the app almost 4 years ago.
I don’t say this lightly. I’ve seen a lot of amazing things from Salesforce. The Ajax toolkit, Custom Objects and other deep customizations, formula fields and rollups, workflow, the Appexchange, Apex code. I loved every one of these and I know they are amazingly complex.
But VisualForce is amazing. Here are a few reasons why.
Apex may be the most difficult technical challenge that Salesforce.com has pulled off to date. Allowing thousands of people to run crappy code in multi-tennancy without burning down the house is a feat. But VisualForce is the most impressive thing I’ve seen, much in the same way the iPhone is impressive–it’s the design that is brilliant, not the brute force technicality of it.
I’ve been amazed during my learning process just how much I don’t have to do to get things to work correctly. I showed a colleague my first real VisualForce page that will replace a complex S-Control for creating multiple payments connected to an Opportunity. He liked what he saw, But he wanted me to make a change. “Add the Paid checkbox to the form where we’re creating multiple Installment records, so that users can create payments and mark them paid on creation if they want.”
To add that simple bit of functionality to the S-Control would have taken me at least 30 minutes. I would have had to change the SOQL statement to include the field. Then I would have changed the HTML table to make room for this new field. Then change the for loop in to add a new checkbox to each row of the display. And then change my update statement to get this new field from the DOM object and insert it into the new objects as they are created.
In VisualForce the change was literally 10 seconds. I told the VisualForce page that I wanted the Paid field in the table. That was it. Once VisualForce knew where I wanted the field in the UI, the rest was taken care of for me.
So congratulations to Doug Chasman who was the inspiration for VisualForce so long ago, and to Andrew Waite who has shepherded it on the difficult road to General Release. And to the myriad folks at Salesforce.com who were involved. This is killer platform technology.
Once again Salesforce.com has shown just how far ahead of other cloud databases they are. We continue to see the future of database development in Salesforce.com, and it comes once again in the form of platform design. So get your tools and your reference manuals and get at it! You have to work hard to stay in front of the wave!
On Saturday, I did an Olympic distance triathlon. I did the same race a year before and wrote it up here.
I am really happy with my results:
Total Time: 2:27:23
Overall place: 28th
Place in my age group: 5th
Swim split: 0:25:54
Overall Swim place: 38th
Bike split: 1:07:32
Overall bike place: 22nd
Place after the bike: 20th
Run split: 0:49:30
Overall run Place: 58th
The swim went fine. Last time I did the race I breathed every other stroke the whole .9 miles. This time I relaxed a bit and did some breathing every third stroke when things opened up a bit. The new wetsuit was great, and I hardly noticed the frigid water. I knocked almost 4 minutes off my time from last year.
I love my bike! At multiple points during the 28 mile ride I thought or even said aloud how cool a machine this bike is. It’s amazing how little energy is wasted converting muscle contraction to rolling. I hit 39.9 mph on one descent, and the bike was solid as a rock. What a blast! I was shocked to learn after the race that I was only 5 minutes off the best time overall. I’ve been focusing on the bike leg in my training, but I didn’t expect it to pay off this much. I averaged 24.6 mph.
The first mile of the run was painful. It was also painful to be passed by so many runners! In the swim you can’t really tell how well you’re doing because you’re underwater. In the bike, I don’t get passed a lot. But in the run, you hear people coming up behind you, then they pass you, and then you watch them slowly pull away. I ran around 8 minute miles, which was great for me, but I need to get to 7 minute miles to be really competitive, I think. I’m not sure that’s even possible!
I had the pleasure of traveling down and racing with John, a friend of mine from previous work experience. It’s a ton more fun doing an event with friends than going it alone. You get to tell all the race stories to someone who cares!
Check out this new beefy section on the Salesforce site using the Force.com Toolkit for Google Apps.
On brief look, it appears to be a bunch of Apex to make it easier to write Apex code that does things like create calendar items, contacts, blogger posts. Pretty cool concept–they’re making it tons easier for developers to add office functionality to Salesforce.com.
It’s pretty exciting. I wonder what apps they will release tomorrow? Maybe mail merge to Google Doc? Export reports to Google Spreadsheets?
Update: Adam’s announcement is here.