From 54c4e0d9c9c8e9bfb6fd97544c291a661c9466af Mon Sep 17 00:00:00 2001 From: Shaun Ressler Date: Mon, 7 Mar 2022 19:53:46 -0500 Subject: [PATCH] Common.CloneRecord fieldToReplace Moved logic that updates parent record ID on clone into core CloneRecord logic. Fix for issue #255. --- .../Class/CloneChildren.cs | 24 +++++++++---------- .../msdyncrmWorkflowTools/Common.cs | 18 +++++++++++++- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Class/CloneChildren.cs b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Class/CloneChildren.cs index 293cd08..e23b238 100644 --- a/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Class/CloneChildren.cs +++ b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Class/CloneChildren.cs @@ -119,21 +119,19 @@ protected override void Execute(CodeActivityContext executionContext) var tools = new msdyncrmWorkflowTools_Class(objCommon.service); var children = tools.GetChildRecords(_relationshipName, parentId); - - foreach (var item in children.Entities) - { - var newRecordId = objCommon.CloneRecord(item.LogicalName, item.Id.ToString(), fieldstoIgnore, prefix); - Entity update = new Entity(item.LogicalName); - update.Id = newRecordId; - update.Attributes.Add(_newParentFieldName, new EntityReference(destinationEntityName, new Guid(destinationId))); - if (!string.IsNullOrEmpty(_oldParentFieldName) && _oldParentFieldName != _newParentFieldName) - { - update.Attributes.Add(_oldParentFieldName, null); - } - - objCommon.service.Update(update); + var fieldsToReplace = new Dictionary + { + { _newParentFieldName, new EntityReference(destinationEntityName, new Guid(destinationId)) } + }; + if (!string.IsNullOrEmpty(_oldParentFieldName) && _oldParentFieldName != _newParentFieldName) + { + fieldsToReplace.Add(_oldParentFieldName, null); + } + foreach (var item in children.Entities) + { + _ = objCommon.CloneRecord(item.LogicalName, item.Id.ToString(), fieldstoIgnore, prefix, fieldsToReplace); } diff --git a/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Common.cs b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Common.cs index 7e65d51..8b34649 100644 --- a/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Common.cs +++ b/msdyncrmWorkflowTools/msdyncrmWorkflowTools/Common.cs @@ -121,7 +121,7 @@ public List getEntityAttributesToClone(string entityName, IOrganizationS return (atts); } - public Guid CloneRecord(string entityName, string objectId, string fieldstoIgnore, string prefix) + public Guid CloneRecord(string entityName, string objectId, string fieldstoIgnore, string prefix, Dictionary fieldsToReplace = null) { tracingService.Trace("entering CloneRecord"); if (fieldstoIgnore == null) fieldstoIgnore = ""; @@ -201,6 +201,22 @@ public Guid CloneRecord(string entityName, string objectId, string fieldstoIgnor } } + if (fieldsToReplace != null) + { + foreach (KeyValuePair replaceField in fieldsToReplace) + { + tracingService.Trace("attribute:{0}", replaceField.Key); + if (newEntity.Attributes.ContainsKey(replaceField.Key)) + { + newEntity[replaceField.Key] = replaceField.Value; + } + else + { + newEntity.Attributes.Add(replaceField.Key, replaceField.Value); + } + } + } + tracingService.Trace("creating cloned object..."); Guid createdGUID = service.Create(newEntity); tracingService.Trace("created cloned object OK");