You need to sign in to do that
Don't have an account?

How do you work with relations
I'm trying to bulk upsert some data, here is the structure
Account *parent*
Provider__c "child of Account*
Practice__c *child of Provider__c*
I always have the account id.
I need to add a new provider and its practices so I have something as follows.
Provider__c prov = new Provider__c; Practice__c prac = new Practice__c; prov.Account_Name__c = accountID; prov.Name= "value"; ...etc prac.Provider__c = prov.ID ...etc upsert(prov) upsert(prac)
As you can see prov.ID is going to be empty so it flags an error trying to do the upsert.
How to I correctly link these items and upsert them?
Thanks
Still looking for an answer to my issue.
Provider__c would need an External Id that is known at time of creation.
Yes, you could use the Account's ID as the external id of the provider (making a sort of 1-1 relationship).
Things to note:
Do not attempt to set prac.Provider__r to provider. When setting a reference, the reference instance should *only* have the external id field set, nothing else.
The parent object must come before the child object in the sObject array in the upsert/create.
upsert/create will batch types together and can have a maximum of 6 (I believe) batches. What this means is that you cannot do something like this:
upsert new sObject[]{ prov1, prac1, prov2, prac2, ... prov7, prac7 };
You would need to do something like this:
upsert new sObject[]{ prov1, prov2, ... prov7, prac1, prac2, ... prac7 };
You just need to upsert the Providers, before you work on the Pactices
My appologies, JPClark3's method is correct. I was mistaking upsert with update. Upsert cannot have multiple types in the same call, see here:
http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_upsert.htm
You may run into issues with the code he posted, if you are calling from C#, though. Upsert requires an external id field (which can be the Id field).
Also, I am unsure if upserting the provider objects will automatically fill in the Ids. I know it does from Apex, but I am unsure if C# will do so.