//Remove existing parameter
 private string RemoveExistingParameter(ParameterSelectorModel paramToPull)
 {
     //If the parameter already exists, return a alert message
     foreach (FamilyParameter familyParameter in familyManager.Parameters)               //Go through each parameter in the push document
     {
         if (familyParameter.Definition.Name.Equals(paramToPull.Name))
         {
             return($"Parameter '{paramToPull.Name}' alerady exists in the current Family and will be skipped.{Environment.NewLine}");
         }
     }
     return("");
 }
 //Adds a Project or Shared Parameter depending on the original parameter to be pushed
 private FamilyParameter AddParameter(ParameterSelectorModel parameterToPull)
 {
     if (parameterToPull.IsShared)
     {
         ExternalDefinition sharedParameter = GetSharedParameter(app, parameterToPull.Name); //Get the ExternalDefinition, in case it's a Shared Parameter
         return(AddSharedParameter(sharedParameter, parameterToPull));                       //Adds a Shared Parameter
     }
     else
     {
         return(AddProjectParameter(parameterToPull));                  //Adds a (normal) Project Parameter
     }
 }
        //Creates a regular parameter
        private FamilyParameter AddProjectParameter(ParameterSelectorModel parameterToPull)
        {
            FamilyParameter parameter = null;

            try
            {
                using (Transaction ft = new Transaction(doc, "Pull parameter"))
                {
                    ft.Start();
                    //Adds a Parameter to the Family
                    parameter = familyManager.AddParameter(parameterToPull.Name, parameterToPull.ParameterGroup, parameterToPull.ParameterType, parameterToPull.IsInstance);
                    ft.Commit();
                }
            }
            catch (Exception ex) { DialogUtils.Alert("Failed", ex.Message); }
            return(parameter);
        }
        //Push parameter into selected FamilyInstance
        private void ExecutePullParamters(ParameterSelectorModel parameterToPull)
        {
            var exist = RemoveExistingParameter(parameterToPull);               //Check if existing project parameter

            if (String.IsNullOrEmpty(exist))
            {
                var parameter = AddParameter(parameterToPull);                    //Add the Parameter to the Nested Family
                if (parameter != null)
                {
                    SuccessMessage += $"{parameter.Definition.Name} created sucessfully{Environment.NewLine}";                                      //Report the good news
                }
            }
            else
            {
                AlertMessage += exist;
            }
        }
        //Adds a parameter as a SharedParemter
        private FamilyParameter AddSharedParameter(ExternalDefinition sharedParameter, ParameterSelectorModel paramToPull)
        {
            FamilyParameter parameter = null;

            // Add the parameter to the family
            try
            {
                using (Transaction ft = new Transaction(doc, "Pull shared parameter"))
                {
                    ft.Start();
                    //Adds a Shared Parameter to the Family
                    parameter = familyManager.AddParameter(sharedParameter, paramToPull.ParameterGroup, paramToPull.IsInstance);
                    ft.Commit();
                }
            }
            catch (Exception) { }
            return(parameter);
        }