/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute( RockContext rockContext, WorkflowAction action, Object entity, out List<string> errorMessages ) { errorMessages = new List<string>(); Guid? groupGuid = null; string attributeValue = string.Empty; string attributeKey = string.Empty; // get the group attribute Guid groupAttributeGuid = GetAttributeValue( action, "Group" ).AsGuid(); if ( !groupAttributeGuid.IsEmpty() ) { groupGuid = action.GetWorklowAttributeValue( groupAttributeGuid ).AsGuidOrNull(); if ( !groupGuid.HasValue ) { errorMessages.Add( "The group could not be found!" ); } } // get group attribute value attributeValue = GetAttributeValue( action, "AttributeValue" ); Guid guid = attributeValue.AsGuid(); if ( guid.IsEmpty() ) { attributeValue = attributeValue.ResolveMergeFields( GetMergeFields( action ) ); } else { var workflowAttributeValue = action.GetWorklowAttributeValue( guid ); if ( workflowAttributeValue != null ) { attributeValue = workflowAttributeValue; } } // get attribute key attributeKey = GetAttributeValue( action, "GroupAttributeKey" ).Replace( " ", "" ); // set attribute if ( groupGuid.HasValue ) { var qry = new GroupService( rockContext ).Queryable() .Where( m => m.Guid == groupGuid ); foreach ( var group in qry.ToList() ) { group.LoadAttributes( rockContext ); if ( group.Attributes.ContainsKey( attributeKey ) ) { var attribute = group.Attributes[attributeKey]; Rock.Attribute.Helper.SaveAttributeValue( group, attribute, attributeValue, rockContext ); } else { action.AddLogEntry( string.Format( "The group attribute {0} does not exist!", attributeKey ) ); break; } } } errorMessages.ForEach( m => action.AddLogEntry( m, true ) ); return true; }