private async Task UpdatePluginAsync() { var settingsArray = Configuration.LoadSettings(); var settings = settingsArray.GetSelectedSettings(); // if no connection info, then it's a new run if (settings.ConnectionString.IsEmpty()) { await RegisterModifyPluginAsync(); } else { var connectionManager = new ConnectionManager(settings.ConnectionString); var registrationFeedback = new RegistrationFeedback(); var registrationLogger = new DefaultPluginRegLogger(m => Status.Update(m)); var assemblyPath = AssemblyHelper.GetAssemblyPath(); var assemblyName = AssemblyHelper.GetAssemblyName(); var registration = new AssemblyRegistration(settings, assemblyPath, connectionManager, registrationFeedback); registration.RegLogEntryAdded += (o, args) => { lock (registration.LoggingLock) { Status.Update(args.Message); } }; // if the assembly is registered, update if (CrmAssemblyHelpers.IsAssemblyRegistered(assemblyName, connectionManager, registrationLogger)) { registration.UpdateAssembly(null); Status.Update($"Ran update on: {Regex.Replace(settings.ConnectionString, @"Password\s*?=.*?(?:;{0,1}$|;)", "Password=********;").Replace("\r\n", " ")}."); Status.Update($"For project: {DteHelper.GetProjectName(DteHelper.CurrentProject)}."); } else { // else open dialogue await RegisterModifyPluginAsync(); } } }
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); } } } }