Implemented SetVariable activity (#26)

This commit is contained in:
Sipke Schoorstra 2019-02-17 15:28:23 +01:00 committed by GitHub
parent b90ef01e7c
commit ffe071ca55
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 61 additions and 11 deletions

View file

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@ -16,13 +17,16 @@ namespace Elsa.Activities.Http.Drivers
{
private readonly IHttpContextAccessor httpContextAccessor;
private readonly IWorkflowExpressionEvaluator expressionEvaluator;
private readonly IEnumerable<IContentFormatter> contentFormatters;
public HttpRequestTriggerDriver(
IHttpContextAccessor httpContextAccessor,
IWorkflowExpressionEvaluator expressionEvaluator)
IWorkflowExpressionEvaluator expressionEvaluator,
IEnumerable<IContentFormatter> contentFormatters)
{
this.httpContextAccessor = httpContextAccessor;
this.expressionEvaluator = expressionEvaluator;
this.contentFormatters = contentFormatters;
}
protected override ActivityExecutionResult OnExecute(HttpRequestTrigger activity, WorkflowExecutionContext workflowContext)
@ -47,15 +51,22 @@ namespace Elsa.Activities.Http.Drivers
{
model.Form = (await request.ReadFormAsync(cancellationToken)).ToDictionary(x => x.Key, x => x.Value);
}
else
{
model.Content = await request.ReadBodyAsync();
}
var formatter = SelectContentFormatter(request.ContentType);
var content = await request.ReadBodyAsync();
model.Content = content;
model.FormattedContent = await formatter.FormatAsync(content, request.ContentType);
}
workflowContext.CurrentScope.LastResult = model;
return Endpoint("Done");
}
private IContentFormatter SelectContentFormatter(string contentType)
{
var formatters = contentFormatters.OrderByDescending(x => x.Priority).ToList();
return formatters.FirstOrDefault(x => x.SupportedContentTypes.Contains(contentType, StringComparer.OrdinalIgnoreCase)) ?? formatters.Last();
}
}
}

View file

@ -11,6 +11,7 @@ namespace Elsa.Activities.Http.Models
public IDictionary<string, StringValues> QueryString { get; set; }
public IDictionary<string, StringValues> Headers { get; set; }
public string Content { get; set; }
public object FormattedContent { get; set; }
public IDictionary<string, StringValues> Form { get; set; }
}
}

View file

@ -19,8 +19,8 @@ namespace Elsa.Activities.Primitives.Drivers
protected override async Task<ActivityExecutionResult> OnExecuteAsync(SetVariable activity, WorkflowExecutionContext workflowContext, CancellationToken cancellationToken)
{
//var value = await expressionEvaluator.EvaluateAsync(activity.ValueExpression, workflowContext, cancellationToken);
//workflowContext.CurrentScope.SetVariable(activity.VariableName, value);
var value = await expressionEvaluator.EvaluateAsync(activity.ValueExpression, workflowContext, cancellationToken);
workflowContext.CurrentScope.SetVariable(activity.VariableName, value);
return Endpoint("Done");
}
}

View file

@ -1,9 +1,22 @@
using Elsa.Activities.Primitives.Activities;
using Elsa.Web.Activities.Primitives.ViewModels;
using Elsa.Web.Components.ViewModels;
using Elsa.Web.Drivers;
namespace Elsa.Web.Activities.Primitives.Drivers
{
public class SetVariableDisplay : ActivityDisplayDriver<SetVariable>
public class SetVariableDisplay : ActivityDisplayDriver<SetVariable, SetVariableViewModel>
{
protected override void EditActivity(SetVariable activity, SetVariableViewModel model)
{
model.VariableName = activity.VariableName;
model.ValueExpression = new ExpressionViewModel(activity.ValueExpression);
}
protected override void UpdateActivity(SetVariableViewModel model, SetVariable activity)
{
activity.VariableName = model.VariableName;
activity.ValueExpression = model.ValueExpression.ToWorkflowExpression<object>();
}
}
}

View file

@ -0,0 +1,12 @@
using System.ComponentModel.DataAnnotations;
using Elsa.Web.Components.ViewModels;
namespace Elsa.Web.Activities.Primitives.ViewModels
{
public class SetVariableViewModel
{
[Required]
public string VariableName { get; set; }
public ExpressionViewModel ValueExpression { get; set; }
}
}

View file

@ -1,6 +1,6 @@
@model Elsa.Web.ViewModels.ActivityShapeModel<Elsa.Activities.Primitives.Activities.SetVariable>
@model ActivityShapeModel<SetVariable>
@{
var activityDescriptor = Model.Activity.Descriptor;
}
<h4 class="card-title"><i class="fa fa-gem"></i>@activityDescriptor.DisplayText</h4>
<h4 class="card-title"><i class="fa fa-pencil"></i>@activityDescriptor.DisplayText</h4>
<p>@activityDescriptor.Description</p>

View file

@ -1,4 +1,4 @@
@model Elsa.Web.ViewModels.ActivityShapeModel<Elsa.Activities.Primitives.Activities.SetVariable>
@model ActivityShapeModel<SetVariable>
<header>
<h4><i class="fa fa-pencil"></i>@Model.DisplayText</h4>

View file

@ -0,0 +1,13 @@
@model SetVariableViewModel
<div class="form-group">
<label asp-for="VariableName">@T["Variable Name"]</label>
<input asp-for="VariableName" class="form-control"/>
<span asp-validation-for="VariableName" class="text-danger"></span>
<small class="form-text text-muted">@T["The name of the variable to set."]</small>
</div>
<div class="form-group">
<label asp-for="ValueExpression">@T["Value"]</label>
<vc:expression-editor model="@Model.ValueExpression" prefix="@Html.NameFor(m => m.ValueExpression)"></vc:expression-editor>
<span asp-validation-for="ValueExpression" class="text-danger"></span>
<small class="form-text text-muted">@T["Enter an expression that evaluates to the value to use for the variable to set."]</small>
</div>