public string CloneBuildToProject(Uri buildDefinition, string newName, string targetProjectName)
        {
            var    bd = this.buildServer.GetBuildDefinition(buildDefinition);
            string sourceProjectName = bd.TeamProject;

            var newBuildDefinition = this.buildServer.CreateBuildDefinition(targetProjectName);

            newBuildDefinition.Name        = newName;
            newBuildDefinition.Description = bd.Description;
            newBuildDefinition.ContinuousIntegrationType = bd.ContinuousIntegrationType;
            newBuildDefinition.QueueStatus = bd.QueueStatus;
            CloneWorkspaceMappings(string.Concat("$/", sourceProjectName), string.Concat("$/", targetProjectName), bd, newBuildDefinition);
            newBuildDefinition.BuildController   = bd.BuildController;
            newBuildDefinition.ProcessParameters = bd.ProcessParameters;
            CloneDropLocation(sourceProjectName, targetProjectName, bd, newBuildDefinition, false);
            CloneBuildSchedule(bd, newBuildDefinition);
            newBuildDefinition.ContinuousIntegrationQuietPeriod = bd.ContinuousIntegrationQuietPeriod;
            newBuildDefinition.Process = this.EnsureProjectHasBuildProcessTemplate(targetProjectName, bd.Process.ServerPath);
            CloneRetentionPolicies(bd, newBuildDefinition);

            var parameters = WorkflowHelpers.DeserializeProcessParameters(bd.ProcessParameters);

            CloneStringParameters(sourceProjectName, targetProjectName, parameters);
            CloneItemsToBuild(sourceProjectName, targetProjectName, parameters);
            CloneConfigurationFolderPath(sourceProjectName, targetProjectName, bd, parameters);
            CloneTestSpecs(sourceProjectName, targetProjectName, parameters);
            newBuildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(parameters);

            newBuildDefinition.Save();
            return(newBuildDefinition.ToString());
        }
        public string CloneGitBuild(Uri buildDefinition, string newName)
        {
            var bd = this.buildServer.GetBuildDefinition(buildDefinition);
            var newBuildDefinition = this.buildServer.CreateBuildDefinition(bd.TeamProject);

            newBuildDefinition.Name        = newName;
            newBuildDefinition.Description = bd.Description;
            newBuildDefinition.ContinuousIntegrationType = bd.ContinuousIntegrationType;
            newBuildDefinition.QueueStatus = bd.QueueStatus;

            newBuildDefinition.BuildController     = bd.BuildController;
            newBuildDefinition.ProcessParameters   = bd.ProcessParameters;
            newBuildDefinition.DefaultDropLocation = bd.DefaultDropLocation;

            var provider = CloneSourceProviders(newBuildDefinition, bd);

            newBuildDefinition.SetSourceProvider(provider);

            CloneBuildSchedule(bd, newBuildDefinition);
            newBuildDefinition.ContinuousIntegrationQuietPeriod = bd.ContinuousIntegrationQuietPeriod;
            newBuildDefinition.Process = bd.Process;
            CloneRetentionPolicies(bd, newBuildDefinition);

            var parameters = WorkflowHelpers.DeserializeProcessParameters(bd.ProcessParameters);

            newBuildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(parameters);

            newBuildDefinition.Save();
            return(newBuildDefinition.ToString());
        }
        public string CloneBuild(Uri buildDefinition, string newName, Branch source, Branch target)
        {
            string rootBranch   = source.ServerPath;
            string targetBranch = target.ServerPath;

            var sourceBranchName = Path.GetFileName(rootBranch);
            var branchName       = Path.GetFileName(targetBranch);
            var bd = this.buildServer.GetBuildDefinition(buildDefinition);
            var newBuildDefinition = this.buildServer.CreateBuildDefinition(bd.TeamProject);

            newBuildDefinition.Name        = newName;
            newBuildDefinition.Description = bd.Description;
            newBuildDefinition.ContinuousIntegrationType = bd.ContinuousIntegrationType;
            newBuildDefinition.Enabled = bd.Enabled;
            CloneWorkspaceMappings(rootBranch, targetBranch, bd, newBuildDefinition);
            newBuildDefinition.BuildController   = bd.BuildController;
            newBuildDefinition.ProcessParameters = bd.ProcessParameters;
            CloneDropLocation(sourceBranchName, branchName, bd, newBuildDefinition);
            CloneBuildSchedule(bd, newBuildDefinition);
            newBuildDefinition.ContinuousIntegrationQuietPeriod = bd.ContinuousIntegrationQuietPeriod;
            this.CloneBuildProcessTemplate(rootBranch, targetBranch, bd, newBuildDefinition);
            CloneRetentionPolicies(bd, newBuildDefinition);

            var parameters = WorkflowHelpers.DeserializeProcessParameters(bd.ProcessParameters);

            CloneBuildSettings(rootBranch, targetBranch, parameters);
            CloneConfigurationFolderPath(rootBranch, targetBranch, bd, parameters);
            CloneTestSpecs(rootBranch, targetBranch, parameters);
            newBuildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(parameters);

            newBuildDefinition.Save();
            return(newBuildDefinition.ToString());
        }
        public void ChangeProcessParameter(IEnumerable <Uri> buildDefinitions, string[] parameter, bool booleanParameter)
        {
            foreach (var bd in this.buildServer.QueryBuildDefinitionsByUri(buildDefinitions.ToArray()))
            {
                var parameters = WorkflowHelpers.DeserializeProcessParameters(bd.ProcessParameters);
                if (parameters.ContainsKey(parameter[0]))
                {
                    if (booleanParameter)
                    {
                        parameters[parameter[0]] = Convert.ToBoolean(parameter[1]);
                    }
                    else
                    {
                        parameters[parameter[0]] = parameter[1];
                    }
                }
                else
                {
                    if (booleanParameter)
                    {
                        parameters.Add(parameter[0], Convert.ToBoolean(parameter[1]));
                    }
                    else
                    {
                        parameters.Add(parameter[0], parameter[1]);
                    }
                }

                bd.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(parameters);
                bd.Save();
            }
        }
        public IEnumerable <string> GetProjectsToBuild(Uri buildDefinition)
        {
            var bd         = this.buildServer.GetBuildDefinition(buildDefinition);
            var parameters = WorkflowHelpers.DeserializeProcessParameters(bd.ProcessParameters);

            if (parameters.ContainsKey(BuildSettings))
            {
                var buildSettings = parameters[BuildSettings] as BuildSettings;
                if (buildSettings == null)
                {
                    return(new List <string>());
                }

                if (buildSettings.HasProjectsToBuild)
                {
                    return(buildSettings.ProjectsToBuild);
                }
            }
            else if (parameters.ContainsKey("ProjectsToBuild"))
            {
                return(parameters["ProjectsToBuild"] as string[]);
            }

            return(new List <string>());
        }
Example #6
0
        public IList <DeliveryPipeline> GetPipelines()
        {
            IList <DeliveryPipeline> pipelines = new List <DeliveryPipeline>();

            Uri collectionUri = new Uri(Uri);

            ProjectCollection = new TfsTeamProjectCollection(collectionUri);

            BuildServer            = ProjectCollection.GetService <IBuildServer>();
            CommonStructureService = ProjectCollection.GetService <ICommonStructureService>();
            Registration           = ProjectCollection.GetService <IRegistration>();
            VersionControlServer   = ProjectCollection.GetService <VersionControlServer>();
            ClientHyperlinkService = ProjectCollection.GetService <TswaClientHyperlinkService>();

            Name = ProjectCollection.CatalogNode.Resource.DisplayName;

            if (BuildServer.BuildServerVersion.ToString() == "v3")
            {
                TfsVersion = 2010;
            }
            else
            {
                TfsVersion = 2012;
            }

            foreach (ProjectInfo project in CommonStructureService.ListProjects())
            {
                foreach (IBuildDefinition definition in BuildServer.QueryBuildDefinitions(project.Name))
                {
                    if (definition.Process.ServerPath.Contains("BuildProcessTemplates/PowerDelivery"))
                    {
                        IDictionary <string, object> processParams = WorkflowHelpers.DeserializeProcessParameters(definition.ProcessParameters);

                        if (processParams.ContainsKey("PowerShellScriptPath"))
                        {
                            string scriptPath = processParams["PowerShellScriptPath"] as string;

                            string scriptName = System.IO.Path.GetFileNameWithoutExtension(scriptPath.Substring(scriptPath.LastIndexOf("/")));

                            string environmentName = definition.Name.Substring(definition.Name.LastIndexOf(" - ") + 3);

                            DeliveryPipeline pipeline = pipelines.FirstOrDefault(p => p.ScriptName == scriptName);

                            if (pipeline == null)
                            {
                                pipeline = new DeliveryPipeline(this, project, scriptName);
                                pipelines.Add(pipeline);
                            }

                            PipelineEnvironment environment = new PipelineEnvironment(pipeline, environmentName, definition);

                            pipeline.Environments.Add(environment);
                        }
                    }
                }
            }

            return(pipelines);
        }
        public ProcessParametersViewModel(string _processparameters)
        {
            var processparameters = WorkflowHelpers.DeserializeProcessParameters(_processparameters);
            var myparams          = new ObservableCollection <KeyPair>();

            foreach (var element in processparameters)
            {
                var cfglist   = new ObservableCollection <string>();
                var pjtbdlist = new ObservableCollection <string>();
                if (element.Key.ToString() == "ProjectsToBuild")
                {
                    var projList = ((IEnumerable)element.Value).Cast <object>()
                                   .Select(x => x.ToString())
                                   .ToArray();
                    foreach (var item in projList)
                    {
                        pjtbdlist.Add(item);
                    }
                    this.ProjectsToBuild = pjtbdlist;
                }
                if (element.Key.ToString() == "ConfigurationsToBuild")
                {
                    var configList = ((IEnumerable)element.Value).Cast <object>()
                                     .Select(x => x.ToString())
                                     .ToArray();
                    foreach (var item in configList)
                    {
                        cfglist.Add(item);
                    }
                    this.PlatformConfigurations = cfglist;
                }
                if (element.Key.ToString() == "AdvancedBuildSettings")
                {
                    var kvp = new KeyPair(element.Key, element.Value.ToString());
                    myparams.Add(kvp);
                }
                if (element.Value.GetType().Name == "BuildSettings")
                {
                    var bds = (BuildSettings)element.Value;
                    PlatformConfigurationList pclist = new PlatformConfigurationList();
                    StringList pjb;
                }
                if (element.Value.GetType().Name == "TestSpecList")
                {
                    var tsl    = new ObservableCollection <TestSpec>();
                    var tslist = (TestSpecList)element.Value;
                    foreach (var item in tslist)
                    {
                        tsl.Add(item);
                    }
                    testspeclist = tsl;
                }
            }
            procparameters = myparams;
        }
Example #8
0
        public void Promote(int buildNumber)
        {
            IBuildRequest request = BuildDefinition.CreateBuildRequest();

            IDictionary <string, object> processParams = WorkflowHelpers.DeserializeProcessParameters(request.ProcessParameters);

            processParams["PriorBuild"] = buildNumber.ToString();

            request.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(processParams);

            IQueuedBuild queuedBuild = BuildDefinition.BuildServer.QueueBuild(request);
        }
        private DefaultActivity CreateStartActivity(string status, DataField dfEntityid, DataField dfEntityName, int x, ref int y)
        {
            DefaultActivity activity = WorkflowFactory.CreateActivity <DefaultActivity>("Set Value", WizardNames.DefaultActivity);

            process.Activities.Add(activity);
            activity.MetaData         = "Generated by K2 for Dynamics CRM 2011 Process Generation Tool";
            activity.ExpectedDuration = 5;
            activity.Priority         = 2;
            WorkflowHelpers.PositionActivity(activity, x, y);
            y += 100;

            return(activity);
        }
Example #10
0
        public static void Start()
        {
            while (true)
            {
                Console.Clear();
                Console.WriteLine("SG Bank Application");
                Console.WriteLine("------------------------");
                Console.WriteLine("1. Lookup an Account");
                Console.WriteLine("2. Deposit");
                Console.WriteLine("3. Withdraw");

                Console.WriteLine("\nQ to quit");


                Console.Write("\nEnter selection: ");

                string userinput = Console.ReadLine();



                WorkflowHelpers.MenuInputValidation(userinput);


                switch (userinput)
                {
                case "1":
                    AccountLookupWorkflow lookupWorkflow = new AccountLookupWorkflow();
                    lookupWorkflow.Execute();
                    break;

                case "2":
                    DepositWorkflow depositWorkflow = new DepositWorkflow();
                    depositWorkflow.Execute();
                    break;

                case "3":
                    WithdrawWorkflow withdrawWorkflow = new WithdrawWorkflow();
                    withdrawWorkflow.Execute();
                    break;

                case "Q":
                    return;

                case "q":
                    return;
                }
            }
        }
        public void UpdateOutputLocation(IEnumerable <Uri> buildDefinitions, string location)
        {
            foreach (var bd in this.buildServer.QueryBuildDefinitionsByUri(buildDefinitions.ToArray()))
            {
                var parameters = WorkflowHelpers.DeserializeProcessParameters(bd.ProcessParameters);
                if (parameters.ContainsKey("OutputLocation"))
                {
                    parameters["OutputLocation"] = location;
                }
                else
                {
                    parameters.Add("OutputLocation", location);
                }

                bd.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(parameters);
                bd.Save();
            }
        }
        private DefaultActivity CreateStatusActivity(string status, DataField dfEntityid, DataField dfEntityName, int x, ref int y)
        {
            DefaultActivity actUpdate = WorkflowFactory.CreateActivity <DefaultActivity>(status + " Update", WizardNames.DefaultActivity);

            process.Activities.Add(actUpdate);
            actUpdate.MetaData         = "Generated by K2 for Dynamics CRM 2011 Process Generation Tool";
            actUpdate.ExpectedDuration = 5;
            actUpdate.Priority         = 2;
            WorkflowHelpers.PositionActivity(actUpdate, x, y);
            y += 100;

            // Create Event
            var eventname       = "Update Staus - " + status;
            var smoUpdateStatus = WorkflowFactory.CreateEvent <SmartObjectEvent>(eventname, WizardNames.SmartObjectEvent);

            // Configure Event
            var smoInputs = new Dictionary <string, K2Field>();

            smoInputs.Add("EntityId", K2FieldFactory.CreateK2Field(dfEntityid));
            smoInputs.Add("Entity", K2FieldFactory.CreateK2Field(dfEntityName));
            smoInputs.Add("State", K2FieldFactory.CreateK2Field(2));
            smoInputs.Add("Status", K2FieldFactory.CreateK2Field(6));

            var smoOutputs = new Dictionary <string, K2Field>();

            smoUpdateStatus.EventItem.Properties = CreateSmartFormatProperties(
                CRMFunctionsSmartObjectGuid,
                "SmartObject Server",
                "K2_CRM_Functions",
                "K2 CRM Functions",
                "SetStateStatus",
                "Set State Status",
                false,
                smoInputs,
                smoOutputs,
                "Integrated=True;IsPrimaryLogin=True;Authenticate=True;EncryptedPassword=False;Host=localhost;Port=5555");

            actUpdate.Events.Add(smoUpdateStatus);

            return(actUpdate);
        }
        private void LaunchBuild()
        {
            try
            {
                if (this.TeamProject.Expression == null)
                {
                    var buildDetail = this.ActivityContext.GetExtension <IBuildDetail>();
                    this.TeamProject.Set(this.ActivityContext, buildDetail.TeamProject);
                }

                IBuildDefinition buildDefinition = this.bs.GetBuildDefinition(this.TeamProject.Get(this.ActivityContext), this.BuildDefinition.Get(this.ActivityContext));
                IBuildRequest    buildRequest    = buildDefinition.CreateBuildRequest();

                if (this.MSBuildArguments.Expression != null)
                {
                    IDictionary <string, object> processParameters           = WorkflowHelpers.DeserializeProcessParameters(buildRequest.ProcessParameters);
                    IDictionary <string, object> definitionProcessParameters = WorkflowHelpers.DeserializeProcessParameters(buildDefinition.ProcessParameters);

                    if (this.OverrideExistingMSBuildArguments.Get(this.ActivityContext) || !definitionProcessParameters.Keys.Contains(ProcessParameterMetadata.StandardParameterNames.MSBuildArguments))
                    {
                        processParameters[ProcessParameterMetadata.StandardParameterNames.MSBuildArguments] = this.MSBuildArguments.Get(this.ActivityContext);
                    }
                    else
                    {
                        processParameters[ProcessParameterMetadata.StandardParameterNames.MSBuildArguments] = this.MSBuildArguments.Get(this.ActivityContext) + " " + definitionProcessParameters[ProcessParameterMetadata.StandardParameterNames.MSBuildArguments];
                    }

                    buildRequest.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(processParameters);
                }

                this.qb = this.bs.QueueBuild(buildRequest);
            }
            catch (Exception)
            {
                this.qb = null;
                this.LogBuildError("There is a problem with the build definition referenced");
            }
        }
Example #14
0
        public static DefaultProcess CreateIncompleteProcess()
        {
            // Create a process with two activities
            DefaultProcess process = WorkflowFactory.CreateProcess <DefaultProcess>("Sample Process", WizardNames.DefaultProcess);

            process.Activities.Add(WorkflowFactory.CreateK2Object <DefaultActivity>("Activity 1", WizardNames.DefaultActivity));
            process.Activities.Add(WorkflowFactory.CreateK2Object <DefaultActivity>("Activity 2", WizardNames.DefaultActivity));

            // Add an event to Activity 1 and set the status of the associated wizard
            // equal to Delayed. Holding the control key and dragging a wizard
            // from the toolbox in K2 for Visual Studio will also set the status
            // for that wizard to delayed. You will also not be able to export a
            // process with delayed wizards.
            process.Activities["Activity 1"].Events.Add(
                WorkflowFactory.CreateEvent <ClientEvent>("Client Event 1", WizardNames.DefaultClientEvent, WizardStatus.Delayed));

            // Position the activities
            WorkflowHelpers.PositionActivity(process.StartActivity, 208, 16);
            WorkflowHelpers.PositionActivity(process.Activities["Activity 1"], 32, 112);
            WorkflowHelpers.PositionActivity(process.Activities["Activity 2"], 368, 112);

            return(process);
        }
Example #15
0
        private void RefreshStatus()
        {
            bool isQueued = false;

            _queuedBuildsView.Refresh(false);

            if (_queuedBuildsView.QueuedBuilds.Length > 0)
            {
                IQueuedBuild nextQueuedBuild = _queuedBuildsView.QueuedBuilds.OrderBy(b => b.QueuePosition).First();

                if (nextQueuedBuild.Build != null)
                {
                    LastBuildUri = nextQueuedBuild.Build.Uri;
                }

                LastStatus = new PipelineEnvironmentBuildStatus(BuildStatus.InProgress);

                isQueued = true;
            }

            if (!isQueued)
            {
                IOrderedEnumerable <IBuildDetail> existingBuilds = BuildDefinition.BuildServer.QueryBuilds(_buildSpec).Builds.OrderByDescending(b => b.StartTime);

                bool foundStatusBuild = false;

                foreach (IBuildDetail build in existingBuilds)
                {
                    try
                    {
                        if (!foundStatusBuild)
                        {
                            IDictionary <string, object> processParams = WorkflowHelpers.DeserializeProcessParameters(build.ProcessParameters);

                            if (EnvironmentName == "Commit" || processParams.ContainsKey("PriorBuild"))
                            {
                                if (!isQueued)
                                {
                                    LastStatus = new PipelineEnvironmentBuildStatus(build.Status);
                                }

                                LastBuildFinishTime = build.FinishTime;

                                LastBuildUri = build.Uri;

                                if (EnvironmentName == "Commit")
                                {
                                    LastBuildNumber = new Build(build).Number.ToString();
                                }
                                else if (EnvironmentName == "Production")
                                {
                                    string buildUriString = build.Uri.ToString();

                                    string buildUri = buildUriString.Contains("?") ? buildUriString.Substring(0, buildUriString.IndexOf("?")) : buildUriString;

                                    string buildUriPrefix = buildUri.Substring(0, buildUri.LastIndexOf("/") + 1);

                                    Uri commitBuildUri = new Uri(string.Format("{0}{1}", buildUriPrefix, processParams["PriorBuild"] as string));

                                    IBuildDetail buildDetail = BuildDefinition.BuildServer.GetMinimalBuildDetails(commitBuildUri);

                                    processParams = WorkflowHelpers.DeserializeProcessParameters(buildDetail.ProcessParameters);

                                    LastBuildNumber = processParams["PriorBuild"] as string;
                                }
                                else
                                {
                                    LastBuildNumber = processParams["PriorBuild"] as string;
                                }

                                foundStatusBuild = true;
                                break;
                            }
                        }
                    }
                    catch (Exception) { }
                }

                if (foundStatusBuild)
                {
                    return;
                }
                else
                {
                    LastBuildNumber     = "0";
                    LastBuildUri        = null;
                    LastStatus          = new PipelineEnvironmentBuildStatus(BuildStatus.None);
                    LastBuildFinishTime = DateTime.MinValue;
                }
            }
        }
Example #16
0
        public BuildDefinitionViewModel(IBuildDefinition build)
        {
            this.Name                      = build.Name;
            this.BuildDefinition           = build;
            this.Uri                       = build.Uri;
            this.TeamProject               = build.TeamProject;
            this.ContinuousIntegrationType = GetFriendlyTriggerName(build.ContinuousIntegrationType);
            if ((build.ContinuousIntegrationType == Microsoft.TeamFoundation.Build.Client.ContinuousIntegrationType.Schedule ||
                 build.ContinuousIntegrationType == Microsoft.TeamFoundation.Build.Client.ContinuousIntegrationType.ScheduleForced) &&
                build.Schedules.Count > 0)
            {
                this.ContinuousIntegrationType = string.Format("{0} - {1}", this.ContinuousIntegrationType, ConvertTime(build.Schedules[0].StartTime.ToString(CultureInfo.CurrentCulture)));
            }
            else if (build.ContinuousIntegrationType == Microsoft.TeamFoundation.Build.Client.ContinuousIntegrationType.Gated)
            {
                this.ContinuousIntegrationType = string.Format("{0} - {1}", this.ContinuousIntegrationType, build.BatchSize);
            }
            else if (build.ContinuousIntegrationType == Microsoft.TeamFoundation.Build.Client.ContinuousIntegrationType.Batch)
            {
                this.ContinuousIntegrationType = string.Format("{0} - {1}", this.ContinuousIntegrationType, build.ContinuousIntegrationQuietPeriod);
            }

            this.BuildController = build.BuildController != null ? build.BuildController.Name : NotAvailable;
            this.Process         = build.Process != null?Path.GetFileNameWithoutExtension(build.Process.ServerPath) : NotAvailable;

            this.Description         = build.Description;
            this.DefaultDropLocation = build.DefaultDropLocation;
            this.Id               = Convert.ToInt32(build.Id);
            this.QueueStatus      = build.QueueStatus.ToString();
            this.Enabled          = build.QueueStatus != DefinitionQueueStatus.Disabled;
            this.IsGitProject     = build.SourceProviders.Any(s => s.Name.ToUpperInvariant().Contains("GIT"));
            this.IsTfvcProject    = !this.IsGitProject;
            this.LastModifiedBy   = build.Workspace.LastModifiedBy;
            this.LastModifiedDate = build.Workspace.LastModifiedDate;

            try
            {
                var parameters = WorkflowHelpers.DeserializeProcessParameters(build.ProcessParameters);
                this.OutputLocation = parameters.ContainsKey("OutputLocation") ? parameters["OutputLocation"].ToString() : "SingleFolder";

                if (parameters.ContainsKey("AgentSettings"))
                {
                    try
                    {
                        if (parameters["AgentSettings"].GetType() == typeof(AgentSettings))
                        {
                            AgentSettings ags = (AgentSettings)parameters["AgentSettings"];
                            if (ags.HasTags)
                            {
                                this.AgentTags = ags.Tags.ToString();
                            }
                        }
                        else if (parameters["AgentSettings"].GetType() == typeof(BuildParameter))
                        {
                            BuildParameter ags = (BuildParameter)parameters["AgentSettings"];
                            {
                                var jstt = JsonConvert.DeserializeObject <AgentSettingsBuildParameter>(ags.Json);
                                if (jstt.Tags != null && jstt.Tags.Count > 0)
                                {
                                    this.AgentTags = string.Join(", ", jstt.Tags.ToArray());
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                        this.AgentTags = "Failed to determine";
                    }
                }
            }
            catch (Exception)
            {
                this.OutputLocation = "Failed to determine";
            }
        }
Example #17
0
        private void UpdateBuildDefinitions()
        {
            if (this.SelectedTeamProject == null)
            {
                return;
            }

#if !DEBUG
            try
            {
#endif
            using (new WaitCursor())
            {
                if (this.dispatcherTimer.IsEnabled)
                {
                    this.dispatcherTimer.Stop();
                }

                if (this.viewmodel.SelectedBuildView == BuildView.BuildDefinitions)
                {
                    IEnumerable <IBuildDefinition> builds;
                    if (this.SelectedController == BuildManagerViewModel.AllItem)
                    {
                        builds = this.SelectedTeamProject == BuildManagerViewModel.AllItem ? this.repository.AllBuildDefinitions : this.repository.GetBuildDefinitionsForTeamProject(this.SelectedTeamProject);
                    }
                    else
                    {
                        IBuildController controller = this.repository.GetController(this.SelectedController);
                        builds = this.SelectedTeamProject == BuildManagerViewModel.AllItem ? this.repository.GetBuildDefinitions(controller) : this.repository.GetBuildDefinitions(controller, this.SelectedTeamProject);
                    }

                    builds = this.viewmodel.IncludeDisabledBuildDefinitions ? builds : builds.Where(b => b.QueueStatus != DefinitionQueueStatus.Disabled);
                    if (!string.IsNullOrWhiteSpace(this.viewmodel.BuildDefinitionFilter))
                    {
                        // if it starts with $/ then we seach on workspace mappings
                        if (this.viewmodel.BuildDefinitionFilter.StartsWith(@"$/", StringComparison.OrdinalIgnoreCase))
                        {
                            if (!string.IsNullOrWhiteSpace(this.viewmodel.BuildDefinitionFilter))
                            {
                                List <IBuildDefinition> builds2 = new List <IBuildDefinition>();
                                var filter = this.viewmodel.BuildDefinitionFilter;
                                builds2.AddRange(builds.Where(b => b.Workspace.Mappings.Any(mapping => mapping.ServerItem.StartsWith(filter, StringComparison.OrdinalIgnoreCase))));
                                var buildDefinitions = builds2.ToArray();
                                this.viewmodel.AssignBuildDefinitions(buildDefinitions);
                                this.lblCount.Content = buildDefinitions.Count();
                            }
                        }
                        else if (this.viewmodel.BuildDefinitionFilter.StartsWith(@"*", StringComparison.OrdinalIgnoreCase))
                        {
                            // if it starts with * then we are going to search Process Parameters
                            if (this.viewmodel.BuildDefinitionFilter == "*" || this.viewmodel.BuildDefinitionFilter == "**")
                            {
                                return;
                            }

                            List <IBuildDefinition> builds2 = new List <IBuildDefinition>();
                            foreach (IBuildDefinition b in builds)
                            {
                                var processParameters = WorkflowHelpers.DeserializeProcessParameters(b.ProcessParameters);

                                // if it starts with ** we do a contains, otherwise it starts with * and we do a compare.
                                if (this.viewmodel.BuildDefinitionFilter.StartsWith(@"**", StringComparison.OrdinalIgnoreCase))
                                {
                                    bool found = false;
                                    foreach (var parameter in processParameters)
                                    {
                                        // some process parameters are arrays so we need to look at each key value pair in the arrays
                                        if (parameter.Value.GetType().GetElementType() == typeof(string))
                                        {
                                            string[] arr = ((IEnumerable)parameter.Value).Cast <object>().Select(x => x.ToString()).ToArray();
                                            if (arr.Any(s => s.IndexOf(this.viewmodel.BuildDefinitionFilter.Replace("*", string.Empty), StringComparison.OrdinalIgnoreCase) >= 0))
                                            {
                                                builds2.Add(b);
                                                found = true;
                                            }
                                        }
                                        else
                                        {
                                            if (parameter.Value.ToString().IndexOf(this.viewmodel.BuildDefinitionFilter.Replace("*", string.Empty), StringComparison.OrdinalIgnoreCase) >= 0)
                                            {
                                                builds2.Add(b);
                                                found = true;
                                            }
                                        }

                                        if (!found && this.viewmodel.BuildDefinitionFilter.StartsWith(@"***", StringComparison.OrdinalIgnoreCase))
                                        {
                                            Regex r     = new Regex(@"<this:Process\..*>*" + this.viewmodel.BuildDefinitionFilter.Replace("*", string.Empty) + ".*</", RegexOptions.IgnoreCase);
                                            Match match = r.Match(b.Process.Parameters);
                                            if (match.Success)
                                            {
                                                builds2.Add(b);
                                                found = true;
                                            }
                                        }

                                        if (found)
                                        {
                                            break;
                                        }
                                    }
                                }
                                else
                                {
                                    bool found = false;
                                    foreach (var parameter in processParameters)
                                    {
                                        if (parameter.Value.GetType().GetElementType() == typeof(string))
                                        {
                                            string[] arr = ((IEnumerable)parameter.Value).Cast <object>()
                                                           .Select(x => x.ToString())
                                                           .ToArray();

                                            if (arr.Any(s => string.Compare(s, this.viewmodel.BuildDefinitionFilter.Replace("*", string.Empty), StringComparison.OrdinalIgnoreCase) == 0))
                                            {
                                                builds2.Add(b);
                                                found = true;
                                            }
                                        }
                                        else
                                        {
                                            if (string.Compare(parameter.Value.ToString(), this.viewmodel.BuildDefinitionFilter.Replace("*", string.Empty), StringComparison.OrdinalIgnoreCase) == 0)
                                            {
                                                builds2.Add(b);
                                                found = true;
                                            }
                                        }

                                        if (found)
                                        {
                                            break;
                                        }
                                    }
                                }
                            }

                            var buildDefinitions = builds2.ToArray();
                            this.viewmodel.AssignBuildDefinitions(buildDefinitions);
                            this.lblCount.Content = buildDefinitions.Count();
                        }
                        else
                        {
                            var filter = this.viewmodel.BuildDefinitionFilter.ToUpperInvariant();
                            builds = builds.Where(b => b.Name.ToUpperInvariant().Contains(filter)).ToArray();
                            var buildDefinitions = builds as IBuildDefinition[];
                            this.viewmodel.AssignBuildDefinitions(buildDefinitions);
                            this.lblCount.Content = buildDefinitions.Count();
                        }
                    }
                    else
                    {
                        var buildDefinitions = builds as IBuildDefinition[] ?? builds.ToArray();
                        this.viewmodel.AssignBuildDefinitions(buildDefinitions);
                        this.lblCount.Content = buildDefinitions.Count();
                    }
                }
                else if (this.viewmodel.SelectedBuildView == BuildView.Builds)
                {
                    this.UpdateBuilds();
                }
                else if (this.viewmodel.SelectedBuildView == BuildView.BuildProcessTemplates)
                {
                    this.UpdateBuildProcessTemplates();
                }
                else if (this.viewmodel.SelectedBuildView == BuildView.BuildResources)
                {
                    this.UpdateBuildResources();
                }
            }
#if !DEBUG
        }

        catch (Exception ex)
        {
            this.DisplayError(ex);
        }
#endif
        }
        private DefaultActivity CreateCRMActivity(string ActName, DataField dfEntityid, DataField dfEntityName, int x, ref int y)
        {
            DefaultActivity actCRMReview = WorkflowFactory.CreateActivity <DefaultActivity>(ActName + " Review", WizardNames.DefaultActivity);

            process.Activities.Add(actCRMReview);
            actCRMReview.MetaData         = "Generated by K2 for Dynamics CRM 2011 Process Generation Tool";
            actCRMReview.ExpectedDuration = 1440;
            actCRMReview.Priority         = 2;
            actCRMReview.Slots            = 1;
            actCRMReview.Type             = ActivityTypes.DestinationInstanceParralel;
            WorkflowHelpers.PositionActivity(actCRMReview, x, y);
            y += 100;

            DesignCRMClient.CRMClientEvent crmClientEvent = WorkflowFactory.CreateEvent <DesignCRMClient.CRMClientEvent>(ActName + " Review", WizardNames.CRMClientEvent);

            crmClientEvent.EventItem.CRMCustomSNParameter.Parts.Add("k2_sn");
            crmClientEvent.EventItem.CRMEntityId.Parts.Add(dfEntityid);
            crmClientEvent.EventItem.CRMEntityType.Parts.Add(dfEntityName);
            crmClientEvent.EventItem.CRMFunctionsSmartObject.Parts.Add("K2_CRM_Functions");
            crmClientEvent.EventItem.CRMOrganisation.Parts.Add("Denallix");

            // Add some destination users
            SimpleDestinationRule destinationRule       = new SimpleDestinationRule();
            DestinationSet        defaultDestinationSet = new DestinationSet();
            Destination           destination1          = new Destination();

            destination1.Type = DestinationTypes.User;

            SourceCode.Workflow.Design.WorkflowContextFieldPart fpProcOrigName = new WorkflowContextFieldPart();
            fpProcOrigName.WfProps = "ProcessOriginatorName";
            fpProcOrigName.WorkflowContextProperty = WorkflowContextProperty.ProcessOriginatorName;

            destination1.Value = new K2Field(fpProcOrigName);

            defaultDestinationSet.Destinations.Add(destination1);
            destinationRule.DestinationSets.Add(defaultDestinationSet);
            actCRMReview.DestinationRule         = destinationRule;
            destinationRule.ResolveQueuesToUsers = true;

            crmClientEvent.EventItem.TaskSubject.Parts.Add(new WorkflowContextFieldPart(WorkflowContextProperty.ProcessFolio));
            crmClientEvent.EventItem.TaskSubject.Parts.Add(" - ");
            crmClientEvent.EventItem.TaskSubject.Parts.Add(new WorkflowContextFieldPart(WorkflowContextProperty.ActivityInstanceName));

            crmClientEvent.EventItem.TaskDescription.Parts.Add(new WorkflowContextFieldPart(WorkflowContextProperty.ProcessFolio));
            crmClientEvent.EventItem.TaskDescription.Parts.Add(" - ");
            crmClientEvent.EventItem.TaskDescription.Parts.Add(new WorkflowContextFieldPart(WorkflowContextProperty.ActivityInstanceName));

            crmClientEvent.EventItem.TaskOwnerFQN.Parts.Add(new WorkflowContextFieldPart(WorkflowContextProperty.ActivityInstanceDestUserName));
            crmClientEvent.EventItem.ProcessName.Parts.Add(new WorkflowContextFieldPart(WorkflowContextProperty.ProcessName));
            crmClientEvent.EventItem.ActivityName.Parts.Add(new WorkflowContextFieldPart(WorkflowContextProperty.ActivityInstanceName));
            crmClientEvent.EventItem.TaskCategory.Parts.Add(new WorkflowContextFieldPart(WorkflowContextProperty.ProcessName));
            crmClientEvent.EventItem.TaskSubcategory.Parts.Add(new WorkflowContextFieldPart(WorkflowContextProperty.ActivityInstanceName));


            actCRMReview.SucceedingRule   = new DesignCRMClient.CRMClientActivitySucceedingRule();
            crmClientEvent.SucceedingRule = new DesignCRMClient.CRMClientEventSucceedingRule();

            actCRMReview.Events.Add(crmClientEvent);

            // Add two actions for the client event
            EventAction approveAction = WorkflowFactory.CreateK2Object <EventAction>("Approve");

            approveAction.ActionItem = new DefaultOutcomeAction();
            EventAction declineAction = WorkflowFactory.CreateK2Object <EventAction>("Decline");

            declineAction.ActionItem = new DefaultOutcomeAction();
            crmClientEvent.Actions.Add(approveAction);
            crmClientEvent.Actions.Add(declineAction);


            // Find the default succeeding rule property wizard definition,
            // and replace it with the default outcome succeeding rule
            //PropertyWizardDefinition propWizDefSimple = WorkflowHelpers.FindOfType<SimpleSucceedingRulePropertyWizardDefinition>(actCRMReview.WizardDefinition.PropertyWizardDefinitions);
            //PropertyWizardDefinition propWizDefOutcome = WorkflowHelpers.FindOfType<OutcomeSucceedingRulePropertyWizardDefinition>(actCRMReview.WizardDefinition.PropertyWizardDefinitions);
            //if (propWizDefSimple != null && propWizDefOutcome == null)
            //{
            //    actCRMReview.WizardDefinition.PropertyWizardDefinitions.Remove(propWizDefSimple);
            //    actCRMReview.WizardDefinition.PropertyWizardDefinitions.Add(
            //        WorkflowFactory.CreatePropertyWizardDefinition(PropertyWizardNames.OutcomeSucceedingRule));
            //}

            SourceCode.Workflow.Design.Outcome.Common.GenerateDefaultOutcomesForActions(crmClientEvent);
            SourceCode.Workflow.Design.Outcome.Common.GenerateDefaultLinesForOutcomes(actCRMReview.SucceedingRule as DesignCRMClient.CRMClientActivitySucceedingRule);
            SourceCode.Workflow.Design.Outcome.Common.SyncActivityAndEventSucceedingRule(crmClientEvent);
            return(actCRMReview);
        }
Example #19
0
        public static DefaultProcess CreateSampleProcess()
        {
            // Create new process
            DefaultProcess process = WorkflowFactory.CreateProcess <DefaultProcess>("Sample Approval Process", WizardNames.DefaultProcess);

            // Add some data fields with default values
            DataField fromEmailDataField = new DataField("From Email", "*****@*****.**");
            DataField toEmailDataField   = new DataField("To Email", "*****@*****.**");

            process.DataFields.Add(fromEmailDataField);
            process.DataFields.Add(toEmailDataField);

            // Create 3 activities and add them to the process
            DefaultActivity awaitApprovalActivity = WorkflowFactory.CreateActivity <DefaultActivity>("Await approval", WizardNames.DefaultActivity);
            DefaultActivity approvedActivity      = WorkflowFactory.CreateActivity <DefaultActivity>("Approved", WizardNames.DefaultActivity);
            DefaultActivity declinedActivity      = WorkflowFactory.CreateActivity <DefaultActivity>("Declined", WizardNames.DefaultActivity);

            process.Activities.Add(awaitApprovalActivity);
            process.Activities.Add(approvedActivity);
            process.Activities.Add(declinedActivity);

            // Create a client event
            ClientEvent approvalClientEvent = WorkflowFactory.CreateEvent <ClientEvent>("Get client approval", WizardNames.DefaultClientEvent);

            SourceCode.Workflow.Design.DefaultClientWizardDefinition a = new DefaultClientWizardDefinition();


            // Configure the client event
            approvalClientEvent.EventItem.InternetPlatform = "ASP";
            approvalClientEvent.EventItem.SendToInternet   = true;
            approvalClientEvent.EventItem.InternetUrl      = K2FieldFactory.CreateK2Field(
                typeof(string),
                new ValueTypePart("http://webserver/page.aspx?"),
                new SerialNoFieldPart());

            // Add event to the activity so that the helper methods for generating
            // the default outcomes will work correctly
            awaitApprovalActivity.Events.Add(approvalClientEvent);

            // Add two actions for the client event
            EventAction approveAction = WorkflowFactory.CreateK2Object <EventAction>("Approve");

            approveAction.ActionItem = new DefaultOutcomeAction();
            EventAction declineAction = WorkflowFactory.CreateK2Object <EventAction>("Decline");

            declineAction.ActionItem = new DefaultOutcomeAction();
            approvalClientEvent.Actions.Add(approveAction);
            approvalClientEvent.Actions.Add(declineAction);

            // Set the activity succeeding rule to the outcome succeeding rule
            awaitApprovalActivity.SucceedingRule = new DefaultOutcomeSucceedingRule();

            // Find the default succeeding rule property wizard definition,
            // and replace it with the default outcome succeeding rule
            PropertyWizardDefinition propWizDefSimple  = WorkflowHelpers.FindOfType <SimpleSucceedingRulePropertyWizardDefinition>(awaitApprovalActivity.WizardDefinition.PropertyWizardDefinitions);
            PropertyWizardDefinition propWizDefOutcome = WorkflowHelpers.FindOfType <OutcomeSucceedingRulePropertyWizardDefinition>(awaitApprovalActivity.WizardDefinition.PropertyWizardDefinitions);

            if (propWizDefSimple != null && propWizDefOutcome == null)
            {
                awaitApprovalActivity.WizardDefinition.PropertyWizardDefinitions.Remove(propWizDefSimple);
                awaitApprovalActivity.WizardDefinition.PropertyWizardDefinitions.Add(
                    WorkflowFactory.CreatePropertyWizardDefinition(PropertyWizardNames.OutcomeSucceedingRule));
            }
            SourceCode.Workflow.Design.Outcome.Common.GenerateDefaultOutcomesForActions(approvalClientEvent);
            SourceCode.Workflow.Design.Outcome.Common.GenerateDefaultLinesForOutcomes(awaitApprovalActivity.SucceedingRule as DefaultOutcomeSucceedingRule);

            // Add some destination users
            SimpleDestinationRule destinationRule       = new SimpleDestinationRule();
            DestinationSet        defaultDestinationSet = new DestinationSet();
            Destination           destination1          = new Destination();

            destination1.Type  = DestinationTypes.User;
            destination1.Value = K2FieldFactory.CreateK2Field("K2:Domain\\User1");
            Destination destination2 = new Destination();

            destination2.Type  = DestinationTypes.User;
            destination2.Value = K2FieldFactory.CreateK2Field("K2:Domain\\User2");

            defaultDestinationSet.Destinations.Add(destination1);
            defaultDestinationSet.Destinations.Add(destination2);

            destinationRule.DestinationSets.Add(defaultDestinationSet);


            // Set the destination rule of the activity
            awaitApprovalActivity.DestinationRule = destinationRule;

            // Create the approved email event
            MailEvent approvedMail = WorkflowFactory.CreateEvent <MailEvent>("Send approved email", WizardNames.MailEvent);

            // Use string values for the email addresses
            approvedMail.EventItem.To      = K2FieldFactory.CreateK2Field("*****@*****.**");
            approvedMail.EventItem.From    = K2FieldFactory.CreateK2Field("*****@*****.**");
            approvedMail.EventItem.Subject = K2FieldFactory.CreateK2Field("Leave Approved");
            approvedMail.EventItem.Body    = K2FieldFactory.CreateK2Field("Your leave has been approved.");

            // Create the declined email event
            MailEvent declinedMail = WorkflowFactory.CreateEvent <MailEvent>("Send declined email", WizardNames.MailEvent);

            // Use process data fields for the email addresses
            declinedMail.EventItem.To      = K2FieldFactory.CreateK2Field(toEmailDataField);
            declinedMail.EventItem.From    = K2FieldFactory.CreateK2Field(fromEmailDataField);
            declinedMail.EventItem.Subject = K2FieldFactory.CreateK2Field("Leave Declined");
            declinedMail.EventItem.Body    = K2FieldFactory.CreateK2Field("Your leave has been declined.");

            // Add the events to the activities
            approvedActivity.Events.Add(approvedMail);
            declinedActivity.Events.Add(declinedMail);

            // Link the lines created by the "GenerateDefaultLinesForOutcomes" method to the approved and declined activities
            process.Lines["Approve"].FinishActivity = approvedActivity;
            process.Lines["Decline"].FinishActivity = declinedActivity;

            // Link the start activity with the await approval activity
            Line startLine = WorkflowFactory.CreateLine("StartLine");

            startLine.StartActivity  = process.StartActivity;
            startLine.FinishActivity = awaitApprovalActivity;
            process.Lines.Add(startLine);

            // Position the activities and lines
            WorkflowHelpers.PositionActivity(process.StartActivity, 208, 16);
            WorkflowHelpers.PositionActivity(awaitApprovalActivity, 208, 112);
            WorkflowHelpers.PositionActivity(approvedActivity, 32, 224);
            WorkflowHelpers.PositionActivity(declinedActivity, 368, 224);

            // FinishLines are the lines that flows out from the activity
            // when the activity has finished
            WorkflowHelpers.AutoPositionLines(awaitApprovalActivity.FinishLines);

            return(process);
        }
Example #20
0
        private void ButtonImport_OnClick(object sender, RoutedEventArgs e)
        {
            foreach (var item in this.DataGridBuildsToImport.Items)
            {
                BuildImport bi = item as BuildImport;
                try
                {
                    if (bi == null)
                    {
                        return;
                    }

                    if (!File.Exists(bi.JsonFile))
                    {
                        bi.Status      = "Failed";
                        bi.StatusImage = "Graphics/Failed.png";
                        bi.Message     = "File not found";
                    }
                    else
                    {
                        ExportedBuildDefinition exdef = JsonConvert.DeserializeObject <ExportedBuildDefinition>(File.ReadAllText(bi.JsonFile));
                        var newBuildDefinition        = this.buildServer.CreateBuildDefinition(this.lableTeamProject.Content.ToString());
                        newBuildDefinition.Name        = exdef.Name;
                        newBuildDefinition.Description = exdef.Description;
                        newBuildDefinition.ContinuousIntegrationType        = exdef.ContinuousIntegrationType;
                        newBuildDefinition.ContinuousIntegrationQuietPeriod = exdef.ContinuousIntegrationQuietPeriod;

                        newBuildDefinition.QueueStatus = exdef.QueueStatus;
                        if (exdef.SourceProviders.All(s => s.Name != "TFGIT"))
                        {
                            foreach (var mapping in exdef.Mappings)
                            {
                                newBuildDefinition.Workspace.AddMapping(mapping.ServerItem, mapping.LocalItem, mapping.MappingType);
                            }
                        }

                        newBuildDefinition.RetentionPolicyList.Clear();
                        foreach (var ret in exdef.RetentionPolicyList)
                        {
                            newBuildDefinition.AddRetentionPolicy(ret.BuildReason, ret.BuildStatus, ret.NumberToKeep, ret.DeleteOptions);
                        }

                        foreach (var sp in exdef.SourceProviders)
                        {
                            var provider = newBuildDefinition.CreateInitialSourceProvider(sp.Name);
                            if (exdef.SourceProviders.All(s => s.Name == "TFGIT"))
                            {
                                provider.Fields["RepositoryName"] = sp.Fields["RepositoryName"];
                                provider.Fields["DefaultBranch"]  = sp.Fields["DefaultBranch"];
                                provider.Fields["CIBranches"]     = sp.Fields["CIBranches"];
                                provider.Fields["RepositoryUrl"]  = sp.Fields["RepositoryUrl"];
                            }

                            newBuildDefinition.SetSourceProvider(provider);
                        }

                        newBuildDefinition.BuildController = this.buildServer.GetBuildController(exdef.BuildController);
                        var x = this.buildServer.QueryProcessTemplates(this.lableTeamProject.Content.ToString());
                        if (x.All(p => p.ServerPath != exdef.ProcessTemplate))
                        {
                            bi.Status      = "Failed";
                            bi.StatusImage = "Graphics/Failed.png";
                            bi.Message     = "Process Template not found - " + exdef.ProcessTemplate;
                            continue;
                        }

                        newBuildDefinition.Process             = this.buildServer.QueryProcessTemplates(this.lableTeamProject.Content.ToString()).First(p => p.ServerPath == exdef.ProcessTemplate);
                        newBuildDefinition.DefaultDropLocation = exdef.DefaultDropLocation;
                        foreach (var sched in exdef.Schedules)
                        {
                            var newSched = newBuildDefinition.AddSchedule();
                            newSched.DaysToBuild = sched.DaysToBuild;
                            newSched.StartTime   = sched.StartTime;
                            newSched.TimeZone    = sched.TimeZone;
                        }

                        var process = WorkflowHelpers.DeserializeProcessParameters(newBuildDefinition.ProcessParameters);

                        foreach (var param in exdef.ProcessParameters)
                        {
                            switch (param.Key)
                            {
                            case "BuildSettings":
                                if (exdef.ProjectsToBuild != null)
                                {
                                    process.Add(param.Key, new BuildSettings {
                                        ProjectsToBuild = exdef.ProjectsToBuild, PlatformConfigurations = exdef.ConfigurationsToBuild
                                    });
                                }

                                break;

                            case "AgentSettings":
                                if (exdef.TfvcAgentSettings != null)
                                {
                                    process.Add(param.Key, (AgentSettings)exdef.TfvcAgentSettings);
                                }
                                else if (exdef.GitAgentSettings != null)
                                {
                                    process.Add(param.Key, exdef.GitAgentSettings);
                                }

                                break;

                            case "TestSpecs":
                                if (exdef.AgileTestSpecs != null)
                                {
                                    process.Add(param.Key, exdef.AgileTestSpecs.ToSpecList());
                                }

                                break;

                            default:
                                Newtonsoft.Json.Linq.JArray arrayItem = param.Value as Newtonsoft.Json.Linq.JArray;
                                if (arrayItem == null)
                                {
                                    Newtonsoft.Json.Linq.JObject objectItem = param.Value as Newtonsoft.Json.Linq.JObject;
                                    if (objectItem == null)
                                    {
                                        if (param.Key == "CleanWorkspace")
                                        {
                                            process.Add(param.Key, (CleanWorkspaceOption)Enum.Parse(typeof(CleanWorkspaceOption), param.Value.ToString()));
                                        }
                                        else if (param.Key == "RunCodeAnalysis")
                                        {
                                            process.Add(param.Key, (CodeAnalysisOption)Enum.Parse(typeof(CodeAnalysisOption), param.Value.ToString()));
                                        }
                                        else
                                        {
                                            process.Add(param.Key, param.Value);
                                        }
                                    }
                                    else
                                    {
                                        Microsoft.TeamFoundation.Build.Common.BuildParameter paramItem = new Microsoft.TeamFoundation.Build.Common.BuildParameter(param.Value.ToString());
                                        process.Add(param.Key, paramItem);
                                    }
                                }
                                else
                                {
                                    string[] arrayItemList = new string[arrayItem.Count];
                                    for (int i = 0; i < arrayItem.Count; i++)
                                    {
                                        arrayItemList[i] = arrayItem[i].ToString();
                                    }

                                    process.Add(param.Key, arrayItemList);
                                }

                                break;
                            }
                        }

                        if (exdef.BuildReasons != null)
                        {
                            foreach (var key in exdef.BuildReasons.Keys)
                            {
                                if (process.ContainsKey(key))
                                {
                                    process[key] = exdef.BuildReasons[key];
                                }
                            }
                        }

                        if (exdef.IntegerParameters != null)
                        {
                            foreach (var key in exdef.IntegerParameters.Keys)
                            {
                                if (process.ContainsKey(key))
                                {
                                    process[key] = exdef.IntegerParameters[key];
                                }
                            }
                        }

                        if (exdef.BuildVerbosities != null)
                        {
                            foreach (var key in exdef.BuildVerbosities.Keys)
                            {
                                if (process.ContainsKey(key))
                                {
                                    process[key] = exdef.BuildVerbosities[key];
                                }
                            }
                        }

                        newBuildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(process);
                        newBuildDefinition.Save();
                        bi.Status      = "Succeeded";
                        bi.StatusImage = "Graphics/Succeeded.png";
                        bi.Message     = string.Empty;
                    }
                }
                catch (Exception ex)
                {
                    bi.Status      = "Failed";
                    bi.StatusImage = "Graphics/Failed.png";
                    bi.Message     = ex.Message;
                }
                finally
                {
                    this.DataGridBuildsToImport.ItemsSource = null;
                    this.DataGridBuildsToImport.ItemsSource = this.buildFiles;
                }
            }
        }
Example #21
0
        public IList <BuildNumber> GetPromotableBuilds(int targetEnvironmentBuildNumber)
        {
            try
            {
                List <BuildNumber> promotableBuilds = new List <BuildNumber>();

                IBuildDetailSpec buildSpec = Pipeline.Source.BuildServer.CreateBuildDetailSpec(BuildDefinition);
                buildSpec.InformationTypes = null;
                buildSpec.Status           = BuildStatus.Succeeded;

                IBuildQueryResult buildDetails = Pipeline.Source.BuildServer.QueryBuilds(buildSpec);

                foreach (IBuildDetail buildDetail in buildDetails.Builds)
                {
                    if (buildDetail.BuildFinished)
                    {
                        IDictionary <string, object> processParams = WorkflowHelpers.DeserializeProcessParameters(buildDetail.ProcessParameters);

                        Build build = new Build(buildDetail);

                        int visibleBuildNumber = build.Number;

                        if (EnvironmentName == "Production")
                        {
                            string buildUriString = buildDetail.Uri.ToString();

                            string buildUri = buildUriString.Contains("?") ? buildUriString.Substring(0, buildUriString.IndexOf("?")) : buildUriString;

                            string buildUriPrefix = buildUri.Substring(0, buildUri.LastIndexOf("/") + 1);

                            Uri commitBuildUri = new Uri(string.Format("{0}{1}", buildUriPrefix, processParams["PriorBuild"] as string));

                            IBuildDetail commitBuildDetail = BuildDefinition.BuildServer.GetMinimalBuildDetails(commitBuildUri);

                            IDictionary <string, object> commitProcessParams = WorkflowHelpers.DeserializeProcessParameters(commitBuildDetail.ProcessParameters);

                            visibleBuildNumber = Int32.Parse((string)commitProcessParams["PriorBuild"]);
                        }
                        else if (EnvironmentName != "Commit")
                        {
                            visibleBuildNumber = Int32.Parse((string)processParams["PriorBuild"]);
                        }

                        if (targetEnvironmentBuildNumber > 0)
                        {
                            if (visibleBuildNumber > targetEnvironmentBuildNumber)
                            {
                                promotableBuilds.Add(new BuildNumber(build, visibleBuildNumber));
                            }
                        }
                        else
                        {
                            promotableBuilds.Add(new BuildNumber(build, visibleBuildNumber));
                        }
                    }
                }

                return(promotableBuilds);
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Unable to get builds from TFS, error message was:\n\n{0}", ex.Message));
            }
        }
        private void btnGenerateCRMProcess_Click(object sender, RoutedEventArgs e)
        {
            SourceCode.SmartObjects.Client.SmartObjectClientServer smoServer = new SmartObjectClientServer();
            smoServer.CreateConnection();
            smoServer.Connection.Open("Integrated=True;IsPrimaryLogin=True;Authenticate=True;EncryptedPassword=False;Host=localhost;Port=5555");

            SmartObject smoCRM = smoServer.GetSmartObject("Demo_K2_CRM_Functions");

            smoCRM.MethodToExecute = "GetAllEntities";

            SmartObjectList smoEntities = smoServer.ExecuteList(smoCRM);


            // get state status details
            CRMPicklist pl = new CRMPicklist();

//            pl.AttributeLogicalName = att.LogicalName;
            pl.EntityLogicalName = "lead";

            CRMPicklist cp = functions.CRMGetStateStatus(pl);

            int seq = 0;

            foreach (CRMPicklistOption plo in cp.Picklist.OrderBy(p => p.PicklistParentValue).OrderBy(p => p.PicklistValue))
            {
                StateStatus ss = new StateStatus();
                ss.State      = plo.PicklistParentValue;
                ss.StateName  = plo.PicklistParentLabel;
                ss.Status     = plo.PicklistValue;
                ss.StatusName = plo.PicklistLabel;
                ss.Sequence   = seq;
                seq++;
                CRMSS.Add(ss);
            }


            bool ActiveOnly = true;


            string nowish = DateTime.Now.ToString("yyyyMMddHHmmss");

            // Create new process
            process = WorkflowFactory.CreateProcess <DefaultProcess>(nowish, WizardNames.DefaultProcess);

            DataField dfEntityId   = new DataField("Entity Id", "");
            DataField dfEntityName = new DataField("Entity Name", "");

            process.DataFields.Add(dfEntityId);
            process.DataFields.Add(dfEntityName);


            var dimensions = WorkflowHelpers.GetActivityDimensions(process.StartActivity);
            int x          = Convert.ToInt32(Math.Round(dimensions.X + dimensions.Width + 40D));
            int y          = Convert.ToInt32(dimensions.Y) + 100;

            DefaultActivity PrevStatAct   = null;
            DefaultActivity PrevReviewAct = null;

            PrevStatAct = CreateStartActivity("", dfEntityId, dfEntityName, x, ref y);

            SourceCode.Workflow.Authoring.Line startLine = WorkflowFactory.CreateLine("StartLine");
            startLine.StartActivity  = process.StartActivity;
            startLine.FinishActivity = PrevStatAct;
            process.Lines.Add(startLine);

            int c = 0;

            foreach (StateStatus ss in CRMSS.OrderBy(p => p.Sequence))
            {
                DefaultActivity act = CreateStatusActivity(ss.StateName + " - " + ss.StatusName, dfEntityId, dfEntityName, x, ref y);
                if (PrevReviewAct != null)
                {
                    PrevReviewAct.FinishLines[0].FinishActivity = act;
                }

                if (c == 0)
                {
                    SourceCode.Workflow.Authoring.Line firstline = WorkflowFactory.CreateLine("Firstline");
                    firstline.StartActivity  = PrevStatAct;
                    firstline.FinishActivity = act;
                    process.Lines.Add(firstline);
                }
                c++;

                DefaultActivity act1 = null;
                if (!ActiveOnly || ActiveOnly && ss.State == 0)
                {
                    act1 = CreateCRMActivity(ss.StateName + " - " + ss.StatusName, dfEntityId, dfEntityName, x, ref y);

                    SourceCode.Workflow.Authoring.Line line = WorkflowFactory.CreateLine("Line " + ss.Sequence);
                    line.StartActivity  = act;
                    line.FinishActivity = act1;
                    process.Lines.Add(line);

                    if (PrevStatAct != null)
                    {
                        act1.FinishLines[1].FinishActivity = PrevStatAct;
                    }
                }

                if (act1 == null && PrevStatAct.FinishLines.Count == 0)
                {
                    PrevReviewAct = null;
                    SourceCode.Workflow.Authoring.Line updateLine = WorkflowFactory.CreateLine("Update Line " + ss.Sequence);
                    updateLine.StartActivity  = PrevStatAct;
                    updateLine.FinishActivity = act;
                    process.Lines.Add(updateLine);
                }


                if (act != null)
                {
                    WorkflowHelpers.AutoPositionLines(act.StartLines);
                    WorkflowHelpers.AutoPositionLines(act.FinishLines);
                }
                if (act1 != null)
                {
                    WorkflowHelpers.AutoPositionLines(act1.StartLines);
                    WorkflowHelpers.AutoPositionLines(act1.FinishLines);
                }

                PrevReviewAct = act1;
                PrevStatAct   = act;
            }



            process.FinishRule = new DesignCRMClient.CRMClientProcessFinishRule();

            process.SaveAs(txtProcessPath.Text + nowish + ".kprx");

            process = null;
        }