Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,17 @@ public static bool IsComplete(object? message)
await this._promptCount.WriteAsync(context, 0).ConfigureAwait(false);

InitializablePropertyPath variable = Throw.IfNull(this.Model.Variable);
bool hasValue = context.ReadState(variable.Path) is BlankValue;
bool alwaysPrompt = this.Evaluator.GetValue(this.Model.AlwaysPrompt).Value;
bool isValueUndefined = context.ReadState(variable.Path) is BlankValue;
bool proceed = this.Evaluator.GetValue(this.Model.AlwaysPrompt).Value;

bool proceed = !alwaysPrompt || hasValue;
if (proceed)
if (!proceed)
{
SkipQuestionMode mode = this.Evaluator.GetValue(this.Model.SkipQuestionMode).Value;
proceed =
mode switch
{
SkipQuestionMode.SkipOnFirstExecutionIfVariableHasValue => !await this._hasExecuted.ReadAsync(context).ConfigureAwait(false),
SkipQuestionMode.AlwaysSkipIfVariableHasValue => hasValue,
SkipQuestionMode.SkipOnFirstExecutionIfVariableHasValue => isValueUndefined && !await this._hasExecuted.ReadAsync(context).ConfigureAwait(false),
SkipQuestionMode.AlwaysSkipIfVariableHasValue => isValueUndefined,
SkipQuestionMode.AlwaysAsk => true,
_ => true,
};
Expand Down Expand Up @@ -86,7 +85,7 @@ public async ValueTask CaptureResponseAsync(IWorkflowContext context, ExternalIn
FormulaValue? extractedValue = null;
if (!response.HasMessages)
{
string unrecognizedResponse = this.FormatPrompt(this.Model.UnrecognizedPrompt);
string unrecognizedResponse = this.Model.UnrecognizedPrompt is not null ? this.FormatPrompt(this.Model.UnrecognizedPrompt) : "Invalid response";
await context.AddEventAsync(new MessageActivityEvent(unrecognizedResponse.Trim()), cancellationToken).ConfigureAwait(false);
}
else
Expand Down Expand Up @@ -128,7 +127,7 @@ public async ValueTask CaptureResponseAsync(IWorkflowContext context, ExternalIn
}
}

await this.AssignAsync(this.Model.Variable?.Path, extractedValue, context).ConfigureAwait(false);
await this.AssignAsync(Throw.IfNull(this.Model.Variable).Path, extractedValue, context).ConfigureAwait(false);
await this._hasExecuted.WriteAsync(context, true).ConfigureAwait(false);
await context.SendResultMessageAsync(this.Id, cancellationToken).ConfigureAwait(false);
}
Expand All @@ -145,9 +144,13 @@ private async ValueTask PromptAsync(IWorkflowContext context, CancellationToken
int actualCount = await this._promptCount.ReadAsync(context).ConfigureAwait(false);
if (actualCount >= repeatCount)
{
ValueExpression defaultValueExpression = Throw.IfNull(this.Model.DefaultValue);
DataValue defaultValue = this.Evaluator.GetValue(defaultValueExpression).Value;
await this.AssignAsync(this.Model.Variable?.Path, defaultValue.ToFormula(), context).ConfigureAwait(false);
DataValue defaultValue = DataValue.Blank();
if (this.Model.DefaultValue is not null)
{
ValueExpression defaultValueExpression = Throw.IfNull(this.Model.DefaultValue);
defaultValue = this.Evaluator.GetValue(defaultValueExpression).Value;
}
await this.AssignAsync(Throw.IfNull(this.Model.Variable).Path, defaultValue.ToFormula(), context).ConfigureAwait(false);
string defaultValueResponse = this.FormatPrompt(this.Model.DefaultValueResponse);
await context.AddEventAsync(new MessageActivityEvent(defaultValueResponse.Trim()), cancellationToken).ConfigureAwait(false);
await context.SendResultMessageAsync(this.Id, cancellationToken).ConfigureAwait(false);
Expand Down
Loading
Loading