Exemplo n.º 1
0
        private void RegisterModifyPlugin(Project project)
        {
            DteHelper.SetCurrentProject(project);
            var regWindow = new Login(GetService(typeof(SDTE)) as DTE2);

            regWindow.ShowModal();
        }
        /// <summary>
        ///     This function is the callback used to execute a command when the a menu item is clicked.
        ///     See the Initialize method to see how the menu item is associated to this function using
        ///     the OleMenuCommandService service and the MenuCommand class.
        /// </summary>
        private async Task RegisterModifyPluginCallbackAsync(object sender, EventArgs args)
        {
            try
            {
                var session = Math.Abs(DateTime.Now.ToString(CultureInfo.CurrentCulture).GetHashCode());
                Status.Update($">>>>> Starting new session: {session} <<<<<");

                var selected = DteHelper.GetSelectedProjects().ToArray();

                if (!selected.Any())
                {
                    throw new UserException("Please select a project first.");
                }

                foreach (var project in selected)
                {
                    Status.Update($">>> Processing project: {DteHelper.GetProjectName(project)} <<<");

                    DteHelper.SetCurrentProject(project);
                    AssemblyHelper.BuildProject();

                    await RegisterModifyPluginAsync();

                    Status.Update($"^^^ Finished processing project: {DteHelper.GetProjectName(project)} ^^^");
                }

                Status.Update($"^^^^^ Finished session: {session} ^^^^^");
            }
            catch (UserException e)
            {
                VsShellUtilities.ShowMessageBox(ServiceProvider.GlobalProvider, e.Message, "Error", OLEMSGICON.OLEMSGICON_WARNING,
                                                OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
            }
            catch (Exception e)
            {
                var error1 = "[ERROR] " + e.Message
                             + (e.InnerException != null ? "\n" + "[ERROR] " + e.InnerException.Message : "");
                Status.Update(error1);
                Status.Update(e.StackTrace);
                Status.Update("Unable to register assembly, see error above.");
                var error2 = e.Message + "\n" + e.StackTrace;
                MessageBox.Show(error2, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            finally
            {
                Status.Update(">>>>> DONE! <<<<<");
            }
        }
Exemplo n.º 3
0
        private static bool CopySettings()
        {
            var projects = DteHelper.GetSelectedProjects().ToArray();

            if (projects.Length <= 1)
            {
                return(false);
            }

            var           currentProject      = DteHelper.CurrentProject;
            SettingsArray sourceSettingsArray = null;

            foreach (var project in projects)
            {
                DteHelper.SetCurrentProject(project);

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

                if (settings.Id == Guid.Empty &&
                    (string.IsNullOrEmpty(settings.ServerName) || string.IsNullOrEmpty(settings.Username)))
                {
                    continue;
                }
                else
                {
                    break;
                }
            }

            if (sourceSettingsArray == null)
            {
                return(false);
            }

            Status.Update($"Copying settings from project: {DteHelper.CurrentProject.Name} ...");

            foreach (var settingsQ in sourceSettingsArray.SettingsList)
            {
                settingsQ.Id = Guid.Empty;
            }

            foreach (var project in projects)
            {
                DteHelper.SetCurrentProject(project);

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

                if (settings.Id == Guid.Empty &&
                    (string.IsNullOrEmpty(settings.ServerName) || string.IsNullOrEmpty(settings.Username)))
                {
                    Configuration.SaveConfigs(sourceSettingsArray);
                    Status.Update($"Copied settings to project: {project.Name}.");
                }
            }

            DteHelper.SetCurrentProject(currentProject);

            return(true);
        }
Exemplo n.º 4
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);
                    }
                }
            }
        }