나는 내가 그 내에서 액세스 할 수있는 '변수'의 세트와 함께 (VB) 식을 실행하는 개념을 테스트하기 위해 만든 다음 WF 활동을 표현.Windows 워크 플로 사용자 작업 : 오류 참조하는 식을 평가할 때 변수
public class ExpressionEncapsulationActivity : NativeActivity<bool>
{
private readonly Collection<Variable> _variables = new Collection<Variable>();
private readonly Collection<Activity> _activities = new BindingList<Activity>();
private Assign _expressionEvaluationChild { get; set; }
private Variable<bool> _expressionResultVariable;
public Collection<Variable> Variables { get { return _variables; } }
public InArgument<bool> Expression { get; set; }
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
base.CacheMetadata(metadata);
DisplayName = "Expression Encapsulation";
metadata.SetVariablesCollection(Variables);
metadata.SetChildrenCollection(_activities);
_expressionResultVariable = new Variable<bool>("evalResult");
_expressionEvaluationChild = new Assign()
{
DisplayName = "Expression Encapsulation Assign",
To = new OutArgument<bool>(_expressionResultVariable),
Value = new InArgument<bool>((ctx) => Expression.Get(ctx))
};
metadata.AddImplementationVariable(_expressionResultVariable);
metadata.AddImplementationChild(_expressionEvaluationChild);
}
protected override void Execute(NativeActivityContext context)
{
context.ScheduleActivity(_expressionEvaluationChild, OnExpressionEvaluationComplete);
}
protected void OnExpressionEvaluationComplete(NativeActivityContext context, ActivityInstance completedActivity)
{
Result.Set(context, _expressionResultVariable.Get(context));
}
}
그리고 다음과 같은 활동을 테스트하기 위해 노력하고있어 : (클래스 ForEachActivityItem은 간단과에 Id 속성이있다)
var testVarItem = new ForEachActivityItem()
{
Id = 2
};
var workflow = new ExpressionEncapsulationActivity()
{
Variables =
{
new Variable<ForEachActivityItem>("var", (ctx) => testVarItem)
},
Expression = new InArgument<bool>(new VisualBasicValue<bool>("var.Id = 1"))
};
var result = WorkflowInvoker.Invoke(workflow);
Assert.IsFalse(result, "Test #1");
을하지만,이 테스트는 오류 발생 :
을 변수 (var에)가 할당 채널 인 표현의 실행 컨텍스트에 '부모'활동 (선언됩니다으로 표현을 사용할 수없는 이유System.Activities.InvalidWorkflowException: The following errors were encountered while processing the workflow tree: 'VisualBasicValue': Compiler error(s) encountered processing expression "var.Id = 2". 'var' is not declared. It may be inaccessible due to its protection level.
나는 볼 수 없습니다 ExpressionEncapsulationActivity 활동 내에서 작성된 활동).
그것은 전달 된 표현식이 변수를 참조하지 않는 경우 테스트가 작동 주목할 가치가있을 수도 있습니다 (예를 들어, "1 = 1"). 그것은 내가 Sequence
활동을 사용하는 경우 내가 의 변수를 설정하고 표현식을 평가 그것은에 Assign
자식 활동을 추가하는 작업 표현의 이런 종류를 얻을 수있는 것 또한 흥미 롭다. 내 문제는 민간 및 공공의 메타 데이터 '의 차이에 대한 이해의 부족에서 비롯처럼