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>()); }
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; }
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); }
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"); } }
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); }
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; } } }
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"; } }
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); }
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); }
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; } } }
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; }