I was configuring DataLoader to export a list of Opportunities, and I went to select the “Owner Name”. However, only OwnerID is available on an Opportunity.
“No problem!” I think to myself, as I go and create a Custom Field with a formula equal to Owner.Alias.
“What?” I say in surprise. “It won’t let me access a field on the Owner object!”

Mmm. This is strange. Then a Google Search reveals an 18-month old Ideas request to Make “Owner Id” Look up fields available for formulas.
Oh dear.
Well, that’s a shame, but it’s easily solved! I created:
- A field called
Owner_Link__cof typeLookup(User) - A Trigger to copy
OwnerIdtoOwner_Link__cwhen the Owner is changed - A test for the Trigger
Trigger:
trigger Update_OwnerLink_on_Owner_Update on Opportunity (before update, before insert) {
// When 'Owner' field is changed, update 'OwnerLink' too
// Loop through the incoming records
for (Opportunity o : Trigger.new) {
// Has Owner chagned?
if (o.OwnerID != o.Owner_Link__c) {
o.Owner_Link__c = o.OwnerId;
}
}
}
Test:
public with sharing class TriggerTest_OwnerLink {
static TestMethod void testOwnerLink() {
// Grab two Users
User[] users = [select Id from User limit 2];
User u1 = users[0];
User u2 = users[1];
// Create an Opportunity
System.debug('Creating Opportunity');
Opportunity o1 = new Opportunity(CloseDate = Date.newInstance(2008, 01, 01), Name = 'Test Opportunity', StageName = 'New', OwnerId = u1.Id);
insert o1;
// Test: Owner_Link should be set to user 1
Opportunity o2 = [select id, OwnerId, Owner_Link__c from Opportunity where Id = :o1.Id];
System.assertEquals(u1.Id, o2.OwnerId);
System.assertEquals(u1.Id, o2.Owner_Link__c);
// Modify Owner
o2.OwnerId = u2.Id;
update o2;
// Test: Owner_Link should be set to user 2
Opportunity o3 = [select id, OwnerId, Owner_Link__c from Opportunity where Id = :o2.Id];
System.assertEquals(u2.Id, o3.OwnerId);
System.assertEquals(u2.Id, o3.Owner_Link__c);
}
}
This then gave me a new Owner object on my Opportunity on which I could create Formulas:

I could also use it in the DataLoader by referring to Owner_Link__r.Alias.
Hooray!
Easy to solve, but it’s a shame it was necessary.
The Bottom Line
- Formulas can’t access
Opportunity.Ownerfields - Create a ‘shadow’ field to hold Owner and populate it via a Trigger
