/// <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>(); // Get the person PersonAlias personAlias = null; Guid personAliasGuid = action.GetWorkflowAttributeValue(GetAttributeValue(action, "PersonAttribute").AsGuid()).AsGuid(); personAlias = new PersonAliasService(rockContext).Get(personAliasGuid); if (personAlias == null) { errorMessages.Add("Invalid Person Attribute or Value!"); return(false); } // Get the opportunity ConnectionOpportunity opportunity = null; Guid opportunityTypeGuid = action.GetWorkflowAttributeValue(GetAttributeValue(action, "ConnectionOpportunityAttribute").AsGuid()).AsGuid(); opportunity = new ConnectionOpportunityService(rockContext).Get(opportunityTypeGuid); if (opportunity == null) { errorMessages.Add("Invalid Connection Opportunity Attribute or Value!"); return(false); } // Get connection status ConnectionStatus status = null; Guid? connectionStatusGuid = null; Guid? connectionStatusAttributeGuid = GetAttributeValue(action, "ConnectionStatusAttribute").AsGuidOrNull(); if (connectionStatusAttributeGuid.HasValue) { connectionStatusGuid = action.GetWorkflowAttributeValue(connectionStatusAttributeGuid.Value).AsGuidOrNull(); if (connectionStatusGuid.HasValue) { status = opportunity.ConnectionType.ConnectionStatuses .Where(s => s.Guid.Equals(connectionStatusGuid.Value)) .FirstOrDefault(); } } if (status == null) { connectionStatusGuid = GetAttributeValue(action, "ConnectionStatus").AsGuidOrNull(); if (connectionStatusGuid.HasValue) { status = opportunity.ConnectionType.ConnectionStatuses .Where(s => s.Guid.Equals(connectionStatusGuid.Value)) .FirstOrDefault(); } } if (status == null) { status = opportunity.ConnectionType.ConnectionStatuses .Where(s => s.IsDefault) .FirstOrDefault(); } // Get Campus int? campusId = null; Guid?campusAttributeGuid = GetAttributeValue(action, "CampusAttribute").AsGuidOrNull(); if (campusAttributeGuid.HasValue) { Guid?campusGuid = action.GetWorkflowAttributeValue(campusAttributeGuid.Value).AsGuidOrNull(); if (campusGuid.HasValue) { var campus = CampusCache.Get(campusGuid.Value); if (campus != null) { campusId = campus.Id; } } } // Get the Comment String comment = action.GetWorkflowAttributeValue(GetAttributeValue(action, "ConnectionCommentAttribute").AsGuid()); var connectionRequestService = new ConnectionRequestService(rockContext); var connectionRequest = new ConnectionRequest(); connectionRequest.PersonAliasId = personAlias.Id; connectionRequest.ConnectionOpportunityId = opportunity.Id; connectionRequest.ConnectionState = ConnectionState.Active; connectionRequest.ConnectionStatusId = status.Id; connectionRequest.CampusId = campusId; connectionRequest.ConnectorPersonAliasId = opportunity.GetDefaultConnectorPersonAliasId(campusId); connectionRequest.Comments = comment; connectionRequestService.Add(connectionRequest); rockContext.SaveChanges(); // If request attribute was specified, requery the request and set the attribute's value Guid?connectionRequestAttributeGuid = GetAttributeValue(action, "ConnectionRequestAttribute").AsGuidOrNull(); if (connectionRequestAttributeGuid.HasValue) { connectionRequest = connectionRequestService.Get(connectionRequest.Id); if (connectionRequest != null) { SetWorkflowAttributeValue(action, connectionRequestAttributeGuid.Value, connectionRequest.Guid.ToString()); } } return(true); }
/// <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>(); // Get the person PersonAlias personAlias = null; Guid personAliasGuid = action.GetWorklowAttributeValue(GetAttributeValue( action, "PersonAttribute" ).AsGuid()).AsGuid(); personAlias = new PersonAliasService( rockContext ).Get( personAliasGuid ); if ( personAlias == null ) { errorMessages.Add( "Invalid Person Attribute or Value!" ); return false; } // Get the opportunity ConnectionOpportunity opportunity = null; Guid opportunityTypeGuid = action.GetWorklowAttributeValue( GetAttributeValue( action, "ConnectionOpportunityAttribute" ).AsGuid() ).AsGuid(); opportunity = new ConnectionOpportunityService( rockContext ).Get( opportunityTypeGuid ); if ( opportunity == null ) { errorMessages.Add( "Invalid Connection Opportunity Attribute or Value!" ); return false; } // Get connection status ConnectionStatus status = null; Guid? connectionStatusGuid = null; Guid? connectionStatusAttributeGuid = GetAttributeValue( action, "ConnectionStatusAttribute" ).AsGuidOrNull(); if ( connectionStatusAttributeGuid.HasValue ) { connectionStatusGuid = action.GetWorklowAttributeValue( connectionStatusAttributeGuid.Value ).AsGuidOrNull(); if ( connectionStatusGuid.HasValue ) { status = opportunity.ConnectionType.ConnectionStatuses .Where( s => s.Guid.Equals( connectionStatusGuid.Value ) ) .FirstOrDefault(); } } if ( status == null ) { connectionStatusGuid = GetAttributeValue( action, "ConnectionStatus" ).AsGuidOrNull(); if ( connectionStatusGuid.HasValue ) { status = opportunity.ConnectionType.ConnectionStatuses .Where( s => s.Guid.Equals( connectionStatusGuid.Value ) ) .FirstOrDefault(); } } if ( status == null ) { status = opportunity.ConnectionType.ConnectionStatuses .Where( s => s.IsDefault ) .FirstOrDefault(); } // Get Campus int? campusId = null; Guid? campusAttributeGuid = GetAttributeValue( action, "CampusAttribute" ).AsGuidOrNull(); if ( campusAttributeGuid.HasValue ) { Guid? campusGuid = action.GetWorklowAttributeValue( campusAttributeGuid.Value ).AsGuidOrNull(); if ( campusGuid.HasValue ) { var campus = CampusCache.Read( campusGuid.Value ); if ( campus != null ) { campusId = campus.Id; } } } // Get the Comment String comment = action.GetWorklowAttributeValue(GetAttributeValue(action, "ConnectionCommentAttribute").AsGuid()); var connectionRequestService = new ConnectionRequestService( rockContext ); var connectionRequest = new ConnectionRequest(); connectionRequest.PersonAliasId = personAlias.Id; connectionRequest.ConnectionOpportunityId = opportunity.Id; connectionRequest.ConnectionState = ConnectionState.Active; connectionRequest.ConnectionStatusId = status.Id; connectionRequest.CampusId = campusId; connectionRequest.ConnectorPersonAliasId = opportunity.GetDefaultConnectorPersonAliasId( campusId ); connectionRequest.Comments = comment; connectionRequestService.Add( connectionRequest ); rockContext.SaveChanges(); // If request attribute was specified, requery the request and set the attribute's value Guid? connectionRequestAttributeGuid = GetAttributeValue( action, "ConnectionRequestAttribute" ).AsGuidOrNull(); if ( connectionRequestAttributeGuid.HasValue ) { connectionRequest = connectionRequestService.Get( connectionRequest.Id ); if ( connectionRequest != null ) { SetWorkflowAttributeValue( action, connectionRequestAttributeGuid.Value, connectionRequest.Guid.ToString() ); } } return true; }