public static CrmPluginRegistrationAttribute CreateFromData(this CustomAttributeData data) { CrmPluginRegistrationAttribute attribute = null; var arguments = data.ConstructorArguments.ToArray(); // determine which constructor is being used by the first type if (data.ConstructorArguments.Count == 8 && data.ConstructorArguments[0].ArgumentType.Name == "String") { attribute = new CrmPluginRegistrationAttribute( (string)arguments[0].Value, (string)arguments[1].Value, (StageEnum)Enum.ToObject(typeof(StageEnum), (int)arguments[2].Value), (ExecutionModeEnum)Enum.ToObject(typeof(ExecutionModeEnum), (int)arguments[3].Value), (string)arguments[4].Value, (string)arguments[5].Value, (int)arguments[6].Value, (IsolationModeEnum)Enum.ToObject(typeof(IsolationModeEnum), (int)arguments[7].Value) ); } else if (data.ConstructorArguments.Count == 8 && data.ConstructorArguments[0].ArgumentType.Name == "MessageNameEnum") { attribute = new CrmPluginRegistrationAttribute( (MessageNameEnum)Enum.ToObject(typeof(MessageNameEnum), (int)arguments[0].Value), (string)arguments[1].Value, (StageEnum)Enum.ToObject(typeof(StageEnum), (int)arguments[2].Value), (ExecutionModeEnum)Enum.ToObject(typeof(ExecutionModeEnum), (int)arguments[3].Value), (string)arguments[4].Value, (string)arguments[5].Value, (int)arguments[6].Value, (IsolationModeEnum)Enum.ToObject(typeof(IsolationModeEnum), (int)arguments[7].Value) ); } else if (data.ConstructorArguments.Count == 5 && data.ConstructorArguments[0].ArgumentType.Name == "String") { attribute = new CrmPluginRegistrationAttribute( (string)arguments[0].Value, (string)arguments[1].Value, (string)arguments[2].Value, (string)arguments[3].Value, (IsolationModeEnum)Enum.ToObject(typeof(IsolationModeEnum), (int)arguments[4].Value) ); } foreach (var namedArgument in data.NamedArguments) { switch (namedArgument.MemberName) { case "Id": attribute.Id = (string)namedArgument.TypedValue.Value; break; case "FriendlyName": attribute.FriendlyName = (string)namedArgument.TypedValue.Value; break; case "GroupName": attribute.FriendlyName = (string)namedArgument.TypedValue.Value; break; case "Image1Name": attribute.Image1Name = (string)namedArgument.TypedValue.Value; break; case "Image1Attributes": attribute.Image1Attributes = (string)namedArgument.TypedValue.Value; break; case "Image2Name": attribute.Image2Name = (string)namedArgument.TypedValue.Value; break; case "Image2Attributes": attribute.Image2Attributes = (string)namedArgument.TypedValue.Value; break; case "Image1Type": attribute.Image1Type = (ImageTypeEnum)namedArgument.TypedValue.Value; break; case "Image2Type": attribute.Image2Type = (ImageTypeEnum)namedArgument.TypedValue.Value; break; case "Description": attribute.Description = (string)namedArgument.TypedValue.Value; break; case "DeleteAsyncOperation": attribute.DeleteAsyncOperation = (bool)namedArgument.TypedValue.Value; break; case "UnSecureConfiguration": attribute.UnSecureConfiguration = (string)namedArgument.TypedValue.Value; break; case "SecureConfiguration": attribute.SecureConfiguration = (string)namedArgument.TypedValue.Value; break; case "Offline": attribute.Offline = (bool)namedArgument.TypedValue.Value; break; case "Server": attribute.Server = (bool)namedArgument.TypedValue.Value; break; case "Action": attribute.Action = (PluginStepOperationEnum)namedArgument.TypedValue.Value; break; } } return(attribute); }
public static CrmPluginRegistrationAttribute CreateFromData(this CustomAttributeData data) { var attribute = new CrmPluginRegistrationAttribute(); var arguments = data.ConstructorArguments.ToArray(); if (arguments.Length == 8) { attribute.Message = (string)arguments[0].Value; attribute.EntityLogicalName = (string)arguments[1].Value; attribute.Stage = (StageEnum)Enum.ToObject(typeof(StageEnum), (int)arguments[2].Value); attribute.ExecutionMode = (ExecutionModeEnum)Enum.ToObject(typeof(ExecutionModeEnum), (int)arguments[3].Value); attribute.FilteringAttributes = (string)arguments[4].Value; attribute.Name = (string)arguments[5].Value; attribute.ExecutionOrder = (int)arguments[6].Value; attribute.IsolationMode = (IsolationModeEnum)Enum.ToObject(typeof(IsolationModeEnum), (int)arguments[7].Value); } else if (arguments.Length == 5) { attribute.Name = (string)arguments[0].Value; attribute.FriendlyName = (string)arguments[1].Value; attribute.Description = (string)arguments[2].Value; attribute.GroupName = (string)arguments[3].Value; attribute.IsolationMode = (IsolationModeEnum)Enum.ToObject(typeof(IsolationModeEnum), (int)arguments[4].Value); } foreach (var namedArgument in data.NamedArguments) { switch (namedArgument.MemberName) { case "RunAs": attribute.RunAs = (string)namedArgument.TypedValue.Value; break; case "FriendlyName": attribute.FriendlyName = (string)namedArgument.TypedValue.Value; break; case "GroupName": attribute.GroupName = (string)namedArgument.TypedValue.Value; break; case "Description": attribute.Description = (string)namedArgument.TypedValue.Value; break; case "DeleteAsyncOperation": attribute.DeleteAsyncOperation = (bool)namedArgument.TypedValue.Value; break; case "Offline": attribute.Offline = (bool)namedArgument.TypedValue.Value; break; case "Server": attribute.Server = (bool)namedArgument.TypedValue.Value; break; case "Action": attribute.Action = (PluginStepOperationEnum)Enum.ToObject(typeof(PluginStepOperationEnum), (int)namedArgument.TypedValue.Value); break; case "IsolationMode": attribute.IsolationMode = (IsolationModeEnum)Enum.ToObject(typeof(IsolationModeEnum), (int)namedArgument.TypedValue.Value); break; case "Message": attribute.Message = (string)namedArgument.TypedValue.Value; break; case "EntityLogicalName": attribute.EntityLogicalName = (string)namedArgument.TypedValue.Value; break; case "FilteringAttributes": attribute.FilteringAttributes = (string)namedArgument.TypedValue.Value; break; case "Name": attribute.Name = (string)namedArgument.TypedValue.Value; break; case "ExecutionOrder": attribute.ExecutionOrder = (int)namedArgument.TypedValue.Value; break; case "Stage": attribute.Stage = (StageEnum)Enum.ToObject(typeof(StageEnum), (int)namedArgument.TypedValue.Value); break; case "ExecutionMode": attribute.ExecutionMode = (ExecutionModeEnum)Enum.ToObject(typeof(ExecutionModeEnum), (int)namedArgument.TypedValue.Value); break; case "UnSecureConfiguration": attribute.UnSecureConfiguration = (string)namedArgument.TypedValue.Value; break; case "SecureConfiguration": attribute.SecureConfiguration = (string)namedArgument.TypedValue.Value; break; case "Image1Name": attribute.Image1Name = (string)namedArgument.TypedValue.Value; break; case "Image1Alias": attribute.Image1Alias = (string)namedArgument.TypedValue.Value; break; case "Image1Type": attribute.Image1Type = (ImageTypeEnum)Enum.ToObject(typeof(ImageTypeEnum), (int)namedArgument.TypedValue.Value); break; case "Image1Attributes": attribute.Image1Attributes = (string)namedArgument.TypedValue.Value; break; case "Image2Name": attribute.Image2Name = (string)namedArgument.TypedValue.Value; break; case "Image2Alias": attribute.Image2Alias = (string)namedArgument.TypedValue.Value; break; case "Image2Type": attribute.Image2Type = (ImageTypeEnum)Enum.ToObject(typeof(ImageTypeEnum), (int)namedArgument.TypedValue.Value); break; case "Image2Attributes": attribute.Image2Attributes = (string)namedArgument.TypedValue.Value; break; case "Image3Name": attribute.Image3Name = (string)namedArgument.TypedValue.Value; break; case "Image3Alias": attribute.Image3Alias = (string)namedArgument.TypedValue.Value; break; case "Image3Type": attribute.Image3Type = (ImageTypeEnum)Enum.ToObject(typeof(ImageTypeEnum), (int)namedArgument.TypedValue.Value); break; case "Image3Attributes": attribute.Image3Attributes = (string)namedArgument.TypedValue.Value; break; case "Image4Name": attribute.Image4Name = (string)namedArgument.TypedValue.Value; break; case "Image4Alias": attribute.Image4Alias = (string)namedArgument.TypedValue.Value; break; case "Image4Type": attribute.Image4Type = (ImageTypeEnum)Enum.ToObject(typeof(ImageTypeEnum), (int)namedArgument.TypedValue.Value); break; case "Image4Attributes": attribute.Image4Attributes = (string)namedArgument.TypedValue.Value; break; } } return(attribute); }