private void CreateMessageProcessingStepImage( IOrganizationService service, ITracingService tracer, Guid stepId, string imageName, CrmData.SdkImageType imageType, CrmData.SdkMessageName messageName, string attributes) { var existingImages = GetStepImageReferences(service, stepId, imageName, imageType); if (existingImages.Any()) { tracer.Trace("A step image named '{0}' of type '{1}' already exists.", imageName, imageType.ToString()); } else { var image = new Entity(CrmData.SdkMessageProcessingStepImageEntityName); image[CrmData.SdkMessageProcessingStepImage_SdkMessageProcessingStepId] = new EntityReference(CrmData.SdkMessageProccessingStepEntityName, stepId); image[CrmData.SdkMessageProcessingStepImage_Name] = imageName; image[CrmData.SdkMessageProcessingStepImage_EntityAlias] = imageName; image[CrmData.SdkMessageProcessingStepImage_ImageType] = new OptionSetValue((int)imageType); image[CrmData.SdkMessageProcessingStepImage_MessagePropertyName] = CrmData.GetMessageProperyName(messageName); if (!string.IsNullOrEmpty(attributes)) { image[CrmData.SdkMessageProcessingStepImage_Attributes] = attributes; } service.Create(image); } }
private IEnumerable <EntityReference> GetStepReferences( IOrganizationService service, string entityLogicalName, CrmData.SdkMessageName messageName, string assemblyName, string pluginName) { var messageReference = GetMessageReference(service, messageName); // Find message processing steps var query = new QueryExpression { EntityName = CrmData.SdkMessageProccessingStepEntityName, ColumnSet = new ColumnSet(CrmData.SdkMessageProccessingStep_Id) }; // That are for the Number Generator plugin query.Criteria.AddCondition( CrmData.SdkMessageProccessingStep_PluginTypeId, ConditionOperator.Equal, GetPluginTypeReference(service, assemblyName, pluginName).Id); // And of the correct message type query.Criteria.AddCondition( CrmData.SdkMessageProccessingStep_SdkMessageId, ConditionOperator.Equal, messageReference.Id); // With a message filter var messageFilterLink = query.AddLink( CrmData.SdkMessageFilterEntityName, CrmData.SdkMessageProccessingStep_SdkMessageFilterId, CrmData.SdkMessageFilter_Id); // That is for a create message messageFilterLink.LinkCriteria.AddCondition( CrmData.SdkMessageFilter_SdkMessageId, ConditionOperator.Equal, messageReference.Id); // And to our entity messageFilterLink.LinkCriteria.AddCondition( CrmData.SdkMessageFilter_PrimaryObjectTypeCode, ConditionOperator.Equal, entityLogicalName); var steps = service.RetrieveMultiple(query); return(steps.Entities.Select(e => e.ToEntityReference())); }
private void DeleteMessageProcessingSteps( IOrganizationService service, string entityLogicalName, CrmData.SdkMessageName messageName, string assemblyName, string pluginName) { var existingSteps = GetStepReferences(service, entityLogicalName, messageName, assemblyName, pluginName); foreach (var step in existingSteps) { service.Delete(CrmData.SdkMessageProccessingStepEntityName, step.Id); } }
private EntityReference GetMessageReference(IOrganizationService service, CrmData.SdkMessageName messageName) { var query = new QueryExpression { EntityName = CrmData.SdkMessageEntityName, ColumnSet = new ColumnSet(CrmData.SdkMessage_Id) }; query.Criteria.AddCondition( CrmData.SdkMessage_Name, ConditionOperator.Equal, messageName.ToString()); var sdkMessages = service.RetrieveMultiple(query); var sdkMessage = sdkMessages.Entities.First(); return(sdkMessage.ToEntityReference()); }
private Guid CreateMessageProcessingtStep( IOrganizationService service, ITracingService tracer, string entityLogicalName, CrmData.SdkMessageName messageName, IEnumerable <string> attributeNames, string assemblyName, string pluginName) { var messageReference = GetMessageReference(service, messageName); var existingSteps = GetStepReferences(service, entityLogicalName, messageName, assemblyName, pluginName); if (existingSteps.Any()) { tracer.Trace("A '{0}' step already exists for entity [{1}].", messageName.ToString(), entityLogicalName); return(existingSteps.First().Id); } else { tracer.Trace("Creating a '{0}' step for the entity [{1}].", messageName.ToString(), entityLogicalName); // Register a "create" step under the Number Generator plugin for the requested entity type var step = new Entity(CrmData.SdkMessageProccessingStepEntityName); step[CrmData.SdkMessageProccessingStep_Name] = string.Format("{0}: {1} of {2}", pluginName, messageName, entityLogicalName); step[CrmData.SdkMessageProccessingStep_Mode] = new OptionSetValue((int)CrmData.CrmPluginStepMode.Synchronous); step[CrmData.SdkMessageProccessingStep_PluginTypeId] = GetPluginTypeReference(service, assemblyName, pluginName); step[CrmData.SdkMessageProccessingStep_Rank] = 1; step[CrmData.SdkMessageProccessingStep_SdkMessageId] = messageReference; step[CrmData.SdkMessageProccessingStep_Stage] = new OptionSetValue((int)CrmData.CrmPluginStepStage.PreOperation); step[CrmData.SdkMessageProccessingStep_SupportedDeployment] = new OptionSetValue((int)CrmData.CrmPluginStepDeployment.ServerOnly); step[CrmData.SdkMessageProccessingStep_SdkMessageFilterId] = GetMessageFilterReference(service, messageReference, entityLogicalName); if (attributeNames != null && attributeNames.Any()) { step[CrmData.SdkMessageProccessingStep_FilteringAttributes] = String.Join(",", attributeNames); } var stepId = service.Create(step); return(stepId); } }