elsa-core/src/activities/Elsa.Activities.UserTask/Activities/UserTask.cs

53 lines
1.7 KiB
C#
Raw Normal View History

2019-07-25 16:10:17 +00:00
using System;
using System.Collections.Generic;
2019-07-25 16:10:17 +00:00
using System.Linq;
2020-10-03 10:48:25 +00:00
using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Design;
2020-10-03 10:48:25 +00:00
using Elsa.Serialization;
2019-07-25 16:10:17 +00:00
using Elsa.Services;
using Elsa.Services.Models;
namespace Elsa.Activities.UserTask.Activities
{
/// <summary>
/// Stores a set of possible user actions and halts the workflow until one of the actions has been performed.
/// </summary>
2020-11-14 20:58:48 +00:00
[Trigger(
Category = "User Tasks",
Description = "Triggers when a user action is received.",
Outcomes = new[] { OutcomeNames.Done, "x => x.state.actions" }
)]
2019-07-25 16:10:17 +00:00
public class UserTask : Activity
{
2020-10-19 20:12:11 +00:00
private readonly IContentSerializer _serializer;
2020-10-03 10:48:25 +00:00
[ActivityProperty(
Type = ActivityPropertyTypes.List,
Hint = "Provide a list of available actions"
)]
2020-10-03 10:48:25 +00:00
public ICollection<string> Actions { get; set; } = new List<string>();
2020-10-19 20:12:11 +00:00
public UserTask(IContentSerializer serializer)
2019-07-25 16:10:17 +00:00
{
2020-10-10 15:13:52 +00:00
_serializer = serializer;
2019-07-25 16:10:17 +00:00
}
protected override bool OnCanExecute(ActivityExecutionContext context)
2019-07-25 16:10:17 +00:00
{
var userAction = GetUserAction(context);
return Actions.Contains(userAction, StringComparer.OrdinalIgnoreCase);
}
protected override IActivityExecutionResult OnExecute(ActivityExecutionContext context) => Suspend();
2019-07-25 16:10:17 +00:00
protected override IActivityExecutionResult OnResume(ActivityExecutionContext context)
2019-07-25 16:10:17 +00:00
{
var userAction = GetUserAction(context);
2021-02-11 09:43:09 +00:00
return Outcome(userAction, userAction);
2019-07-25 16:10:17 +00:00
}
private string GetUserAction(ActivityExecutionContext context) => (string)context.Input!;
2019-07-25 16:10:17 +00:00
}
}