public override bool Execute( RockContext rockContext, WorkflowAction action, Object entity, out List<string> errorMessages ) { errorMessages = new List<string>(); // Get person Person person = null; int personAliasId = 1; string personAttributeValue = GetAttributeValue(action, "Person"); Guid? guidPersonAttribute = personAttributeValue.AsGuidOrNull(); if (guidPersonAttribute.HasValue) { var attributePerson = AttributeCache.Read(guidPersonAttribute.Value, rockContext); if (attributePerson != null || attributePerson.FieldType.Class != "Rock.Field.Types.PersonFieldType") { string attributePersonValue = action.GetWorklowAttributeValue(guidPersonAttribute.Value); if (!string.IsNullOrWhiteSpace(attributePersonValue)) { Guid personAliasGuid = attributePersonValue.AsGuid(); if (!personAliasGuid.IsEmpty()) { person = new PersonAliasService(rockContext).Queryable() .Where(a => a.Guid.Equals(personAliasGuid)) .Select(a => a.Person) .FirstOrDefault(); if (person == null) { errorMessages.Add(string.Format("Person could not be found for selected value ('{0}')!", guidPersonAttribute.ToString())); return false; } } } } } if (person == null) { errorMessages.Add("The attribute used to provide the person was invalid, or not of type 'Person'."); return false; } if (person != null) { PersonAliasService personAliasService = new PersonAliasService(rockContext); personAliasId = person.PrimaryAliasId ?? default(int); } //Get DateTime DateTime currentDateTime = DateTime.Now; //Get Stars Value DefinedValueService definedValueService = new DefinedValueService(rockContext); var type = GetAttributeValue(action, "Type"); Guid typeGuid = type.AsGuid(); var definedValue = definedValueService.GetByGuid(typeGuid); definedValue.LoadAttributes(); var value = definedValue.GetAttributeValue("StarValue"); var starsValue = Convert.ToDecimal(value); //Save Stars SaveStars(currentDateTime, personAliasId, starsValue, definedValue.Value); return true; }