Search code examples
dynamics-crmdynamics-crm-2011

Cannot specify child attributes in the columnset for Retrieve


In attempting to merge contacts in Microsoft CRM, I am using the following code -

//c1ID and c2ID are GUIDs of duplicated contacts.

EntityReference target = new EntityReference();
target.LogicalName = Contact.EntityLogicalName;

target.Id = c2ID;

MergeRequest merge = new MergeRequest();
// SubordinateId is the GUID of the account merging.

merge.SubordinateId = c1ID;
merge.Target = target;
merge.PerformParentingChecks = true;

Contact updater = new Contact();
Contact updater2 = new Contact();

updater = (Contact)xrmSvc.ContactSet.Where(c => c.ContactId.Equals(c1ID)).First();
updater2 = (Contact)xrmSvc.ContactSet.Where(c => c.ContactId.Equals(c2ID)).First();

MergeResponse mergedR = (MergeResponse)xrmSvc.Execute(merge);

When I try my Execute call here,I get this error -

Cannot specify child attributes in the columnset for Retrieve. Attribute: owneridname.

Am I not setting something correctly?


Solution

  • I wish I had some documentation for this, but although the official documentation notes that the UpdateContent is optional, experience proves that it is in fact necessary. In the MergeRequests I've tested, I always include that property in the request, and there's a post in the MSDN forums for Dynamics 3.0 that suggests the same.

    In fact, when I try to merge two contacts in my org without UpdateContent assigned, I actually get a FaultException saying the following:

    Required field 'UpdateContent' is missing

    Even though the documentation says it's optional!

    So I'd suggest populating the UpdateContent property with something as in the below and see if that works:

    var merge = new MergeRequest
    {
        // SubordinateId is the GUID of the account merging.
    
        SubordinateId = c1ID,
        Target = target,
        PerformParentingChecks = true,
        UpdateContent = new Contact()
    };