{"id":2070,"date":"2011-05-12T23:19:43","date_gmt":"2011-05-13T04:19:43","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=2070"},"modified":"2015-04-17T13:54:19","modified_gmt":"2015-04-17T18:54:19","slug":"soa-11g-tutorial-business-rules","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=2070","title":{"rendered":"SOA 11g Tutorial: Business Rules"},"content":{"rendered":"<div class='toc wptoc'>\n<h2>Contents<\/h2>\n<ol class='toc-odd level-1'>\n\t<li>\n\t\t<a href=\"#If_Then_Rules\">If Then Rules<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Add_Rule\">Add Rule<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Edit_Rule\">Edit Rule<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Wire_Rule\">Wire Rule<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Deploy\">Deploy<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Test\">Test<\/a>\n\t\t\t\t<ol class='toc-odd level-3'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Total_price_under_1000\">Total price under $1000<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Total_price_between_1000_to_5000\">Total price between $1000 to $5000<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Total_price_more_than_5000\">Total price more than $5000<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Invalid_credit_card\">Invalid credit card<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t<\/ol>\n<\/ol>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Decision_Table\">Decision Table<\/a>\n\t\t\t\t<ol class='toc-even level-2'>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Add_Decision_Table\">Add Decision Table<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Add_Business_Rule\">Add Business Rule<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Wire_BPEL_and_Rule\">Wire BPEL and Rule<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Define_Decision_Table\">Define Decision Table<\/a>\n\t\t\t\t\t\t<ol class='toc-odd level-3'>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Create_Bucketsets\">Create Bucketsets<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Setup_Facts\">Setup Facts<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Add_Decision_Table_1\">Add Decision Table<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ol>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Define_BPEL\">Define BPEL<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Invoke_Fulfillment_Process\">Invoke Fulfillment Process<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Deploy_1\">Deploy<\/a>\n\t\t\t\t\t<\/li>\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<a href=\"#Test_1\">Test<\/a>\n\t\t\t\t\t\t<ol class='toc-odd level-3'>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Total_price_under_1000_1\">Total price under $1000<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Total_price_between_1000_to_5000_1\">Total price between $1000 to $5000<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Total_price_more_than_5000_1\">Total price more than $5000<\/a>\n\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\t<a href=\"#Invalid_credit_card_1\">Invalid credit card<\/a>\n\t\t\t\t\t\t\t<\/li>\n<\/ol>\n<\/ol>\n<\/ol>\n<\/ol>\n<\/div>\n<div class='wptoc-end'>&nbsp;<\/div>\n<p>This is part of the <a href=\"?p=1924\">Oracle SOA11g hands on tutorials<\/a>.<\/p>\n<span id=\"If_Then_Rules\"><h2>If Then Rules<\/h2><\/span>\n<span id=\"Add_Rule\"><h3>Add Rule<\/h3><\/span>\n<p>* Open POProcessing > composite.xml<br \/>\n* Drag and drop Business Rules icon onto the Components lane<br \/>\n* On Create Business Rules screen,<br \/>\n&#8211; Select<br \/>\nCreate Dictionary<br \/>\n&#8211; Enter<br \/>\nName: ManualApproval<br \/>\nPackage:<br \/>\n* Click green plus icon, followed by Input<br \/>\n&#8211; On Type Chooser screen, click the Import Schema Files&#8230; icon (upper right corner)<br \/>\n&#8211; Enter or browse to c:\\po\\schemas\\OrderBookingDiscount.xsd. Copy to Project is checked.<br \/>\n&#8211; Click OK<br \/>\n&#8211; On Localize Files screen:<br \/>\nMaintain original directory structure for imported files: checked.<br \/>\n&#8211; Click OK.<br \/>\n&#8211; Select price on Type Chooser. Click OK<br \/>\n* Back on Create Business Rules screen, click green plus icon followed by Output<br \/>\n&#8211; On Type Chooser screen,<br \/>\nselect OrderBookingDiscount.xsd -> discountandshipping<br \/>\nclick OK<br \/>\n* Click OK on Create Business Rules screen<\/p>\n<span id=\"Edit_Rule\"><h3>Edit Rule<\/h3><\/span>\n<p>* Double click rules icon to open ManualApproval.rules editor<br \/>\n* Select Ruleset1 on the left panel<br \/>\n* Click Create Rule under the IF\/THEN Rule panel<br \/>\n* Click insert test block under IF<br \/>\n* Select left operand and select price -> price<br \/>\n* Select == sign and select >=<br \/>\n* Select right operand and enter 5000, hit enter key<br \/>\n* Select insert action block under THEN, and select assert new<br \/>\n* Select target -> discountandshipping<br \/>\n* Click edit properties to bring up Properties dialog, enter<br \/>\napprovalRequired: true<br \/>\ndiscount: 0<br \/>\nprice: price.price<br \/>\nshipping: 0<br \/>\n&#8211; Click OK on Properties dialog<br \/>\n* Click the green plus sign followed by Create Rule to add another rule (rule2)<br \/>\n* Click &lt;insert test&gt;<br \/>\n* Click left operand and select price -> price<br \/>\n* Select == sign and select <\n* Select right operand and enter 5000, hit enter key\n* Select insert action block under THEN, and select assert new\n* Select target -> discountandshipping<br \/>\n* Click edit properties, on Properties dialog, enter:<br \/>\napprovalRequired: false<br \/>\ndiscount: 0<br \/>\nprice: price.price<br \/>\nshipping: 0<br \/>\n&#8211; Click OK<\/p>\n<span id=\"Wire_Rule\"><h3>Wire Rule<\/h3><\/span>\n<p>* Open approveLargeOrder.bpel<br \/>\n* Create a new variable by clicking the Variable icon on the upper left corner.<br \/>\n* On Variables dialog<br \/>\n&#8211; Click Variables -> Process -> Variables<br \/>\n&#8211; Click green + sign, enter:<br \/>\nName: approvalRequired<br \/>\nElement: {http:\/\/www.globalcompany.com\/ns\/OrderBooking\/rules}discountandshipping<br \/>\n&#8211; Click OK<br \/>\n* Click Close<br \/>\n* Drag Business Rule icon and drop before ManualPOApproval Human Task icon<br \/>\n* Double click Rule icon to open the Rule editor<br \/>\nGeneral\/Name: ApprovalRule<br \/>\nDictionary\/Dictionary: ManualApproval<br \/>\n* Click Assign Input Facts -> Green plus sign<br \/>\nFrom -> Expression<br \/>\nbpws:getVariableData(&#8216;inputVariable&#8217;,&#8217;payload&#8217;,&#8217;\/ns2:Order\/ns2:price&#8217;) * bpws:getVariableData(&#8216;inputVariable&#8217;,&#8217;payload&#8217;,&#8217;\/ns2:Order\/ns2:qty&#8217;)<br \/>\nTo -> Business Rule Facts -> Scope &#8211; Rule 1 -> Variables -> dsIn -> payload -> callFunctionStateless -> ParameterList -> price -> price<br \/>\n&#8211; Click OK<br \/>\n* Click Assign Output Facts _ Green plus sign<br \/>\nFrom -> Business Rule Facts -> Process -> Scope &#8211; Rule 1 -> Variables -> dsOut -> payload -> callFunctionStatelessDecision -> resultList -> discountandshipping<br \/>\nTo Variable -> Process -> Variables -> Process -> Variables -> approvalRequired -> discountandshipping<br \/>\n&#8211; Click OK<br \/>\n* Click OK on Rule editor<\/p>\n<p>* Drag a Switch icon underneath ApprovalRule<br \/>\n* Drag a Sequence icon into condition branch of newly added Switch block<br \/>\n* Drag ManualPOApproval into the newly added Sequence block<br \/>\n* Drag the Switch block underneath Human Task into the newly added Sequence block<br \/>\n* Set switch evaluation underneath ApprovalRule to<br \/>\nbpws:getVariableData(&#8216;approvalRequired&#8217;,&#8217;\/ns6:discountandshipping\/ns6:approvalRequired&#8217;)  = &#8216;true&#8217;<br \/>\n* Drag an Assign activity into otherwise block<br \/>\nGeneral -> Name: AutoApproved<br \/>\nCopy Rules -> Set outputVariable status to &#8216;approved&#8217;<br \/>\n* Save all<\/p>\n<span id=\"Deploy\"><h3>Deploy<\/h3><\/span>\n<p>* Right click POProcessing and select Deploy -> POProcessing&#8230; <\/p>\n<span id=\"Test\"><h3>Test<\/h3><\/span>\n<span id=\"Total_price_under_1000\"><h4>Total price under $1000<\/h4><\/span>\n<p>* Input xml<\/p>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>1212<\/ns1:ID>\r\n            <ns1:productName>HD TV<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>900<\/ns1:price>\r\n            <ns1:quantity>1<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>1234-1234-1234-1234<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* The order should be automatically approved <strong>without <\/strong>BPEL process.<\/p>\n<span id=\"Total_price_between_1000_to_5000\"><h4>Total price between $1000 to $5000<\/h4><\/span>\n<p>* Input xml<\/p>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>1212<\/ns1:ID>\r\n            <ns1:productName>HD TV<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>900<\/ns1:price>\r\n            <ns1:quantity>5<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>1234-1234-1234-1234<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* The order should be automatically approved using BPEL and  Rules, but <strong>no <\/strong>need for human task.<\/p>\n<span id=\"Total_price_more_than_5000\"><h4>Total price more than $5000<\/h4><\/span>\n<p>* Input xml<\/p>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>1212<\/ns1:ID>\r\n            <ns1:productName>HD TV<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>900<\/ns1:price>\r\n            <ns1:quantity>10<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>1234-1234-1234-1234<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* The order need to be manually approved by BPEL, Rules, and Human Task.<\/p>\n<span id=\"Invalid_credit_card\"><h4>Invalid credit card<\/h4><\/span>\n<p>* Input xml<\/p>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>1212<\/ns1:ID>\r\n            <ns1:productName>HD TV<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>900<\/ns1:price>\r\n            <ns1:quantity>10<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>4321-4321-4321-4321<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* The order should be automatically rejected by BPEL, <strong>no <\/strong>need for Rules, and Human Task.<\/p>\n<span id=\"Decision_Table\"><h2>Decision Table<\/h2><\/span>\n<span id=\"Add_Decision_Table\"><h3>Add Decision Table<\/h3><\/span>\n<p>* Open composite.xml file<br \/>\n* Drag a BPEL process to Components lane, enter<br \/>\nName: FulfillmentProcess<br \/>\nNamespace: http:\/\/xmlns.oracle.com\/POProcessing\/POProcessing\/FulfillmentProcess<br \/>\nTemplate: Asynchronous BPEL Process<br \/>\nService Name: fulfillmentprocess_client<br \/>\nExpose as a SOAP service: unchecked<br \/>\nInput: {http:\/\/xmlns.oracle.com\/ns\/fulfillment}Fulfillment # Need to import fulfillment.xsd schema<br \/>\nOutput: {http:\/\/xmlns.oracle.com\/ns\/fulfillment}CarrierSelection<br \/>\n* Click OK<\/p>\n<span id=\"Add_Business_Rule\"><h3>Add Business Rule<\/h3><\/span>\n<p>* Drag a Business Rule to the Components lane, enter<br \/>\nName: FulfillmentRules<br \/>\nPackage: fulfillmentrules<br \/>\nInput: Fulfillment<br \/>\nOutput: CarrierSelection<br \/>\nAdvanced -> Service Name: OracleRulesFulfillment<br \/>\n* Click OK<\/p>\n<span id=\"Wire_BPEL_and_Rule\"><h3>Wire BPEL and Rule<\/h3><\/span>\n<p>* Drag a wire from new BPEL to new Rule<br \/>\n* Drag a wire from approveLargeOrder to new BPEL<\/p>\n<span id=\"Define_Decision_Table\"><h3>Define Decision Table<\/h3><\/span>\n<p>* Double click FulfillmentRules to open rule editor FulfillmentRules.rules<\/p>\n<span id=\"Create_Bucketsets\"><h4>Create Bucketsets<\/h4><\/span>\n<p>* Click Bucketsets -> Green plus sign -> List of Ranges<br \/>\nName: OrderTotal<br \/>\nDatatype: double<br \/>\n* On Edit Bucketset &#8211; OrderTotal screen<br \/>\n&#8211; click green plus sign twice to add two endpoint (total three endpoints)<br \/>\nEndpoint: 5000.0 Range: >=5000.0 Alias: xtralarge<br \/>\nEndpoint: 1000.0 Range: [1000.0..5000.0] Alias: large<br \/>\nEndpoint: -Infinity Range: <1000.0 Alias: small\n- click OK\n\n\n\n<span id=\"Setup_Facts\"><h4>Setup Facts<\/h4><\/span>\n<p>* Click Facts<br \/>\n* Select FulfillmentType<br \/>\n* Click edit icon (pencil)<br \/>\n* On Edit XML Fact screen,<br \/>\nSet Bucketset for total Alias to OrderTotal<br \/>\n&#8211; Click OK<br \/>\n* Select CarrierSelection<br \/>\n* Click edit icon (pencil)<br \/>\n* On Edit XML Fact screen,<br \/>\nCheck that Bucketset for carrier Alias is set to CarrierValue<br \/>\n* Click OK<\/p>\n<span id=\"Add_Decision_Table_1\"><h4>Add Decision Table<\/h4><\/span>\n<p>* Click Ruleset1<br \/>\n* Click Create Decision Table button<br \/>\nInsert Condition<br \/>\n* Click insert condition block<br \/>\n* Double click edit condition block, select FulfillmentType.total<br \/>\n* Click cell below R1 and check small<br \/>\n* Click green plus sign and click Rule, click cell below R2 and set value to large<br \/>\n* Click green plus sign and click Rule, click cell below R3 and set value to xtralarge<\/p>\n<p>Insert Action<br \/>\n* Click insert action -> assert new<br \/>\n* Double click A1 row to open Action Editor<br \/>\n&#8211; select CarrierSelection<br \/>\n&#8211; check Parameterized<br \/>\n&#8211; click OK<br \/>\n* Select carrier values and <strong>check the checkboxes<\/strong><br \/>\nsmall=USPS, large=UPS, xtralarge=FED_EX<br \/>\n* Click Save All<\/p>\n<span id=\"Define_BPEL\"><h3>Define BPEL<\/h3><\/span>\n<p>* Double click FulfillmentProcess to open fulfillmentProcess.bpel<br \/>\n* Drag a Business Rule process underneath receiveInput<br \/>\n* Double click business rule icon to open Rule editor<br \/>\n* Select Dictionary -> Dictionary: FulfillmentRules<br \/>\n* Add a new Input Fact,<br \/>\nFrom: inputVariable -> payload -> FulfillmentType<br \/>\nTo: Scope &#8211; Rule1 -> Variables -> dsIn -> payload -> parameterList -> Fulfillment<br \/>\n* Add a new Output Fact,<br \/>\nFrom: Scope &#8211; Rule1 -> Variables -> dsOut -> payload -> callFunctionSttelessDecision -> resultList -> CarrierSelection<br \/>\nTo: outputVariable -> CarrierSelection<br \/>\n* Click OK<br \/>\n* Click OK again<br \/>\n* Save all<\/p>\n<span id=\"Invoke_Fulfillment_Process\"><h3>Invoke Fulfillment Process<\/h3><\/span>\n<p>* In composite.xml, double click approveLargeOrder to open the BPEL editor<br \/>\n* Drag an Invoke to the very end of validCreditCard branch<br \/>\n* Wire the new Invoke to FulfillmentProcess<br \/>\n* In Invoke editor,<br \/>\n&#8211; Name: Invoke_Fulfillment<br \/>\n&#8211; Create an input variable with default values<br \/>\n&#8211; click OK<br \/>\n* Drag a Transform activity above Invoke_Fulfillment, double click to open Transform editor,<br \/>\n&#8211; Source variable: inputVariable -> payload<br \/>\n&#8211; target variable: Invoke_Fulfillment_process_inputVariable -> payload<br \/>\n* Click green plus icon to create a new mapper file<br \/>\n&#8211; map customerId<br \/>\n&#8211; map orderId<br \/>\n&#8211; map both price and qty to multiply function and then map to total<br \/>\n* Save all<br \/>\n* Close mapper file<\/p>\n<p>* Drag a Switch icon underneath Invoke_Fulfillment<br \/>\n* Drag a Sequence icon inside condition branch<br \/>\n* Drag both Transorm1 and Invoke_Fulfillment into new Sequence<br \/>\n* Add condition<br \/>\nbpws:getVariableData(&#8216;outputVariable&#8217;,&#8217;payload&#8217;,&#8217;\/ns2:Order\/ns2:status&#8217;) = &#8216;approved&#8217;<br \/>\n* Delete otherwise branch<br \/>\n* Save all and close BPEL file<\/p>\n<p>* In composite.xml , double click routePO to open routePO.mplan<br \/>\n* Click green plus sign -> static routing rule -> service<br \/>\n* Select POProcessing | BPEL Processes | FulfillmentProcess | Services | fulfillmentprocess_client | process<br \/>\n* Add filter criteria<br \/>\n($in.purchaseOrderPart\/inp1:PurchaseOrder\/inp1:quantity * $in.purchaseOrderPart\/inp1:PurchaseOrder\/inp1:price) < 1000\n* Create new transform file\n- map customerId\n- map orderId\n- map both price and qty to multiply function and then map to total\n* Save all\n\n\n\n<span id=\"Deploy_1\"><h3>Deploy<\/h3><\/span>\n<p>* Right click POProcessing and select Deploy -> POProcessing&#8230; <\/p>\n<span id=\"Test_1\"><h3>Test<\/h3><\/span>\n<span id=\"Total_price_under_1000_1\"><h4>Total price under $1000<\/h4><\/span>\n<p>* Use xml request that contains total price under $1000<\/p>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>1212<\/ns1:ID>\r\n            <ns1:productName>HD TV<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>900<\/ns1:price>\r\n            <ns1:quantity>1<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>1234-1234-1234-1234<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* Click Launch Flow Trace button<br \/>\n* On the Flow Trace web page, click FulfillmentProcess BPEL Component<br \/>\n* Click the Flow tab<br \/>\n* Click callbackClient icon<br \/>\n* Check that carrier is USPS<\/p>\n<span id=\"Total_price_between_1000_to_5000_1\"><h4>Total price between $1000 to $5000<\/h4><\/span>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>1212<\/ns1:ID>\r\n            <ns1:productName>HD TV<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>900<\/ns1:price>\r\n            <ns1:quantity>5<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>1234-1234-1234-1234<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* Check that carrier is UPS<\/p>\n<span id=\"Total_price_more_than_5000_1\"><h4>Total price more than $5000<\/h4><\/span>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>1212<\/ns1:ID>\r\n            <ns1:productName>HD TV<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>900<\/ns1:price>\r\n            <ns1:quantity>10<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>1234-1234-1234-1234<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* Approve and check that carrier is FedEx<br \/>\n* Reject and check that Fulfillment BPEL process is NOT called<\/p>\n<span id=\"Invalid_credit_card_1\"><h4>Invalid credit card<\/h4><\/span>\n<pre lang=\"xml\">\r\n<soap:Envelope xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/soap\/envelope\/\">\r\n    <soap:Body xmlns:ns1=\"http:\/\/xmlns.oracle.com\/ns\/order\">\r\n        <ns1:PurchaseOrder>\r\n            <ns1:CustID>1111<\/ns1:CustID>\r\n            <ns1:ID>1212<\/ns1:ID>\r\n            <ns1:productName>HD TV<\/ns1:productName>\r\n            <ns1:itemType>Electronics<\/ns1:itemType>\r\n            <ns1:price>900<\/ns1:price>\r\n            <ns1:quantity>10<\/ns1:quantity>\r\n            <ns1:status>Initial<\/ns1:status>\r\n            <ns1:ccType>Mastercard<\/ns1:ccType>\r\n            <ns1:ccNumber>4321-4321-4321-4321<\/ns1:ccNumber>\r\n        <\/ns1:PurchaseOrder>\r\n    <\/soap:Body>\r\n<\/soap:Envelope>\r\n<\/pre>\n<p>* Check Fulfillment BPEL process is NOT called<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is part of the Oracle SOA11g hands on tutorials. If Then Rules Add Rule * Open POProcessing > composite.xml * Drag and drop Business Rules icon onto the Components lane * On Create Business Rules screen, &#8211; Select Create &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=2070\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[100],"tags":[],"class_list":["post-2070","post","type-post","status-publish","format-standard","hentry","category-soa11g"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-xo","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2070","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2070"}],"version-history":[{"count":17,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2070\/revisions"}],"predecessor-version":[{"id":10651,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/2070\/revisions\/10651"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2070"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2070"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2070"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}