0

我正在尝试使用我的自定义 UI 构建规则并使用 CodeDom 为我的工作流模块执行。我不想使用 WF 提供的规则界面。为了构建/执行规则,我正在创建一个条件和 ThenAction/ElseActions。目前我能够成功执行一个条件。意味着假设有一个订单实体,其中包含OrderID、Amount、NoOfItems、Discount 和 TotalAmount 等属性。

能够建立以下条件:

if (this.Amount > 1000)
    thisDiscount = 100;

建筑左/右条件:

CodePropertyReferenceExpression technologyRef = new CodePropertyReferenceExpression(thisRef, " Amount");

CodePrimitiveExpression wfConstant = new CodePrimitiveExpression(1000);

// if ( this. Amount > 1000)

CodeBinaryOperatorExpression cond = new CodeBinaryOperatorExpression();

cond.Left = technologyRef;

cond.Operator = CodeBinaryOperatorType.GreaterThanOrEqual;

cond.Right = wfConstant;

Rule rule = new Rule("rule1");

rule.Condition = new RuleExpressionCondition(cond);

无法建立以下条件:

if (this.Amount > 1000 && NoOfItems > 5)
    thisDiscount = 150;

谁能帮我为规则建立多个条件?表示在单个 IF 语句中对多个属性进行验证。

4

1 回答 1

1

第一个条件的树看起来像这样:

      <
     / \
Amount  1000

这正是您在代码中表示它的方式:一个CodeBinaryOperatorExpression代表 the <,然后一个表达式代表每个孩子。对第二个表达式做同样的事情几乎是一样的,但是树会更大:

        -----&&-----
       /            \
      <              >
     / \            / \
Amount 1000 NoOfItems  5

也就是说,您将有一个CodeBinaryOperatorExpression代表&&( CodeBinaryOperatorType.BooleanAnd),其左孩子将是<节点,其右孩子将是>节点。

于 2012-04-04T10:38:46.057 回答