Search code examples
transactionsmicrosoft-dynamicsdynamics-crm-2015

CRM 2015 ExecuteTransactionRquest with AssociateRequest example?


Does anyone have a working code snippet for CreateRequest and a subsequent AssociateRequest in a CRM ExecuteTransactionRequest set? I'm searching and having no luck.

Thank you for any help :-)

EDIT: A code snippet...

var entPetition = new msd_petition();
Petition.MapEntityFromModel(entPetition, mdlPetition);
var reqPetition = new CreateRequest() { Target = entPetition };
_transactionRequest.Requests.Add(reqPetition);

// Add PetitionEvents to transaction
foreach (var mdlEvent in mdlPetition.Events)
{
    var entEvent = new msd_petitionevent();
    PetitionEvent.MapEntityFromModel(entEvent, mdlEvent);
    var reqEvent = new CreateRequest() { Target = entEvent };
    _transactionRequest.Requests.Add(reqPetition);
    // Add Petition-PetitionEvent association
    var assocPetition2PetitionEvent = new AssociateRequest()
    {
        Target = new EntityReference(msd_petition.EntityLogicalName, entPetition.msd_petitionId.Value),
        RelatedEntities = new EntityReferenceCollection
        {
            new EntityReference(sevp_petitionevent.EntityLogicalName, entEvent.msd_petitioneventId.Value)
        },
        Relationship = new Relationship("msd_petition_petitionevent")
    };
    _transactionRequest.Requests.Add(assocPetition2PetitionEvent);
}

Solution

  • You do not need the second AssociateRequest. You can achieve the same using just the CreateRequest and Entity.RelatedEntites property. It would be executed as a single transaction.

    var entPetition = new msd_petition();
    Petition.MapEntityFromModel(entPetition, mdlPetition);
    
    var petitionPetitionEventRelationship = new Relationship("msd_petition_petitionevent");
    var petitionRelatedEvents = new EntityCollection();
    
    // Add PetitionEvents to transaction
    foreach (var mdlEvent in mdlPetition.Events)
    {
        var entEvent = new msd_petitionevent();
        PetitionEvent.MapEntityFromModel(entEvent, mdlEvent);
        petitionRelatedEvents.Entities.Add(entEvent);
    }
    
    entPetition.RelatedEntities.Add(petitionPetitionEventRelationship, petitionRelatedEvents);
    
    service.Create(entPetition);