/// <summary>
        /// Gets the deployment package.
        /// </summary>
        /// <param name="project">The K2 project.</param>
        /// <param name="environmentManager">The K2 environment manager.</param>
        /// <param name="IsTest">Will Deployment Package be in Test Mode?</param>
        /// <returns>The Deployment Package</returns>
        public static DeploymentPackage CreateDeploymentPackage(
            Project project, EnvironmentSettingsManager environmentManager,
            string DeploymentLabel, string DeploymentDescription, bool IsTest)
        {
            DeploymentPackage package;

            LogHelper.LogMessage("      -- Creating Deployment Package");
            package = project.CreateDeploymentPackage();

            // Populate Environment Fields
            foreach (EnvironmentInstance env in environmentManager.CurrentTemplate.Environments)
            {
                DeploymentEnvironment depEnv = package.AddEnvironment(env.EnvironmentName);

                foreach (EnvironmentField field in env.EnvironmentFields)
                {
                    depEnv.Properties[field.FieldName] = field.Value;
                }
            }

            LogHelper.LogMessage("   -- Setting Package Info");
            package.SelectedEnvironment        = environmentManager.CurrentEnvironment.EnvironmentName;
            package.DeploymentLabelName        = string.IsNullOrEmpty(DeploymentLabel) ? DateTime.Now.ToString() : DeploymentLabel;
            package.DeploymentLabelDescription = DeploymentDescription;
            package.TestOnly = IsTest;

            LogHelper.LogMessage("      SelectedEnvironment = " + package.SelectedEnvironment);
            LogHelper.LogMessage("      DeploymentLabelName = " + package.DeploymentLabelName);
            LogHelper.LogMessage("      DeploymentLabelDescription = " + package.DeploymentLabelDescription);
            LogHelper.LogMessage("      TestOnly = " + package.TestOnly);

            // Get the Default SmartObject Server in the Environment
            // The prefix "$Field=" is when the value of the SmartObject server is registered in the environment fields collection.
            // this will do a lookup in the environment with the display name of the field, and use the value.
            // If you set the value directly, no lookups will be performed.
            EnvironmentField smartObjectServerField =
                environmentManager.CurrentEnvironment.GetDefaultField(typeof(SmartObjectField));

            LogHelper.LogMessage("   -- Setting SmartObject Server ConnectionString");
            package.SmartObjectConnectionString = "$Field=" + smartObjectServerField.DisplayName;
            LogHelper.LogMessage("      SmartObject Server ConnectionString = " + package.SmartObjectConnectionString);

            // Get the Default Workflow Management Server in the Environment
            EnvironmentField workflowServerField =
                environmentManager.CurrentEnvironment.GetDefaultField(typeof(WorkflowManagementServerField));

            LogHelper.LogMessage("   -- Setting Workflow Management ConnectionString");
            package.WorkflowManagementConnectionString = "$Field=" + workflowServerField.DisplayName;
            LogHelper.LogMessage("      Workflow Management ConnectionString = " + package.WorkflowManagementConnectionString);

            return(package);
        }
        private DeploymentPackage GetDeploymentPackage(Project project, EnvironmentSettingsManager environmentManager)
        {
            DeploymentPackage package;

            package = project.CreateDeploymentPackage();

            var listEnvirnonments = new List <string>();

            // Populate Environment Fields
            foreach (EnvironmentInstance env in environmentManager.CurrentTemplate.Environments)
            {
                listEnvirnonments.Add(env.EnvironmentName);
            }

            foreach (var envName in listEnvirnonments)
            {
                DeploymentEnvironment depEnv = package.AddEnvironment(envName);

                Console.WriteLine("\n****************Environment Fields********************* FOR {0}", envName);


                //////environmentManager.ChangeEnvironment(env.EnvironmentName);
                InitaliseEnvironmentForSpecifiedEnvironment(environmentManager, envName);
                foreach (EnvironmentInstance env in environmentManager.CurrentTemplate.Environments)
                {
                    ////// Console.WriteLine("\n foreach (EnvironmentInstance env in environmentManager.CurrentTemplate.Environments) FOR {0}", env.EnvironmentName);
                    if (env.EnvironmentName.Equals(envName))
                    {
                        //////Console.WriteLine("\n****env.EnvironmentName.Equals(envName)***** FOR {0} {1}", env.EnvironmentName, envName);
                        foreach (EnvironmentField field in env.EnvironmentFields)
                        {
                            //////Console.WriteLine("\n****************Environment Fields********************* FOR {0}", envName);
                            Console.WriteLine("{0} = {1}", depEnv.Properties[field.FieldName], field.Value);

                            depEnv.Properties[field.FieldName] = field.Value;
                        }
                    }
                }
                //////Console.WriteLine("\n**************** InitializeSettingsManager()*********************");
                //////environmentManager.InitializeSettingsManager();
                //////Console.WriteLine("\n**************** GetEnvironmentFields({0})*********************", environmentManager.CurrentEnvironment.EnvironmentName);
                //////environmentManager.GetEnvironmentFields(environmentManager.CurrentEnvironment);
            }


            package.SelectedEnvironment        = environmentManager.CurrentEnvironment.EnvironmentName;
            package.DeploymentLabelName        = DateTime.Now.ToString();
            package.DeploymentLabelDescription = string.Empty;
            package.TestOnly = false;


            Console.WriteLine("\nEnvironment Info:\n\n");
            Console.WriteLine("\nSelectedEnvironment = " + package.SelectedEnvironment);
            Console.WriteLine("\nDeploymentLabelName = " + package.DeploymentLabelName);
            Console.WriteLine("\nDeploymentLabelDescription = " + package.DeploymentLabelDescription);
            Console.WriteLine("\nTestOnly = " + package.TestOnly);

            // Get the Default SmartObject Server in the Environment
            // The prefix "$Field=" is when the value of the SmartObject server is registered in the environment fields collection.
            // this will do a lookup in the environment with the display name of the field, and use the value.
            // If you set the value directly, no lookups will be performed.
            EnvironmentField smartObjectServerField =
                environmentManager.CurrentEnvironment.GetDefaultField(typeof(SmartObjectField));

            package.SmartObjectConnectionString = "$Field=" + smartObjectServerField.DisplayName;


            Console.WriteLine("\npackage.SmartObjectConnectionString = " + package.SmartObjectConnectionString);

            // Get the Default Workflow Management Server in the Environment
            EnvironmentField workflowServerField =
                environmentManager.CurrentEnvironment.GetDefaultField(typeof(WorkflowManagementServerField));

            package.WorkflowManagementConnectionString = "$Field=" + workflowServerField.DisplayName;

            Console.WriteLine("\npackage.WorkflowManagementConnectionString = " + package.WorkflowManagementConnectionString);

            return(package);
        }