<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Drools_Kie_-_Example</id>
	<title>Drools Kie - Example - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Drools_Kie_-_Example"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Drools_Kie_-_Example&amp;action=history"/>
	<updated>2026-04-19T09:26:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=Drools_Kie_-_Example&amp;diff=42901&amp;oldid=prev</id>
		<title>Bernard Szlachta: /* Exercises ⌘。 */</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Drools_Kie_-_Example&amp;diff=42901&amp;oldid=prev"/>
		<updated>2016-09-22T06:43:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Exercises ⌘。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Cat|Drools|020}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;slideshow style=&amp;quot;nobleprog&amp;quot; headingmark=&amp;quot;⌘&amp;quot; incmark=&amp;quot;…&amp;quot; scaled=&amp;quot;false&amp;quot; font=&amp;quot;Trebuchet MS&amp;quot; headingmark2=&amp;quot;。&amp;quot; lang=&amp;quot;中文版&amp;quot; &amp;gt;&lt;br /&gt;
;title: Drools Kie &lt;br /&gt;
;author: Bernard Szlachta (NobleProg Ltd)&lt;br /&gt;
&amp;lt;/slideshow&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Can I use your material}}&lt;br /&gt;
&lt;br /&gt;
== Resource Structure⌘。 ==&lt;br /&gt;
* Organisation Unit（access control, 管理用户的访问权限）&lt;br /&gt;
** Repository 1 （physical storage）&lt;br /&gt;
** Repository 2&lt;br /&gt;
*** Project 1（build）&lt;br /&gt;
*** Project 2&lt;br /&gt;
**** Package 1（dependencies）&lt;br /&gt;
**** Package 2&lt;br /&gt;
***** Rule 1&lt;br /&gt;
***** Process 1&lt;br /&gt;
***** Data Object 1&lt;br /&gt;
***** Test 1&lt;br /&gt;
&lt;br /&gt;
== Creating Organization Unit, repository, project and package⌘。 ==&lt;br /&gt;
[[File:Jbpm orgaizing konwoledge.png|300px]]&lt;br /&gt;
# Creating Organizational Unit&lt;br /&gt;
## Authoring/Administration&lt;br /&gt;
## Organisation Units/Manage Organisation Units/Add&lt;br /&gt;
## Name: &amp;#039;&amp;#039;&amp;#039;npou&amp;#039;&amp;#039;&amp;#039; / Owner: NobleProg Ltd&lt;br /&gt;
# Creating Repository&lt;br /&gt;
## Authoring/Administration&lt;br /&gt;
## Repositories/New Repository&lt;br /&gt;
## Repository Name: &amp;#039;&amp;#039;&amp;#039;nprep&amp;#039;&amp;#039;&amp;#039;/Organisational Unit: &amp;#039;&amp;#039;&amp;#039;npou&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# Creating Project&lt;br /&gt;
## Authoring/ Project Authoring&lt;br /&gt;
## New Item/Project&lt;br /&gt;
## Resource Name: &amp;#039;&amp;#039;&amp;#039;npproj1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
## Group ID: &amp;#039;&amp;#039;&amp;#039;nppack&amp;#039;&amp;#039;&amp;#039;  &amp;lt;- THIS IS VERY IMPORTANT&lt;br /&gt;
&lt;br /&gt;
== Hello World ⌘。==&lt;br /&gt;
* New Item  -&amp;gt; New DRL file&lt;br /&gt;
** Name: Hello World&lt;br /&gt;
** Package: nppack&lt;br /&gt;
* Paste 粘贴&lt;br /&gt;
 rule &amp;quot;Hello World&amp;quot;&lt;br /&gt;
 when &lt;br /&gt;
    eval(true)&lt;br /&gt;
 then&lt;br /&gt;
     System.out.println(&amp;quot;Hello world&amp;quot;);&lt;br /&gt;
 end&lt;br /&gt;
* Save the rule 保存规则&lt;br /&gt;
&lt;br /&gt;
;Testing Hello World Rule 测试规则&lt;br /&gt;
* New Item -&amp;gt; Test Scenario&lt;br /&gt;
** Name: Hello World Test&lt;br /&gt;
* Check the log files 查看日志&lt;br /&gt;
** e.g.  例如 &lt;br /&gt;
 cd /opt/jbpm-installer/wildfly-8.2.1.Final/standalone/log&lt;br /&gt;
 tail server.log  -f&lt;br /&gt;
&lt;br /&gt;
== Apply Discount 打折 ==&lt;br /&gt;
=== Creating a Fact Type 新建一个 Fact Type (Data Object) ⌘。===&lt;br /&gt;
&amp;lt;div style=&amp;quot;color:red&amp;quot;&amp;gt;MAKE SURE YOU ARE IN npou/nprep/npproj1&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* New Item/Data Object&lt;br /&gt;
** Identifier ShoppingCart&lt;br /&gt;
** Label: Shopping Cart&lt;br /&gt;
** Package: nppack&lt;br /&gt;
::[[File:ClipCapIt-160823-145024.PNG|300px]]&lt;br /&gt;
* Create new field 新建 Field&lt;br /&gt;
** Id: totalPrice&lt;br /&gt;
** Label: Total Price&lt;br /&gt;
** Type: BigDecimal&lt;br /&gt;
::[[File:DroolsNewField.png | 300px]]&lt;br /&gt;
* Save (upper right corner) 保存 (右上角)&lt;br /&gt;
&lt;br /&gt;
=== Looking at generated POJO ⌘。 ===&lt;br /&gt;
* Source&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package nppack;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * This class was automatically generated by the data modeler tool.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
public class ShoppingCart implements java.io.Serializable&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
   static final long serialVersionUID = 1L;&lt;br /&gt;
&lt;br /&gt;
   @org.kie.api.definition.type.Label(value = &amp;quot;Total Price&amp;quot;)&lt;br /&gt;
   private java.math.BigDecimal totalPrice;&lt;br /&gt;
&lt;br /&gt;
   public ShoppingCart()&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public java.math.BigDecimal getTotalPrice()&lt;br /&gt;
   {&lt;br /&gt;
      return this.totalPrice;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setTotalPrice(java.math.BigDecimal totalPrice)&lt;br /&gt;
   {&lt;br /&gt;
      this.totalPrice = totalPrice;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public ShoppingCart(java.math.BigDecimal totalPrice)&lt;br /&gt;
   {&lt;br /&gt;
      this.totalPrice = totalPrice;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating a Rule 新建一个规则 。⌘===&lt;br /&gt;
:Rule: If customer buys more than 10k, apply 10% discount&lt;br /&gt;
:规则：如果客户买的东西超过一万元，打九折&lt;br /&gt;
&lt;br /&gt;
* New Item -&amp;gt; Guided Rule&lt;br /&gt;
* Resource Name: &amp;#039;&amp;#039;&amp;#039;Apply Tall Order Discount&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Enter details as below 输入下面的信息&lt;br /&gt;
[[File:ApplyDiscountRule.png|400px]]&lt;br /&gt;
&lt;br /&gt;
* View Source should return 查看源代码&lt;br /&gt;
 package nppack;&lt;br /&gt;
 import java.lang.Number;&lt;br /&gt;
 rule &amp;quot;Apply Tall Order Discount&amp;quot;&lt;br /&gt;
     dialect &amp;quot;mvel&amp;quot;&lt;br /&gt;
     when&lt;br /&gt;
         $sc : ShoppingCart( $tp : totalPrice &amp;gt;= 10000B )&lt;br /&gt;
     then&lt;br /&gt;
         $sc.setTotalPrice( $tp*0.9 );&lt;br /&gt;
         update( $sc );&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=== Creating a Test Plan 。⌘===&lt;br /&gt;
* New Item-&amp;gt; Test Scenario&lt;br /&gt;
* Resource Name:Apply Discount Test&lt;br /&gt;
* Run Scenario&lt;br /&gt;
[[File:ApplyDiscountTestPlan.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Dealing with Recursion 递归 。⌘==&lt;br /&gt;
* Let us try to add a test for order value of 15000 and set EXPECT section to 13500&lt;br /&gt;
: 试着为价格是15000元的订单添加一个test，并设定它的EXPECT为13500元&lt;br /&gt;
[[File:ApplyDiscountRuleRecusion.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=== No-Loop Attribute ⌘===&lt;br /&gt;
We need to add no-loop attribute&amp;lt;br /&amp;gt;&lt;br /&gt;
添加 no-loop 属性&lt;br /&gt;
&lt;br /&gt;
[[File:ApplyDiscoutRuleRecursiveNoLoop.png|400px]]&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
package nppack;&lt;br /&gt;
&lt;br /&gt;
import java.lang.Number;&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Apply Tall Order Discount&amp;quot;&lt;br /&gt;
        no-loop true  &amp;lt;-------&lt;br /&gt;
	dialect &amp;quot;mvel&amp;quot;&lt;br /&gt;
	when&lt;br /&gt;
		$sc : ShoppingCart( $tp : totalPrice &amp;lt;= 10000B )&lt;br /&gt;
	then&lt;br /&gt;
		modify( $sc ) {&lt;br /&gt;
				setTotalPrice( $tp*0.9 )&lt;br /&gt;
		}&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Test correct test should look like that&lt;br /&gt;
: 测试通过，会显示&lt;br /&gt;
[[File:ApplyDiscountRecursiveTest.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Exercises ⌘。==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exercise 1.4&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# to the shopping cart fact type add &amp;quot;discountRate&amp;quot; field, &amp;lt;br /&amp;gt;在购物车 fact type 里增加 &amp;quot;discountRate&amp;quot; field&lt;br /&gt;
# add rule to populate it accordingly rather than change totalPrice field directly&amp;lt;br/&amp;gt;添加新计算totalPrice的规则，不要直接改变totalPrice field&lt;br /&gt;
# create a test 添加测试&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exercise 1.5&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# to the shopping cart fact type add &amp;quot;totalPriceAfterDiscount&amp;quot; field, &amp;lt;br /&amp;gt;在购物车 fact type 里增加 &amp;quot;totalPriceAfterDiscount&amp;quot; field&lt;br /&gt;
# add rule to calculate total price&amp;lt;br /&amp;gt;添加计算总价格的规则&lt;br /&gt;
# add a test 添加测试&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exercise 1.6&amp;#039;&amp;#039;&amp;#039; (optional - don&amp;#039;t do it unless you ask to)&lt;br /&gt;
* to the shopping cart fact type add &amp;quot;discountApplied:Boolean&amp;quot; field, &amp;lt;br /&amp;gt;在购物车 fact type 里增加 &amp;quot;discountApplied:Boolean&amp;quot; field,&lt;br /&gt;
* set it to true after applying a discount &amp;lt;br /&amp;gt;在应用折扣后设定为 true&lt;br /&gt;
* modify rule so it will work without no-loop or other attributes&amp;lt;br /&amp;gt;修改规则使得规则在没有no-loop或其他属性时一样工作&lt;br /&gt;
* discuss why 讨论&lt;br /&gt;
&lt;br /&gt;
== Next Module ==&lt;br /&gt;
[[Drools Kie - Decision Table]]&lt;/div&gt;</summary>
		<author><name>Bernard Szlachta</name></author>
	</entry>
</feed>