Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
In this task, you insert a PolicyActivity activity into the workflow and create the RuleSet that implements the binary search. When the search has completed, the results are displayed by using a CodeActivity activity.
Note
Although you are encouraged to follow the exercises in a linear manner, it is not required. You can start on this exercise by opening the sample project and proceeding to the steps in the following section.
Add the Policy activity
To add the Policy activity
Switch to the workflow design view (right-click Workflow1.cs or Workflow1.vb in Solution Explorer and choose View Designer).
Drag a Policy activity from the Toolbox and drop it so that it is the last activity in the workflow.
Create the RuleSet
To create the RuleSet
Right-click the Policy activity and choose Properties from the context menu.
Select the RuleSetReference property in the Properties Window and click the ellipsis button that is displayed to the right of the property.
Click New.
Create the Rules
To implement the binary search, three rules are required. The first rule computes the guess by taking the midpoint between the min and max values.
To create the first rule
Click Add Rule.
Enter the following code into the Condition text box.
this.min <= this.maxEnter the following code into the Then Actions text box.
this.ComputerGuess = this.min + (this.max - this.min) / 2 this.ComputerTurns = this.ComputerTurns + 1 this.DisplayComputerGuess()
The second and third rules adjust min or max depending on whether the guess is higher or lower than the target number.
To create the second and third rules
Click Add Rule.
Enter the following code into the Condition text box.
this.ComputerGuess < this.TargetNumberEnter the following code into the Then Actions text box.
this.min = this.ComputerGuessClick Add Rule.
Enter the following code into the Condition text box.
this.ComputerGuess > this.TargetNumberEnter the following code into the Then Actions text box.
this.max = this.ComputerGuess
The three rules are named Rule1, Rule2, and Rule3. By default they have a Priority of 0, and Reevaluation of Always. Rules are evaluated in descending order of priority, and if the priority is the same they are evaluated in ascending alphabetical order. In this example, the rules evaluate in the order of Rule1, Rule2, and then Rule3. A RuleSet executes until it has no more rules to evaluate, or until the Halt command is explicitly given.
In this case, Rule1 evaluates and sets the current guess. Rule1 also invokes the DisplayComputerGuess method. Next, Rule2 is evaluated. If the guess is too low, then the min value is updated to the current guess. Rules3 is then evaluated. If the guess is too high, the max value is set to the current guess. If the guess was correct then neither Rule2 nor Rule3 executes, and the RuleSet completes. If the condition for Rule2 or Rule3 evaluates to true and the rule executes, the value of either min or max is updated. Because the condition for Rule1 evaluates min and max, it is now reevaluated because Full Chaining is enabled and the Reevaluation property is set to Always. The next guess is calculated based on the updated values of min and max, and because Rule2 and Rule3 both reference this.ComputerGuess in their conditions, they are both re-evaluated. This continues until the correct number is determined, at which point the RuleSet completes.
Save the RuleSet
To save the RuleSet
Click OK to dismiss the Rule Set Editor dialog box.
Ensure that the newly created RuleSet is selected in the Name list, and click OK.
Display the Status
The final step in the workflow is to report the number of guesses taken by the computer to determine the target number. This is displayed to the user using a CodeActivity activity.
To add the Code activity
Drag a Code activity from the Toolbox and drop it so that it is the last activity in the workflow.
Double-click the Code activity and enter the following code into the generated handler.
Console.WriteLine("The Computer was able to guess the number in {0} turns.", ComputerTurns);
Build and Run the Application
Build and run the application and see how you do against the computer.
To build and run the application
- Press Ctrl+F5 to build and run the application.
See Also
Concepts
Using Conditions in Workflows
Forward Chaining of Rules
Other Resources
Completed Rules and Conditions Tutorial
Rules and Conditions
Copyright © 2007 by Microsoft Corporation. All rights reserved.
Last Published: 2010-03-04