本文整理汇总了C#中WorkflowAction.GetWorklowAttributeValue方法的典型用法代码示例。如果您正苦于以下问题:C# WorkflowAction.GetWorklowAttributeValue方法的具体用法?C# WorkflowAction.GetWorklowAttributeValue怎么用?C# WorkflowAction.GetWorklowAttributeValue使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorkflowAction
的用法示例。
在下文中一共展示了WorkflowAction.GetWorklowAttributeValue方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Execute
/// <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 connection request
ConnectionRequest request = null;
Guid connectionRequestGuid = action.GetWorklowAttributeValue( GetAttributeValue( action, "ConnectionRequestAttribute" ).AsGuid() ).AsGuid();
request = new ConnectionRequestService( rockContext ).Get( connectionRequestGuid );
if ( request == null )
{
errorMessages.Add( "Invalid Connection Request Attribute or Value!" );
return false;
}
// Get connection state
ConnectionState? connectionState = null;
Guid? connectionStateAttributeGuid = GetAttributeValue( action, "ConnectionStateAttribute" ).AsGuidOrNull();
if ( connectionStateAttributeGuid.HasValue )
{
connectionState = action.GetWorklowAttributeValue( connectionStateAttributeGuid.Value ).ConvertToEnumOrNull<ConnectionState>();
}
if ( connectionState == null )
{
connectionState = GetAttributeValue( action, "ConnectionState" ).ConvertToEnumOrNull<ConnectionState>();
}
if ( connectionState == null )
{
errorMessages.Add( "Invalid Connection State Attribute or Value!" );
return false;
}
request.ConnectionState = connectionState.Value;
// Get follow up date
if ( connectionState.Value == ConnectionState.FutureFollowUp )
{
DateTime? followupDate = null;
Guid? FollowUpDateAttributeGuid = GetAttributeValue( action, "FollowUpDateAttribute" ).AsGuidOrNull();
if ( FollowUpDateAttributeGuid.HasValue )
{
followupDate = action.GetWorklowAttributeValue( FollowUpDateAttributeGuid.Value ).AsDateTime();
}
if ( followupDate == null )
{
followupDate = GetAttributeValue( action, "FollowUpDate" ).AsDateTime();
}
if ( followupDate == null )
{
errorMessages.Add( "Invalid Follow Up DateAttribute or Value!" );
return false;
}
request.FollowupDate = followupDate.Value;
}
rockContext.SaveChanges();
return true;
}
示例2: Execute
/// <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 connection request
ConnectionRequest request = null;
Guid connectionRequestGuid = action.GetWorklowAttributeValue( GetAttributeValue( action, "ConnectionRequestAttribute" ).AsGuid() ).AsGuid();
var connectionRequestService = new ConnectionRequestService( rockContext );
request = connectionRequestService.Get( connectionRequestGuid );
if ( request == null )
{
errorMessages.Add( "Invalid Connection Request 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 the tranfer note
string note = GetAttributeValue( action, "TransferNote", true );
if ( request != null && opportunity != null )
{
request.ConnectionOpportunityId = opportunity.Id;
var guid = Rock.SystemGuid.ConnectionActivityType.TRANSFERRED.AsGuid();
var transferredActivityId = new ConnectionActivityTypeService( rockContext )
.Queryable()
.Where( t => t.Guid == guid )
.Select( t => t.Id )
.FirstOrDefault();
ConnectionRequestActivity connectionRequestActivity = new ConnectionRequestActivity();
connectionRequestActivity.ConnectionRequestId = request.Id;
connectionRequestActivity.ConnectionOpportunityId = opportunity.Id;
connectionRequestActivity.ConnectionActivityTypeId = transferredActivityId;
connectionRequestActivity.Note = note;
new ConnectionRequestActivityService( rockContext ).Add( connectionRequestActivity );
rockContext.SaveChanges();
}
return true;
}
示例3: Execute
/// <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 connection request
ConnectionRequest request = null;
Guid connectionRequestGuid = action.GetWorklowAttributeValue( GetAttributeValue( action, "ConnectionRequestAttribute" ).AsGuid() ).AsGuid();
request = new ConnectionRequestService( rockContext ).Get( connectionRequestGuid );
if ( request == null )
{
errorMessages.Add( "Invalid Connection Request 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 = request.ConnectionOpportunity.ConnectionType.ConnectionStatuses
.Where( s => s.Guid.Equals( connectionStatusGuid.Value ) )
.FirstOrDefault();
}
}
if ( status == null )
{
connectionStatusGuid = GetAttributeValue( action, "ConnectionStatus" ).AsGuidOrNull();
if ( connectionStatusGuid.HasValue )
{
status = request.ConnectionOpportunity.ConnectionType.ConnectionStatuses
.Where( s => s.Guid.Equals( connectionStatusGuid.Value ) )
.FirstOrDefault();
}
}
if ( status == null )
{
errorMessages.Add( "Invalid Connection Status Attribute or Value!" );
return false;
}
request.ConnectionStatusId = status.Id;
rockContext.SaveChanges();
return true;
}
示例4: Execute
/// <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>();
string nameValue = GetAttributeValue( action, "NameValue" );
Guid guid = nameValue.AsGuid();
if (guid.IsEmpty())
{
nameValue = nameValue.ResolveMergeFields( GetMergeFields( action ) );
}
else
{
nameValue = action.GetWorklowAttributeValue( guid, true, true );
// HtmlDecode the name since we are storing it in the database and it might be formatted to be shown in HTML
nameValue = System.Web.HttpUtility.HtmlDecode( nameValue );
}
if ( !string.IsNullOrWhiteSpace( nameValue ) )
{
action.Activity.Workflow.Name = nameValue;
action.AddLogEntry( string.Format( "Set Workflow Name to '{0}'", nameValue ) );
}
return true;
}
示例5: Execute
/// <summary>
/// Executes the specified workflow action.
/// </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 attribute's guid
Guid guid = GetAttributeValue( action, "PersonAttribute" ).AsGuid();
if ( !guid.IsEmpty() )
{
// Get the attribute
var attribute = AttributeCache.Read( guid, rockContext );
if ( attribute != null )
{
if ( attribute.FieldTypeId == FieldTypeCache.Read( SystemGuid.FieldType.PERSON.AsGuid(), rockContext ).Id )
{
// If attribute type is a person, value should be person alias id
Guid? personAliasGuid = action.GetWorklowAttributeValue( guid ).AsGuidOrNull();
if ( personAliasGuid.HasValue )
{
var personAlias = new PersonAliasService( rockContext ).Queryable( "Person" )
.Where( a => a.Guid.Equals( personAliasGuid.Value ) )
.FirstOrDefault();
if ( personAlias != null )
{
action.Activity.Workflow.InitiatorPersonAlias = personAlias;
action.Activity.Workflow.InitiatorPersonAliasId = personAlias.Id;
action.AddLogEntry( string.Format( "Assigned initiator to '{0}' ({1})", personAlias.Person.FullName, personAlias.Person.Id ) );
return true;
}
}
}
}
}
return false;
}
示例6: Execute
public override bool Execute(RockContext rockContext, WorkflowAction action, Object entity, out List<string> errorMessages)
{
errorMessages = new List<string>();
Guid workflowAttributeGuid = GetAttributeValue(action, "Entity").AsGuid();
Guid entityGuid = action.GetWorklowAttributeValue(workflowAttributeGuid).AsGuid();
if (!entityGuid.IsEmpty())
{
IEntity entityObject = null;
EntityTypeCache cachedEntityType = EntityTypeCache.Read(GetAttributeValue(action, "EntityType").AsGuid());
if (cachedEntityType != null)
{
Type entityType = cachedEntityType.GetEntityType();
entityObject = rockContext.Set<IEntity>().AsQueryable().Where(e => e.Guid == entityGuid).FirstOrDefault();
}
else {
var field = AttributeCache.Read(workflowAttributeGuid).FieldType.Field;
entityObject = ((Rock.Field.IEntityFieldType)field).GetEntity(entityGuid.ToString(), rockContext);
}
var propertyValues = GetAttributeValue(action, "EntityProperties").Replace(" ! ", " | ").ResolveMergeFields(GetMergeFields(action)).TrimEnd('|').Split('|').Select(p => p.Split('^')).Select(p => new { Name = p[0], Value = p[1] });
foreach (var prop in propertyValues)
{
PropertyInfo propInf = entityObject.GetType().GetProperty(prop.Name, BindingFlags.Public | BindingFlags.Instance);
if (null != propInf && propInf.CanWrite)
{
if (!(GetAttributeValue(action, "EmptyValueHandling") == "IGNORE" && String.IsNullOrWhiteSpace(prop.Value)))
{
try
{
propInf.SetValue(entityObject, ObjectConverter.ConvertObject(prop.Value, propInf.PropertyType, GetAttributeValue(action, "EmptyValueHandling") == "NULL"), null);
}
catch (Exception ex) when (ex is InvalidCastException || ex is FormatException || ex is OverflowException)
{
errorMessages.Add("Invalid Property Value: " + prop.Name + ": " + ex.Message);
}
}
}
else
{
errorMessages.Add("Invalid Property: " + prop.Name);
}
}
rockContext.SaveChanges();
return true;
}
else {
errorMessages.Add("Invalid Entity Attribute");
}
return false;
}
示例7: Execute
/// <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 guid = GetAttributeValue( action, "Attribute" ).AsGuid();
if (!guid.IsEmpty())
{
var attribute = AttributeCache.Read( guid, rockContext );
if ( attribute != null )
{
string existingValue = action.GetWorklowAttributeValue( guid );
string value = GetAttributeValue( action, "Value" );
string separator;
if (String.IsNullOrEmpty( existingValue ))
{
separator = "";
}
else
{
separator = GetAttributeValue( action, "Separator" );
}
var mergeFields = GetMergeFields( action );
value = value.ResolveMergeFields( mergeFields );
string valueAction;
string newValue;
if (GetAttributeValue(action,"Prepend").AsBoolean())
{
valueAction = "Prepended";
newValue = string.Format("{1}{2}{0}", existingValue, value, separator);
} else {
valueAction = "Appended";
newValue = string.Format("{0}{2}{1}", existingValue, value, separator);
}
if ( attribute.EntityTypeId == new Rock.Model.Workflow().TypeId )
{
action.Activity.Workflow.SetAttributeValue( attribute.Key, newValue );
action.AddLogEntry( string.Format( "{2} '{0}' attribute to '{1}'.", attribute.Name, newValue, valueAction ) );
}
else if ( attribute.EntityTypeId == new Rock.Model.WorkflowActivity().TypeId )
{
action.Activity.SetAttributeValue( attribute.Key, newValue );
action.AddLogEntry( string.Format( "{2} '{0}' attribute to '{1}'.", attribute.Name, newValue, valueAction ) );
}
}
}
return true;
}
示例8: Execute
/// <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>();
var workflowActivityGuid = action.GetWorklowAttributeValue( GetAttributeValue( action, "Activity" ).AsGuid() ).AsGuid();
if ( workflowActivityGuid.IsEmpty() )
{
action.AddLogEntry( "Invalid Activity Property", true );
return false;
}
var attributeKey = GetAttributeValue( action, "WorkflowAttributeKey", true );
var attributeValue = GetAttributeValue( action, "WorkflowAttributeValue", true );
if ( string.IsNullOrWhiteSpace( attributeKey) || string.IsNullOrWhiteSpace(attributeValue) )
{
action.AddLogEntry( "Invalid Workflow Property", true );
return false;
}
var activityType = new WorkflowActivityTypeService( rockContext ).Queryable()
.Where( a => a.Guid.Equals( workflowActivityGuid ) ).FirstOrDefault();
if ( activityType == null )
{
action.AddLogEntry( "Invalid Activity Property", true );
return false;
}
var entityType = EntityTypeCache.Read( typeof( Rock.Model.Workflow ) );
var workflowIds = new AttributeValueService( rockContext )
.Queryable()
.AsNoTracking()
.Where( a => a.Attribute.Key == attributeKey && a.Value == attributeValue && a.Attribute.EntityTypeId == entityType.Id )
.Select(a => a.EntityId);
var workflows = new WorkflowService( rockContext )
.Queryable()
//.AsNoTracking()
.Where( w => w.WorkflowType.ActivityTypes.Any( a => a.Guid == activityType.Guid ) && workflowIds.Contains(w.Id) )
.ToList();
foreach (var workflow in workflows )
{
WorkflowActivity.Activate( activityType, workflow );
action.AddLogEntry( string.Format( "Activated new '{0}' activity in {1} {2}", activityType.ToString(), workflow.TypeName, workflow.WorkflowId ) );
}
return true;
}
示例9: Execute
/// <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>();
var groupAttribute = GetAttributeValue( action, "GroupAttribute" );
Guid groupAttrGuid = groupAttribute.AsGuid();
if (!groupAttrGuid.IsEmpty())
{
string attributeGroupValue = action.GetWorklowAttributeValue( groupAttrGuid );
Guid groupGuid = attributeGroupValue.AsGuid();
var groupRoleAttr = GetAttributeValue( action, "Group Role" );
Guid groupRoleGuid = groupRoleAttr.AsGuid();
if (!groupRoleGuid.IsEmpty())
{
var groupM = (new GroupService( rockContext )).Get( groupGuid );
if (groupM != null)
{
var groupRole = (new GroupTypeRoleService( rockContext )).Get( groupRoleGuid );
var person = (from m in groupM.Members
where m.GroupRoleId == groupRole.Id
select m.Person).FirstOrDefault();
if (person != null)
{
action.Activity.AssignedPersonAlias = person.PrimaryAlias;
action.Activity.AssignedPersonAliasId = person.PrimaryAliasId;
action.Activity.AssignedGroup = null;
action.Activity.AssignedGroupId = null;
action.AddLogEntry( string.Format( "Assigned activity to '{0}' ({1})", person.FullName, person.Id ) );
return true;
}
else
{
action.AddLogEntry( string.Format( "Nobody assigned to Role ({0}) for Group ({1})", groupRole.Name, groupM.Name ) );
}
}
}
}
errorMessages.Add( "An assignment to person could not be completed." );
return false;
}
示例10: Execute
/// <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 guid = GetAttributeValue( action, "Attribute" ).AsGuid();
if (!guid.IsEmpty())
{
var attribute = AttributeCache.Read( guid, rockContext );
if ( attribute != null )
{
string value = GetAttributeValue( action, "Value" );
guid = value.AsGuid();
if ( guid.IsEmpty() )
{
value = value.ResolveMergeFields( GetMergeFields( action ) );
}
else
{
var attributeValue = action.GetWorklowAttributeValue( guid );
if ( attributeValue != null )
{
value = attributeValue;
}
}
if ( attribute.EntityTypeId == new Rock.Model.Workflow().TypeId )
{
action.Activity.Workflow.SetAttributeValue( attribute.Key, value );
action.AddLogEntry( string.Format( "Set '{0}' attribute to '{1}'.", attribute.Name, value ) );
}
else if ( attribute.EntityTypeId == new Rock.Model.WorkflowActivity().TypeId )
{
action.Activity.SetAttributeValue( attribute.Key, value );
action.AddLogEntry( string.Format( "Set '{0}' attribute to '{1}'.", attribute.Name, value ) );
}
}
}
return true;
}
示例11: Execute
/// <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>();
string nameValue = GetAttributeValue( action, "NameValue" );
Guid guid = nameValue.AsGuid();
if (guid.IsEmpty())
{
nameValue = nameValue.ResolveMergeFields( GetMergeFields( action ) );
}
else
{
nameValue = action.GetWorklowAttributeValue( guid, true, true );
}
if ( !string.IsNullOrWhiteSpace( nameValue ) )
{
action.Activity.Workflow.Name = nameValue;
action.AddLogEntry( string.Format( "Set Workflow Name to '{0}'", nameValue ) );
}
return true;
}
示例12: Execute
/// <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>();
string updateValue = GetAttributeValue( action, "Value" );
Guid? valueGuid = updateValue.AsGuidOrNull();
if ( valueGuid.HasValue )
{
updateValue = action.GetWorklowAttributeValue( valueGuid.Value );
}
else
{
updateValue = updateValue.ResolveMergeFields( GetMergeFields( action ) );
}
string personAttribute = GetAttributeValue( action, "PersonAttribute" );
Guid guid = personAttribute.AsGuid();
if (!guid.IsEmpty())
{
var attribute = AttributeCache.Read( guid, rockContext );
if ( attribute != null )
{
string value = GetAttributeValue( action, "Person" );
guid = value.AsGuid();
if ( !guid.IsEmpty() )
{
var attributePerson = AttributeCache.Read( guid, rockContext );
if ( attributePerson != null )
{
string attributePersonValue = action.GetWorklowAttributeValue( guid );
if ( !string.IsNullOrWhiteSpace( attributePersonValue ) )
{
if ( attributePerson.FieldType.Class == "Rock.Field.Types.PersonFieldType" )
{
Guid personAliasGuid = attributePersonValue.AsGuid();
if ( !personAliasGuid.IsEmpty() )
{
var person = new PersonAliasService( rockContext ).Queryable()
.Where( a => a.Guid.Equals( personAliasGuid ) )
.Select( a => a.Person )
.FirstOrDefault();
if ( person != null )
{
// update person attribute
Rock.Attribute.Helper.SaveAttributeValue( person, attribute, updateValue, rockContext );
action.AddLogEntry( string.Format( "Set '{0}' attribute to '{1}'.", attribute.Name, person.FullName ) );
return true;
}
else
{
errorMessages.Add( string.Format( "Person could not be found for selected value ('{0}')!", guid.ToString() ) );
}
}
}
else
{
errorMessages.Add( "The attribute used to provide the person was not of type 'Person'." );
}
}
}
}
}
else
{
errorMessages.Add( string.Format( "Person attribute could not be found for '{0}'!", guid.ToString() ) );
}
}
else
{
errorMessages.Add( string.Format( "Selected person attribute ('{0}') was not a valid Guid!", personAttribute ) );
}
errorMessages.ForEach( m => action.AddLogEntry( m, true ) );
return true;
}
示例13: Execute
/// <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 tag
string tagName = GetAttributeValue( action, "OrganizationTag" ).ResolveMergeFields( GetMergeFields( action ) ); ;
if (!string.IsNullOrEmpty(tagName)) {
// get person entity type
var personEntityType = Rock.Web.Cache.EntityTypeCache.Read("Rock.Model.Person");
// get tag
TagService tagService = new TagService( rockContext );
Tag orgTag = tagService.Queryable().Where( t => t.Name == tagName && t.EntityTypeId == personEntityType.Id && t.OwnerPersonAlias == null ).FirstOrDefault();
if ( orgTag != null )
{
// get person
string value = GetAttributeValue( action, "Person" );
Guid guidPersonAttribute = value.AsGuid();
if ( !guidPersonAttribute.IsEmpty() )
{
var attributePerson = AttributeCache.Read( guidPersonAttribute, rockContext );
if ( attributePerson != null )
{
string attributePersonValue = action.GetWorklowAttributeValue( guidPersonAttribute );
if ( !string.IsNullOrWhiteSpace( attributePersonValue ) )
{
if ( attributePerson.FieldType.Class == "Rock.Field.Types.PersonFieldType" )
{
Guid personAliasGuid = attributePersonValue.AsGuid();
if ( !personAliasGuid.IsEmpty() )
{
var person = new PersonAliasService( rockContext ).Queryable()
.Where( a => a.Guid.Equals( personAliasGuid ) )
.Select( a => a.Person )
.FirstOrDefault();
if ( person != null )
{
var personAliasGuids = person.Aliases.Select( a => a.AliasPersonGuid ).ToList();
TaggedItemService tiService = new TaggedItemService( rockContext );
TaggedItem personTag = tiService.Queryable().Where( t => t.TagId == orgTag.Id && personAliasGuids.Contains( t.EntityGuid ) ).FirstOrDefault();
if ( personTag != null )
{
tiService.Delete( personTag );
rockContext.SaveChanges();
}
else
{
action.AddLogEntry( string.Format( "{0} was not in the {1} tag.", person.FullName, orgTag.Name ) );
}
}
else
{
errorMessages.Add( string.Format( "Person could not be found for selected value ('{0}')!", guidPersonAttribute.ToString() ) );
}
}
}
}
}
}
}
else
{
action.AddLogEntry( string.Format( "{0} organization tag does not exist.", orgTag.Name ) );
}
} else {
errorMessages.Add("No organization tag was provided");
}
errorMessages.ForEach( m => action.AddLogEntry( m, true ) );
return true;
}
示例14: Execute
/// <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>();
int? fromId = null;
Guid? fromGuid = GetAttributeValue( action, "From" ).AsGuidOrNull();
if (fromGuid.HasValue)
{
var fromValue = DefinedValueCache.Read(fromGuid.Value, rockContext);
if (fromValue != null)
{
fromId = fromValue.Id;
}
}
var recipients = new List<string>();
string toValue = GetAttributeValue( action, "To" );
Guid guid = toValue.AsGuid();
if ( !guid.IsEmpty() )
{
var attribute = AttributeCache.Read( guid, rockContext );
if ( attribute != null )
{
string toAttributeValue = action.GetWorklowAttributeValue( guid );
if ( !string.IsNullOrWhiteSpace( toAttributeValue ) )
{
switch ( attribute.FieldType.Class )
{
case "Rock.Field.Types.TextFieldType":
{
recipients.Add( toAttributeValue );
break;
}
case "Rock.Field.Types.PersonFieldType":
{
Guid personAliasGuid = toAttributeValue.AsGuid();
if ( !personAliasGuid.IsEmpty() )
{
var phoneNumber = new PersonAliasService( rockContext ).Queryable()
.Where( a => a.Guid.Equals( personAliasGuid ) )
.SelectMany( a => a.Person.PhoneNumbers )
.Where( p => p.IsMessagingEnabled)
.FirstOrDefault();
if ( phoneNumber == null )
{
action.AddLogEntry("Invalid Recipient: Person or valid SMS phone number not found", true );
}
else
{
string smsNumber = phoneNumber.Number;
if ( !string.IsNullOrWhiteSpace( phoneNumber.CountryCode ) )
{
smsNumber = "+" + phoneNumber.CountryCode + phoneNumber.Number;
}
recipients.Add( smsNumber );
}
}
break;
}
case "Rock.Field.Types.GroupFieldType":
{
int? groupId = toValue.AsIntegerOrNull();
if ( !groupId.HasValue )
{
foreach ( var person in new GroupMemberService( rockContext )
.GetByGroupId( groupId.Value )
.Where( m => m.GroupMemberStatus == GroupMemberStatus.Active )
.Select( m => m.Person ) )
{
var phoneNumber = person.PhoneNumbers
.Where( p => p.IsMessagingEnabled )
.FirstOrDefault();
if ( phoneNumber != null )
{
string smsNumber = phoneNumber.Number;
if ( !string.IsNullOrWhiteSpace( phoneNumber.CountryCode ) )
{
smsNumber = "+" + phoneNumber.CountryCode + phoneNumber.Number;
}
recipients.Add( smsNumber );
}
}
}
break;
}
}
}
}
}
else
//.........这里部分代码省略.........
示例15: Execute
/// <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>();
var mergeFields = GetMergeFields( action );
var recipients = new List<RecipientData>();
string to = GetAttributeValue( action, "Recipient" );
Guid? guid = to.AsGuidOrNull();
if ( guid.HasValue )
{
var attribute = AttributeCache.Read( guid.Value, rockContext );
if ( attribute != null )
{
string toValue = action.GetWorklowAttributeValue( guid.Value );
if ( !string.IsNullOrWhiteSpace( toValue ) )
{
switch ( attribute.FieldType.Class )
{
case "Rock.Field.Types.TextFieldType":
case "Rock.Field.Types.EmailFieldType":
{
var recipientList = toValue.SplitDelimitedValues().ToList();
foreach ( string recipient in recipientList )
{
recipients.Add( new RecipientData( recipient, mergeFields ) );
}
break;
}
case "Rock.Field.Types.PersonFieldType":
{
Guid personAliasGuid = toValue.AsGuid();
if ( !personAliasGuid.IsEmpty() )
{
var person = new PersonAliasService( rockContext ).Queryable()
.Where( a => a.Guid.Equals( personAliasGuid ) )
.Select( a => a.Person )
.FirstOrDefault();
if ( person == null )
{
action.AddLogEntry( "Invalid Recipient: Person not found", true );
}
else if ( string.IsNullOrWhiteSpace( person.Email ) )
{
action.AddLogEntry( "Email was not sent: Recipient does not have an email address", true );
}
else if ( !( person.IsEmailActive ) )
{
action.AddLogEntry( "Email was not sent: Recipient email is not active", true );
}
else if ( person.EmailPreference == EmailPreference.DoNotEmail )
{
action.AddLogEntry( "Email was not sent: Recipient has requested 'Do Not Email'", true );
}
else
{
var personDict = new Dictionary<string, object>( mergeFields );
personDict.Add( "Person", person );
recipients.Add( new RecipientData( person.Email, personDict ) );
}
}
break;
}
case "Rock.Field.Types.GroupFieldType":
case "Rock.Field.Types.SecurityRoleFieldType":
{
int? groupId = toValue.AsIntegerOrNull();
Guid? groupGuid = toValue.AsGuidOrNull();
IQueryable<GroupMember> qry = null;
// Handle situations where the attribute value is the ID
if ( groupId.HasValue )
{
qry = new GroupMemberService( rockContext ).GetByGroupId( groupId.Value );
}
// Handle situations where the attribute value stored is the Guid
else if ( groupGuid.HasValue )
{
qry = new GroupMemberService( rockContext ).GetByGroupGuid( groupGuid.Value );
}
else
{
action.AddLogEntry( "Invalid Recipient: No valid group id or Guid", true );
}
if ( qry != null )
{
foreach ( var person in qry
.Where( m => m.GroupMemberStatus == GroupMemberStatus.Active )
.Select( m => m.Person ) )
//.........这里部分代码省略.........