public void UpdateRawInstance(DynamicUpdateMap updateMap, Activity targetDefinition, List <ActivityInstance> secondaryRootInstances, ref Collection <ActivityBlockingUpdate> updateErrors) { this.updateList = GetInstanceListsNeedingUpdate(updateMap, targetDefinition, secondaryRootInstances, ref updateErrors); if (updateErrors != null && updateErrors.Count > 0) { // error found. // there is no need to proceed to updating the instances return; } // if UpdateType is either MapEntryExists or ParentIdShiftOnly, // update the ActivityIDs and update Environments // also, update the ImplementationVersion. foreach (InstanceListNeedingUpdate update in this.updateList) { Fx.Assert(update.InstanceList != null, "update.InstanceList must not be null."); if (update.NothingChanged) { continue; } Fx.Assert(update.NewId != null, "update.NewId must not be null."); InstanceList instanceList = update.InstanceList; instanceList.ActivityId = update.NewId.AsByteArray(); if (update.ParentIdShiftOnly) { // this InstanceList must have been one of those whose IDs shifted by their parent's ID change, // but no involvement in DU. continue; } bool implementationVersionUpdateNeeded = false; if (update.MapEntry.ImplementationUpdateMap != null) { implementationVersionUpdateNeeded = true; } if (update.MapEntry.HasEnvironmentUpdates) { // update LocationEnvironemnt Fx.Assert(update.NewActivity != null, "TryGetUpdateMapEntryFromRootMap should have thrown if it couldn't map to an activity"); instanceList.UpdateEnvironments(update.MapEntry.EnvironmentUpdateMap, update.NewActivity); } for (int i = 0; i < instanceList.Count; i++) { ActivityInstance activityInstance = instanceList[i] as ActivityInstance; if (implementationVersionUpdateNeeded) { activityInstance.ImplementationVersion = update.NewActivity.ImplementationVersion; } } } }