public static bool IsAssemblySandbox(string assemblyName,
                                             IConnectionManager connectionManager, IPluginRegLogger pluginRegLogger)
        {
            pluginRegLogger.Log("Checking assembly isolation ... ");

            var assembly = GetCrmAssembly(assemblyName, connectionManager, pluginRegLogger);

            if (assembly == null)
            {
                throw new Exception("Assembly doesn't exist in CRM.");
            }

            var isolated = assembly.FirstOrDefault()?.IsolationMode.Value == (int)PluginAssembly.Enums.IsolationMode.Sandbox;

            pluginRegLogger.Log("** Finished checking assembly isolation. Isolated => " + isolated);

            return(isolated);
        }
        public static Guid GetAssemblyId(string assemblyName,
                                         IConnectionManager connectionManager, IPluginRegLogger pluginRegLogger)
        {
            pluginRegLogger.Log("Getting assembly ID ... ");

            var assembly = GetCrmAssembly(assemblyName, connectionManager, pluginRegLogger);

            if (assembly == null)
            {
                throw new Exception("Assembly doesn't exist in CRM.");
            }

            var id = assembly.FirstOrDefault()?.Id ?? Guid.Empty;

            pluginRegLogger.Log("** Finished getting assembly ID. ID => " + id);

            return(id);
        }
        public static IReadOnlyList <PluginType> GetCrmTypes(IConnectionManager connectionManager, IPluginRegLogger pluginRegLogger,
                                                             Guid assemblyId)
        {
            pluginRegLogger.Log("Getting types from CRM ... ");

            PluginType[] types;

            using (var context = new XrmServiceContext(connectionManager.Get())
            {
                MergeOption = MergeOption.NoTracking
            })
            {
                types =
                    (from type in context.PluginTypeSet
                     where type.PluginAssemblyId.Id == assemblyId
                     select type).ToArray();
            }

            pluginRegLogger.Log("** Finished getting types from CRM.");

            return(types);
        }
        public static bool IsAssemblyRegistered(string assemblyName,
                                                IConnectionManager connectionManager, IPluginRegLogger pluginRegLogger)
        {
            pluginRegLogger.Log("Checking assembly registration ... ");

            var registered = GetCrmAssembly(assemblyName, connectionManager, pluginRegLogger) != null;

            pluginRegLogger.Log("** Finished checking assembly registration. Registered => " + registered);

            return(registered);
        }
        public static IReadOnlyList <PluginAssembly> GetCrmAssembly(string assemblyName,
                                                                    IConnectionManager connectionManager, IPluginRegLogger pluginRegLogger)
        {
            pluginRegLogger.Log("Fetching CRM assembly ... ");

            IReadOnlyList <PluginAssembly> assembly;

            using (var context = new XrmServiceContext(connectionManager.Get())
            {
                MergeOption = MergeOption.NoTracking
            })
            {
                assembly =
                    (from assemblyQ in context.PluginAssemblySet
                     where assemblyQ.Name == assemblyName
                     orderby assemblyQ.Version
                     select new PluginAssembly
                {
                    Id = assemblyQ.Id,
                    Name = assemblyQ.Name,
                    IsolationMode = assemblyQ.IsolationMode,
                    Version = assemblyQ.Version,
                    Culture = assemblyQ.Culture,
                    PublicKeyToken = assemblyQ.PublicKeyToken
                }).ToArray();
            }

            pluginRegLogger.Log("** Finished fetching CRM assembly.");

            return(assembly);
        }
        public static IReadOnlyList <SdkMessageProcessingStep> GetCrmSteps(IConnectionManager connectionManager, IPluginRegLogger pluginRegLogger,
                                                                           Guid assemblyId)
        {
            pluginRegLogger.Log("Getting steps from CRM ... ");

            SdkMessageProcessingStep[] steps;

            using (var context = new XrmServiceContext(connectionManager.Get())
            {
                MergeOption = MergeOption.NoTracking
            })
            {
                steps =
                    (from step in context.SdkMessageProcessingStepSet
                     join type in context.PluginTypeSet
                     on step.EventHandler.Id equals type.PluginTypeId
                     where type.PluginAssemblyId.Id == assemblyId
                     select
                     new SdkMessageProcessingStep
                {
                    Id = step.SdkMessageProcessingStepId.GetValueOrDefault(),
                    EventHandler = step.EventHandler
                }).ToArray();
            }

            pluginRegLogger.Log("** Finished getting steps from CRM.");

            return(steps);
        }