protected override void ExecuteInternal(string filePath, OrganizationServiceContext ctx, bool backupFiles, string customClassRegex) { _trace.WriteLine("Searching for classes in '{0}'", filePath); var targetFolder = new DirectoryInfo(filePath); var matches = DirectoryEx.Search(filePath, "*.cs", null); if (matches == null) { return; } var pluginRegistration = new PluginRegistraton(_service, ctx, _trace); int codeFilesUpdated = 0; foreach (var codeFile in matches) { try { // Find if it contains any plugin/workflow classes CodeParser parser = new CodeParser(new Uri(codeFile), customClassRegex); if (parser.PluginCount > 0) { // Backup if (backupFiles) { File.WriteAllText(parser.FilePath + DateTime.Now.ToString("yyyyMMddHHmmss") + ".bak", parser.Code); } foreach (var pluginType in parser.ClassNames) { // Remove existing attributes parser.RemoveExistingAttributes(); if (parser.IsPlugin(pluginType)) { AddPluginAttributes(ctx, parser, pluginType); } else if (parser.IsWorkflowActivity(pluginType)) { AddWorkflowActivityAttributes(ctx, parser, pluginType); } else { _trace.WriteLine("Cannot find Type Registration {0}", pluginType); } } // Update File.WriteAllText(parser.FilePath, parser.Code); codeFilesUpdated++; } } catch (ReflectionTypeLoadException ex) { throw new Exception(ex.LoaderExceptions.First().Message); } } _trace.WriteLine("{0} classes decorated with deployment attributes!", codeFilesUpdated); }
private void Publish_OnClick(object sender, RoutedEventArgs e) { try { Overlay.ShowMessage(_dte, "Deploying...", vsStatusAnimation.vsStatusAnimationDeploy); if (CrmAssemblyList.SelectedIndex == -1) { return; } var service = (IOrganizationService)ConnPane.CrmService.OrganizationServiceProxy; var ctx = new OrganizationServiceContext(service); ProjectWorker.BuildProject(ConnPane.SelectedProject); using (ctx) { PluginRegistraton pluginRegistraton = new PluginRegistraton(service, ctx, new TraceLogger()); string path = ProjectWorker.GetAssemblyPath(ConnPane.SelectedProject); CrmAssembly assembly = (CrmAssembly)CrmAssemblyList.SelectedItem; if (assembly.IsWorkflow) { pluginRegistraton.RegisterWorkflowActivities(path); } else { pluginRegistraton.RegisterPlugin(path); } } } finally { Overlay.HideMessage(_dte, vsStatusAnimation.vsStatusAnimationDeploy); } }
public void RegisterPluginCode() { // Assemble #region Arrange ServiceLocator.Init(); var trace = new TraceLogger(); List <Entity> created = new List <Entity>(); IOrganizationService service = A.Fake <IOrganizationService>(a => a.Strict()); A.CallTo(() => service.Create(A <Entity> .Ignored)) .ReturnsLazily((Entity entity) => { created.Add(entity); return(Guid.NewGuid()); }); A.CallTo(() => service.Execute(A <OrganizationRequest> .Ignored)) .ReturnsLazily((OrganizationRequest request) => { if (request.GetType() == typeof(RetrieveMultipleRequest)) { var query = request as RetrieveMultipleRequest; var queryExpression = query.Query as QueryExpression; var results = new List <Entity>(); switch (queryExpression.EntityName) { case SdkMessageFilter.EntityLogicalName: results.Add(new SdkMessageFilter() { SdkMessageFilterId = Guid.NewGuid(), SdkMessageId = new EntityReference(SdkMessage.EntityLogicalName, Guid.NewGuid()) }); break; } var response = new RetrieveMultipleResponse(); response.Results["EntityCollection"] = new EntityCollection(results); return(response); } else { throw new Exception("Unexpected Call"); } }); #endregion #region Act using (var ctx = new OrganizationServiceContext(service)) { var pluginRegistration = new PluginRegistraton(service, ctx, trace); var testpluginPath = new DirectoryService().Search(AppDomain.CurrentDomain.BaseDirectory, @"\..\..\..\TestPlugin\bin\**\TestPlugin.dll"); pluginRegistration.RegisterPlugin(testpluginPath[0]); } #endregion #region Assert Assert.AreEqual(1, created.Where(a => a.GetType() == typeof(PluginAssembly)).Count(), "1 Assembly"); Assert.AreEqual(1, created.Where(a => a.GetType() == typeof(PluginType)).Count(), "1 Type"); Assert.AreEqual(4, created.Where(a => a.GetType() == typeof(SdkMessageProcessingStep)).Count(), "4 Steps"); var step1 = created.Where(a => a.GetType() == typeof(SdkMessageProcessingStep)).FirstOrDefault().ToEntity <SdkMessageProcessingStep>(); Assert.AreEqual(step1.Name, "Pre-Update of account", "Name check"); #endregion }
public void RegisterPluginCode() { // Assemble using (ShimsContext.Create()) { #region Arrange Fakes.ShimQueries.GetPluginStepsOrganizationServiceContextString = (OrganizationServiceContext context, string name) => { // Return no existing steps return(new List <SdkMessageProcessingStep>()); }; var trace = new TraceLogger(); List <Entity> created = new List <Entity>(); IOrganizationService service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService() { CreateEntity = delegate(Entity entity) { created.Add(entity); return(Guid.NewGuid()); }, ExecuteOrganizationRequest = delegate(OrganizationRequest request) { if (request.GetType() == typeof(RetrieveMultipleRequest)) { var query = request as RetrieveMultipleRequest; var queryExpression = query.Query as QueryExpression; var results = new List <Entity>(); switch (queryExpression.EntityName) { case SdkMessageFilter.EntityLogicalName: results.Add(new SdkMessageFilter() { SdkMessageFilterId = Guid.NewGuid(), SdkMessageId = new EntityReference(SdkMessage.EntityLogicalName, Guid.NewGuid()) }); break; } return(new Microsoft.Xrm.Sdk.Messages.Fakes.ShimRetrieveMultipleResponse() { EntityCollectionGet = delegate() { return new EntityCollection(results); } }); } else { throw new Exception("Unexpected Call"); } } }; #endregion #region Act using (var ctx = new OrganizationServiceContext(service)) { var pluginRegistration = new PluginRegistraton(service, ctx, trace); pluginRegistration.RegisterPlugin(@"..\..\..\TestPlugin\bin\Debug\TestPlugin.dll"); } #endregion #region Assert Assert.AreEqual(1, created.Where(a => a.GetType() == typeof(PluginAssembly)).Count(), "1 Assembly"); Assert.AreEqual(1, created.Where(a => a.GetType() == typeof(PluginType)).Count(), "1 Type"); Assert.AreEqual(2, created.Where(a => a.GetType() == typeof(SdkMessageProcessingStep)).Count(), "2 Steps"); var step1 = created.Where(a => a.GetType() == typeof(SdkMessageProcessingStep)).FirstOrDefault().ToEntity <SdkMessageProcessingStep>(); Assert.AreEqual(step1.Name, "Create Step", "Name check"); #endregion } }