/// <summary> /// Reads new values entered by the user for the field (as PersonAlias.Guid) /// </summary> /// <param name="control">Parent control that controls were added to in the CreateEditControl() method</param> /// <param name="configurationValues">The configuration values.</param> /// <returns></returns> public override string GetEditValue( System.Web.UI.Control control, Dictionary<string, ConfigurationValue> configurationValues ) { PersonPicker ppPerson = control as PersonPicker; string result = null; if ( ppPerson != null ) { Guid personGuid = Guid.Empty; int? personId = ppPerson.PersonId; if ( personId.HasValue ) { var rockContext = new RockContext(); var personAliasService = new PersonAliasService( rockContext ); var personAlias = personAliasService.Queryable() .Where( a => a.AliasPersonId == personId ) .FirstOrDefault(); if ( personAlias != null ) { result = personAlias.Guid.ToString(); } else { // If the personId is valid, there should be a personAlias with the AliasPersonID equal // to that personId. If there isn't for some reason, create it now... var person = new PersonService( rockContext ).Get( personId.Value ); if ( person != null ) { personAlias = new PersonAlias(); personAlias.Guid = Guid.NewGuid(); personAlias.AliasPersonId = person.Id; personAlias.AliasPersonGuid = person.Guid; personAlias.PersonId = person.Id; result = personAlias.Guid.ToString(); personAliasService.Add( personAlias ); rockContext.SaveChanges(); } } } } return result; }