public void UpsertPluginTypeAndSteps(Guid parentId, Type pluginType, string solutionName, RegistrationTypeEnum registrationType) { Guid Id = pluginType.Id ?? Guid.Empty; if (Id == Guid.Empty) { Id = pluginRepository.GetPluginTypeId(parentId, pluginType.Name); logWarning?.Invoke($"Extracted id using plugin type name {pluginType.Name}"); } var type = new PluginType() { Name = pluginType.Name, Description = pluginType.Description, FriendlyName = pluginType.FriendlyName, TypeName = pluginType.TypeName, WorkflowActivityGroupName = pluginType.WorkflowActivityGroupName, PluginAssemblyId = new EntityReference(PluginAssembly.EntityLogicalName, parentId) }; Id = ExecuteRequest(registrationType, Id, type); // AddComponentToSolution(Id, ComponentType.PluginType, solutionName); logVerbose?.Invoke($"UpsertPluginType {Id} completed"); foreach (var step in pluginType.Steps) { var sdkMessageProcessingStepId = UpsertSdkMessageProcessingStep(Id, step, solutionName, registrationType); logVerbose?.Invoke($"Upsert SdkMessageProcessingStep {sdkMessageProcessingStepId} completed"); foreach (var image in step.Images) { var sdkMessageProcessingStepImageId = UpsertSdkMessageProcessingStepImage(sdkMessageProcessingStepId, image, solutionName, registrationType); logVerbose?.Invoke($"Upsert SdkMessageProcessingStepImage {sdkMessageProcessingStepImageId} completed"); } } }