private IEnumerable <EntityReference> GetStepImageReferences(
            IOrganizationService service,
            Guid stepId,
            string imageName,
            CrmData.SdkImageType imageType)
        {
            var query = new QueryExpression
            {
                EntityName = CrmData.SdkMessageProcessingStepImageEntityName
            };

            query.Criteria.AddCondition(
                CrmData.SdkMessageProcessingStepImage_SdkMessageProcessingStepId,
                ConditionOperator.Equal,
                stepId);

            query.Criteria.AddCondition(
                CrmData.SdkMessageProcessingStepImage_Name,
                ConditionOperator.Equal,
                imageName);

            query.Criteria.AddCondition(
                CrmData.SdkMessageProcessingStepImage_ImageType,
                ConditionOperator.Equal,
                (int)imageType);

            var steps = service.RetrieveMultiple(query);

            return(steps.Entities.Select(e => e.ToEntityReference()));
        }
        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);
            }
        }