Exemple #1
0
        static void Main(string[] args)
        {
            try
            {
                var arguments       = ConsoleApplication.ParseCommandLineArguments(args);
                var applicationName = arguments.ContainsKey("SettingsFolderName") ? arguments["SettingsFolderName"] : "Unknown Console Context";

                //okay need to create app
                var dependencyResolver = new PrismDependencyContainer(new UnityContainer());
                var controller         = new ConsoleApplicationController(applicationName, dependencyResolver);
                var settingsManager    = new PrismSettingsManager(controller);
                var applicationOptions = new ApplicationOptionsViewModel(controller);
                var app = new ConsoleApplication(controller, applicationOptions, settingsManager);
                //load modules in folder path
                app.LoadModulesInExcecutionFolder();
                //run app
                app.Run(args);
                System.Console.WriteLine("Process Completed. Finishing In 10 Seconds");
                Thread.Sleep(10000);
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.DisplayString());
                System.Console.WriteLine("Press Any Key To Close");
                System.Console.ReadKey();
            }
        }
        public override void RunStartedExtention(Dictionary <string, string> replacementsDictionary)
        {
            //get a xrm connection and package setting by loading the entry dialogs
            XrmPackageSettings = new XrmPackageSettings();
            #if DEBUG
            XrmPackageSettings.SolutionDynamicsCrmPrefix = "template";
            XrmPackageSettings.SolutionObjectPrefix      = "Template";
            #endif

            var container             = new PrismDependencyContainer(new UnityContainer());
            var applicationController = new VsixApplicationController(container);
            if (replacementsDictionary.ContainsKey("$specifiedsolutionname$") && (replacementsDictionary["$specifiedsolutionname$"] == null || replacementsDictionary["$specifiedsolutionname$"] == ""))
            {
                applicationController.UserMessage("Warning! The XRM Solution Generation Will Not Work Correctly If Create Directory For Solution Was Not Specified In The New Solution Dialog");
            }


            RunWizardSettingsEntry(XrmPackageSettings, applicationController);

            //add token replacements for the template projects
            AddReplacements(replacementsDictionary, XrmPackageSettings);

            //used later
            DestinationDirectory = replacementsDictionary["$destinationdirectory$"];
            SafeProjectName      = replacementsDictionary["$safeprojectname$"];
        }
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            //load an application with the module buttons and fake things to spawn the vsix dialogs

            var container = new PrismDependencyContainer(new UnityContainer());

            var applicationName = "Vsix Test Shell";

            var settingsFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
                                              "JosephM Xrm", applicationName);
            var visualStudioService = new FakeVisualStudioService(solutionDirectory: settingsFolder);

            container.RegisterInstance(typeof(IVisualStudioService), visualStudioService);

            var applicationController = new VsixApplicationController(container, applicationName: applicationName);

            VsixApplication = new VsixApplication(applicationController, new VsixSettingsManager(visualStudioService), new Guid("43816e6d-4db8-48d6-8bfa-75916cb080f0"));

            VsixApplication.AddModule <OpenWebModule>();
            VsixApplication.AddModule <DeployAssemblyModule>();
            VsixApplication.AddModule <ManagePluginTriggersModule>();
            VsixApplication.AddModule <XrmCrudModule>();
            VsixApplication.AddModule <TestDialogModule>();
        }
Exemple #4
0
        static void Main(string[] args)
        {
            var arguments       = ConsoleApplication.ParseCommandLineArguments(args);
            var applicationName = arguments.ContainsKey("SettingsFolderName") ? arguments["SettingsFolderName"] : "Unknown Console Context";

            //okay need to create app
            var dependencyResolver = new PrismDependencyContainer(new UnityContainer());
            var controller         = new ConsoleApplicationController(applicationName, dependencyResolver);

            try
            {
                var settingsManager    = new PrismSettingsManager(controller);
                var applicationOptions = new ApplicationOptionsViewModel(controller);
                var app = new ConsoleApplication(controller, applicationOptions, settingsManager);
                //load modules in folder path
                app.LoadModulesInExecutionFolder();
                //run app
                app.Run(args);
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.DisplayString());
                System.Console.WriteLine("Fatal Error");
                var logFile = new LogFileUserInterface(controller.LogPath, controller.ApplicationName, true, 50);
                logFile.LogMessage($"Fatal Error During Console Execution: {ex.XrmDisplayString()}");
                throw;
            }
        }
        public ApplicationControllerBase CreateTestVsixApplicationController()
        {
            var container           = new PrismDependencyContainer(new UnityContainer());
            var visualStudioService = VisualStudioService;

            container.RegisterInstance(typeof(IVisualStudioService), visualStudioService);
            container.RegisterInstance(typeof(ISettingsManager), new VsixSettingsManager(visualStudioService));
            var applicationController = new FakeVsixApplicationController(container);

            return(applicationController);
        }
        public void VsixSolutionWizardTest()
        {
            //okay so this wizard contains a dialog spawned different to the others
            //since it is loaded prior to the solution being created
            //this script just verifies the settings are netered into the dialog wihtout a crash with no visual studio solutoion context etc.


            var packageSettings = new XrmPackageSettings
            {
                SolutionDynamicsCrmPrefix = "FAKE",
                SolutionObjectPrefix      = "Fake"
            };
            //okay spawn the wizards entry method with a fake controller
            var container             = new PrismDependencyContainer(new UnityContainer());
            var applicationController = new FakeVsixApplicationController(container);

            XrmSolutionWizardBase.RunWizardSettingsEntry(packageSettings, applicationController);

            //fake applcation simply to use its navigation and entry methods
            var fakeVsixApplication = TestApplication.CreateTestApplication(applicationController);

            //okay so the package entry dialgo should redirect us to the conneciton entry when started as we don;t have a connection yet
            var dialog = fakeVsixApplication.GetNavigatedDialog <XrmPackageSettingsDialog>();
            var connectionEntryDialog = dialog.SubDialogs.First();
            var connectionEntry       = fakeVsixApplication.GetSubObjectEntryViewModel(connectionEntryDialog);

            var connectionToEnter = GetXrmRecordConfiguration();

            fakeVsixApplication.EnterAndSaveObject(connectionToEnter, connectionEntry);

            //okay now the conneciton is entered it should navigate to the package settings entry
            var packageSettingsEntry = fakeVsixApplication.GetSubObjectEntryViewModel(dialog, index: 1);

            //we want to verify that the object had the settings passed into it as well as the lookup connection works
            packageSettingsEntry.GetBooleanFieldFieldViewModel(nameof(XrmPackageSettings.AddToSolution)).Value = true;
            var solutionPicklistField = packageSettingsEntry.GetLookupFieldFieldViewModel(nameof(XrmPackageSettings.Solution));

            solutionPicklistField.SelectedItem = solutionPicklistField.ItemsSource.First();

            var connectionsubGrid = packageSettingsEntry.GetEnumerableFieldViewModel(nameof(XrmPackageSettings.Connections));

            Assert.IsTrue(connectionsubGrid.GridRecords.Any());
            Assert.AreEqual(connectionToEnter.OrganizationUniqueName, connectionsubGrid.GridRecords.First().GetStringFieldFieldViewModel(nameof(SavedXrmRecordConfiguration.OrganizationUniqueName)).Value);

            packageSettingsEntry.SaveButtonViewModel.Invoke();

            Assert.IsTrue(packageSettings.Connections.Any());
            Assert.AreEqual(connectionToEnter.OrganizationUniqueName, packageSettings.Connections.First().OrganizationUniqueName);

            if (applicationController.GetObjects("Main").Any())
            {
                Assert.Inconclusive("Haven't verified closure of the form after entry instead of navigation to completion screen");
            }
        }
Exemple #7
0
        public override void RunStartedExtention(Dictionary <string, string> replacementsDictionary)
        {
            //get a xrm connection and package setting by loading the entry dialogs
            XrmPackageSettings = new XrmPackageSettings();
            #if DEBUG
            XrmPackageSettings.SolutionDynamicsCrmPrefix = "template";
            XrmPackageSettings.SolutionObjectPrefix      = "Template";
            #endif

            var container             = new PrismDependencyContainer(new UnityContainer());
            var applicationController = new VsixApplicationController(container);
            RunWizardSettingsEntry(XrmPackageSettings, applicationController);

            //add token replacements for the template projects
            AddReplacements(replacementsDictionary, XrmPackageSettings);

            //used later
            DestinationDirectory = replacementsDictionary["$destinationdirectory$"];
            SafeProjectName      = replacementsDictionary["$safeprojectname$"];
        }
Exemple #8
0
        /// <summary>
        /// Initialization of the package; this method is called right after the package is sited, so this is the place
        /// where you can put all the initialization code that rely on services provided by VisualStudio.
        /// </summary>
        protected override void Initialize()
        {
            base.Initialize();

            var container = new PrismDependencyContainer(new UnityContainer());

            var commandService = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;

            container.RegisterInstance(typeof(IMenuCommandService), commandService);


            var dte = GetService(typeof(SDTE)) as DTE2;
            var visualStudioService = new VisualStudioService(dte);

            container.RegisterInstance(typeof(IVisualStudioService), visualStudioService);

            var applicationController = new VsixApplicationController(container);
            var app = new VsixApplication(applicationController, new VsixSettingsManager(visualStudioService), new Guid("43816e6d-4db8-48d6-8bfa-75916cb080f0"));

            app.AddModule <OpenWebModule>(0x010B);
            app.AddModule <OpenSolutionModule>(0x010C);
            app.AddModule <OpenAdvancedFindModule>(0x010D);
            app.AddModule <ClearCacheModule>(0x0109);
            app.AddModule <XrmCrudModule>(0x0112);
            app.AddModule <InstanceComparerModule>(0x0111);
            app.AddModule <UpdateAssemblyModule>(0x0105);
            app.AddModule <XrmPackageSettingsModule>(0x0106);
            app.AddModule <DeployAssemblyModule>(0x0103);
            app.AddModule <ManagePluginTriggersModule>(0x0104);
            app.AddModule <VsixCustomisationImportModule>(0x010A);
            app.AddModule <VsixCreatePackageModule>(0x010E);
            app.AddModule <RefreshSchemaModule>(0x0100);
            app.AddModule <DeployWebResourceModule>(0x0102);
            app.AddModule <VsixImportCsvsModule>(0x0108);
            app.AddModule <VsixDeployPackageModule> (0x0110);
            app.AddModule <XrmPackageAboutModule>(0x0113);
            app.AddModule <ImportSolutionModule>(0x0114);
            app.AddModule <ImportRecordsModule>(0x0115);
        }
Exemple #9
0
        public void PrismDependencyControllerTestsObjectKeyTest()
        {
            //this is a test to verify for a module injecting custom grid functions for a type

            //create unity container
            var container = new PrismDependencyContainer(new UnityContainer());

            //verify each type gets its dedicated list of custom functions returned
            var type1List = new CustomGridFunctions();

            type1List.AddFunction(new CustomGridFunction(typeof(TestResolveType).AssemblyQualifiedName, "Label", () => { }));
            var type2List = new CustomGridFunctions();

            type2List.AddFunction(new CustomGridFunction(typeof(TestResolveType2).AssemblyQualifiedName, "Label 2", () => { }));

            container.RegisterInstance(typeof(CustomGridFunctions), typeof(TestResolveType).AssemblyQualifiedName, type1List);
            container.RegisterInstance(typeof(CustomGridFunctions), typeof(TestResolveType2).AssemblyQualifiedName, type2List);

            Assert.AreEqual(typeof(TestResolveType).AssemblyQualifiedName, ((CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveType).AssemblyQualifiedName)).CustomFunctions.First().Id);
            Assert.AreEqual(typeof(TestResolveType2).AssemblyQualifiedName, ((CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveType2).AssemblyQualifiedName)).CustomFunctions.First().Id);

            //okay this one is autmatically created by the unity container
            //but iteratively add and resolve 2 items and verify they are retained in the resolved list
            var createdByContainer = (CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName);

            Assert.AreEqual(0, createdByContainer.CustomFunctions.Count());

            createdByContainer.AddFunction(new CustomGridFunction(typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName, "Label X", () => { }));
            container.RegisterInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName, type1List);
            createdByContainer = (CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName);
            Assert.AreEqual(1, createdByContainer.CustomFunctions.Count());

            createdByContainer.AddFunction(new CustomGridFunction(typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName, "Label Y", () => { }));
            container.RegisterInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName, type1List);
            createdByContainer = (CustomGridFunctions)container.ResolveInstance(typeof(CustomGridFunctions), typeof(TestResolveTypeNotRegistered).AssemblyQualifiedName);
            Assert.AreEqual(2, createdByContainer.CustomFunctions.Count());
        }
Exemple #10
0
        public void ConsoleApplicationModuleGenerateBatAndExecuteTest()
        {
            //this is done in the load.edit saved request form
            //a button is added the the saved request grid whiuch generates the .bat

            //so we need to save a request
            //then navigate to the save requests and trigger the generate bat button

            var testApplication = CreateThisApp();

            //set to no previously saved ones
            var savedRequests   = new SavedSettings();
            var settingsManager = testApplication.Controller.ResolveType <ISettingsManager>();

            settingsManager.SaveSettingsObject(savedRequests, typeof(TestSavedRequestDialogRequest));

            //navigate to the request and populate the string field
            var entryForm = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>();
            var request   = new TestSavedRequestDialogRequest()
            {
                SomeArbitraryString = nameof(TestSavedRequestDialogRequest.SomeArbitraryString)
            };

            testApplication.EnterObject(request, entryForm);

            //trigger save request
            var saveRequestButton = entryForm.GetButton("SAVEREQUEST");

            saveRequestButton.Invoke();

            //enter and save details including autoload
            var saveRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm);
            var detailsEntered  = new SaveAndLoadFields()
            {
                Name = "TestName"
            };

            testApplication.EnterAndSaveObject(detailsEntered, saveRequestForm);
            Assert.IsFalse(entryForm.ChildForms.Any());
            Assert.IsFalse(entryForm.LoadingViewModel.IsLoading);

            //reopen app/dialog
            testApplication = CreateThisApp();
            entryForm       = testApplication.NavigateToDialogModuleEntryForm <TestSavedRequestModule, TestSavedRequestDialog>();

            //invoke load request dialog
            var loadRequestButton = entryForm.GetButton("LOADREQUEST");

            loadRequestButton.Invoke();
            var loadRequestForm = testApplication.GetSubObjectEntryViewModel(entryForm);

            //verify there is a saved request and trigger the generate bat button
            var subGrid = loadRequestForm.GetEnumerableFieldViewModel(nameof(SavedSettings.SavedRequests));

            Assert.IsTrue(subGrid.GridRecords.Count() == 1);
            subGrid.GridRecords.First().IsSelected = true;

            var generateBatButton = subGrid.DynamicGridViewModel.GetButton("GENERATEBAT");

            generateBatButton.Invoke();

            var testFiles = FileUtility.GetFiles(TestingFolder);

            Assert.AreEqual(1, testFiles.Count());
            Assert.IsTrue(testFiles.First().EndsWith(".bat"));

            var batContent = File.ReadAllText(testFiles.First());

            var args = ConsoleTestUtility.CommandLineToArgs(batContent)
                       .Skip(1)
                       .ToArray();

            var arguments       = ConsoleApplication.ParseCommandLineArguments(args);
            var applicationName = arguments.ContainsKey("SettingsFolderName") ? arguments["SettingsFolderName"] : "Unknown Console Context";

            //okay need to create app
            var dependencyResolver = new PrismDependencyContainer(new UnityContainer());
            var controller         = new ConsoleApplicationController(applicationName, dependencyResolver);

            settingsManager = new PrismSettingsManager(controller);
            var applicationOptions = new ApplicationOptionsViewModel(controller);
            var app = new ConsoleApplication(controller, applicationOptions, settingsManager);

            //load modules in folder path
            app.LoadModulesInExecutionFolder();
            //run app
            app.Run(args);
        }