Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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
        }
Example #4
0
        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
            }
        }