コード例 #1
0
        private void InitActions(bool isClearCache = false)
        {
            service?.Dispose();
            CheckContext(isClearCache);

            crmAssembly.Clear();

            try
            {
                ShowBusy("Checking assembly registration ...");
                IsRegistered = CrmAssemblyHelper.IsAssemblyRegistered(context);
            }
            catch
            {
                IsRegistered = false;
            }

            if (!IsRegistered)
            {
                settings.Id = crmAssembly.Id = assemblyRegistration.Id = Guid.Empty;
                return;
            }

            ShowBusy("Getting assembly ID ...");
            settings.Id = crmAssembly.Id = assemblyRegistration.Id = CrmAssemblyHelper.GetAssemblyId(context);
            UpdateStatus("Updating assembly info ...", true);
            crmAssembly.UpdateInfo(context);
        }
        private void DeleteObsoleteTypes()
        {
            var pluginClasses = AssemblyHelper.GetClasses <IPlugin>();
            var wfClasses     = AssemblyHelper.GetClasses <CodeActivity>();

            var existingTypes = CrmAssemblyHelper.GetCrmTypes(Id, Context);

            var nonExistentTypes = existingTypes
                                   .Where(pluginType => !pluginClasses.Contains(pluginType.TypeName) &&
                                          !wfClasses.Contains(pluginType.TypeName)).ToList();

            // delete non-existing types
            if (nonExistentTypes.Any())
            {
                if (DteHelper.IsConfirmed("Please confirm that you want to DELETE non-existent types in this assembly." +
                                          " This means that all its steps will be deleted!", "Type deletion"))
                {
                    UpdateStatus("Deleting non-existent types ... ", 1);

                    nonExistentTypes.ForEach(pluginType => DeleteTree(pluginType.Id,
                                                                      Dependency.Enums.RequiredComponentType.PluginType));

                    UpdateStatus("Finished deleting non-existent types.", -1);
                }
                else
                {
                    throw new Exception("Can't update assembly with obsolete types in the system.");
                }
            }
        }
        private List <string> GetExistingTypeNames()
        {
            var existingTypeNames = CrmAssemblyHelper.GetCrmTypes(Id, Context)
                                    .Select(type => type.TypeName).ToList();

            return(existingTypeNames);
        }
コード例 #4
0
        private void DeletePlugin()
        {
            var dte2 = GetService(typeof(SDTE)) as DTE2;

            var project = dte2.GetSelectedProject();

            if (string.IsNullOrWhiteSpace(project?.FullName))
            {
                throw new UserException("Please select a project first!");
            }

            var settingsArray = Configuration.LoadConfigs();
            var settings      = settingsArray.GetSelectedSettings();

            // if an ID does not exist and no connection info, then it's a new run
            if (settings.Id == Guid.Empty &&
                (string.IsNullOrEmpty(settings.ServerName) || string.IsNullOrEmpty(settings.Username)))
            {
                RegisterModifyPlugin(project);
            }
            else
            {
                using (var service = ConnectionHelper.GetConnection(settings.GetOrganizationCrmConnectionString()))
                {
                    var context      = new XrmServiceContext(service);
                    var registration = new AssemblyRegistration(context, service);

                    // if the assembly is registered, get ID and delete
                    if (CrmAssemblyHelper.IsAssemblyRegistered(context))
                    {
                        var id = settings.Id == Guid.Empty
                                                        ? CrmAssemblyHelper.GetAssemblyId(context)
                                                        : settings.Id;
                        registration.DeleteAssembly(id);
                    }
                    else
                    {
                        Status.Update("Assembly already deleted!");

                        // else, reset ID
                        settings.Id = Guid.Empty;
                        Configuration.SaveConfigs(settingsArray);
                    }
                }
            }
        }
コード例 #5
0
        private void UpdatePlugin(Project project)
        {
            DteHelper.SetCurrentProject(project);

            var settingsArray = Configuration.LoadConfigs();
            var settings      = settingsArray.GetSelectedSettings();

            // if an ID does not exist and no connection info, then it's a new run
            if (settings.Id == Guid.Empty &&
                (string.IsNullOrEmpty(settings.ServerName) || string.IsNullOrEmpty(settings.Username)))
            {
                CopySettings();
                RegisterModifyPlugin(project);
            }
            else
            {
                using (var service = ConnectionHelper.GetConnection(settings.GetOrganizationCrmConnectionString()))
                {
                    var context      = new XrmServiceContext(service);
                    var registration = new AssemblyRegistration(context, service);

                    registration.PropertyChanged +=
                        (o, args) =>
                    {
                        try
                        {
                            switch (args.PropertyName)
                            {
                            case "LogMessage":
                                lock (registration.LoggingLock)
                                {
                                    Status.Update(registration.LogMessage);
                                }
                                break;
                            }
                        }
                        catch
                        {
                            // ignored
                        }
                    };

                    // if the assembly is registered, get ID and update
                    if (CrmAssemblyHelper.IsAssemblyRegistered(context))
                    {
                        var id = settings.Id == Guid.Empty
                                                        ? CrmAssemblyHelper.GetAssemblyId(context)
                                                        : settings.Id;
                        registration.UpdateAssembly(id, null);
                        Status.Update($"Ran update on: {settings.ServerName} - {settings.CrmOrg} - {settings.Username}.");
                        Status.Update($"For project: {DteHelper.GetProjectName(project)}.");
                    }
                    else
                    {
                        // else, reset and open dialogue
                        // reset ID
                        settings.Id = Guid.Empty;
                        Configuration.SaveConfigs(settingsArray);

                        RegisterModifyPlugin(project);
                    }
                }
            }
        }