Good day everyone,

I have installed an npsp package and then I created a visual force that will save a new affiliation . I've tried to used an external Id to save the data. I've already tried saving data using external Id in account and contact. But when I tried in npsp affiliation I've encounter some problem "Illegal assignment from Account to Id". What am I missing ? Below is my sample code. Please help. Thanks.

npe5__Affiliation__c aff =  new npe5__Affiliation__c();

Account accReference = new Account();
accReference.DI_extId__c = 'acc_12345';
aff.npe5__Organization__c   = accReference;

Contact conReference = new Contact();
conReference.DI_extId__c = 'con_12345';
aff.npe5__Contact__c    = conReference;

Account accountList = new Account();
accountList.Name = 'TEST ACCOUNT 1';
accountList.DI_extId__c = 'acc_12345';

Contact contactList = new Contact();
contactList.Last = 'TEST CONTACT 1';
contactList.DI_extId__c = 'con_12345';

Insert accountList;
Insert contactList;
Insert aff;

2 Answers 2



aff.npe5__Organization__c   = accReference;


upsert accReference;
aff.npe5__Organization__c   = accReference.Id;

accReference is an Account sObject, you need the ID. Same thing goes for the contact record.


After careful investigation and getting the idea of what you're actually trying to do, you need to set the __r relationship instead:

aff.npe5__Organization__r = accReference;

  • I think this not how External ID works. I want to save my data using External ID.
    – Hope
    Aug 21, 2015 at 4:34
  • I think you can only set the external Id to the object's external Id field, but not to a Salesforce lookup field. So, Account.External_Id = '1234'; will work, but Contact.AccountId = '1234'; won't work. Aug 21, 2015 at 4:41

First issue: External IDs only work for an upsert operation, where you are performing inserts.

Second issue: for those lookup fields, __c holds an id value, __r points to another record via a relationship.

So, your code though it is incomplete, might look like this:

// create an affiliation
npe5__Affiliation__c aff =  new npe5__Affiliation__c();

// create an account instance
Account accReference = new Account();
accReference.DI_extId__c = 'acc_12345';

// connect the field to the Account via reference
aff.npe5__Organization__r   = accReference;

// upsert the account
upsert accReference DI_extId__c;

// get the id of the account after DML and set the id for the lookup reference on the affiliation by reaching through the relationship
aff.npe5__Organization__c = aff.npe5__Organization__r.id;

// upsert the affliation
upsert aff;

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .