Chapter 7 - Adding Business Rules

Posted at 2010. 2. 10. 13:52 | Posted in Oracle Solution/PO Processing
반응형
Introduction

Business Rule 컴포넌트를 이용하여 5000원이 넘는 주문만 휴먼테스크를 이용해 처리하고 5000~1000의 주문이면 그냥 카드상태만 체크하게 변경해봅시다~



이렇게 규칙(?)을 때로 빼놓으면 나중에 7,500원이 넘는 결제를 휴먼테스크로 처리하고 싶으면 Business Rule 컴포넌트만 변경하면 되지 편하겠네용용~



Adding a Bussiness Rule to POProcessing

비지니스 룰(Business Rule) 컴포넌트를 Components 영역에 드래그 앤 드랍 합니다.



Name : ManualApproval

Input 추가



Import 클릭 - 아래 파일을 임포트(import) 합니다.









price를 선택합니다.



이번에는 Output을 추가 합니다.



discountandshipping 선택



OK 클릭



ManualApproval(Business Rule) 더블클릭



Ruleset_1 에서 Create 버튼 클릭



아래 Rule_1 이 추가 되는데 IF 부분에 <insert test> 클릭



클릭 하면 <operand> == <operand> 가 나오는데 앞의 <operand> 클릭 후 price 선택



== 부분 클릭 후 <= 선택



마지막 오른쪽 <operand> 클릭 후 5000 입력



THEN 아래 부분의 <insert action> 클릭 후 assert new 클릭



assert new <target> 가 생기고 <target> 클릭 후 discountandshipping 선택



<add property> 클릭



Value를 아래 그림과 같이 바꿔 줍니다.



Rule 를 하나 더 추가 합니다.

IF
    price.price < 5000
THEN
    .........





2개의 Rule 만들어졌습니다.



저장 후 Business Rule 편집창을 닫습니다.

approveLargeOrder(BPEL Process)를 더블 클릭해서 편집 합니다.

구조 팔레트(Structure palette) 부분에서 Variables - Process - Variables를 선택합니다.

선택 되어있는 상태에서 + 버튼(Create An Object of The Selected Node Type)을 클릭합니다.



Name: approvalRequired

엘리먼트(Element) 선택 후, 오른쪽의 찾기(Browse) 버튼 클릭



OrderBookingDiscount.xsd - discountandshipping 선택



OK 클릭



Business Rule 액티브를 ManualPOApproval_1 위에 드래그 앤 드랍 합니다.



Name : ApprovalRule
Dictionary : ManualApproval

Assign Input Facts 탭에서 추가(Create) 버튼 클릭



아래와 같이 입력 합니다. (빌더를 이용하셔요~)



Assign Output Facts 탭에서 추가(Create) 버튼 클릭



아래와 같이 선택합니다.



OK 클릭



추가된 ApprovalRule(Business Rule) 아래에 스위치(Switch) 액티브를 추가합니다.



추가된 스위치의 <case> 영역에 시퀀스(Sequence) 액티브를 추가합니다.



ManualPOApproval_1 액티브를 스위치 <case>의 시퀀스 액티브 안으로 옮깁니다.



taskSwitch 도 마찬가지로 이동



<case> 조건을 설정합니다.



Xpath Builder 클릭



bpws:getVariableData('approvalRequired','/ns5:discountandshipping/ns5:approvalRequired') = 'true'



<otherwise> 영역에 Assign 액티브를 추가합니다.



Assign_1 더블 클릭



General 탭에서

Name : AutoApproved



Copy Operation 탭에서 값을 세팅합니다.



'approved' 를 outputVariable - status 에 입력합니다.



OK 클릭



모두 저장합니다.





Deploying and Running the application

주문가격(price * quantity)이 5,000원 이상인 주문을 테스트 해봅시다~

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body xmlns:ns1="http://xmlns.oracle.com/ns/order">
        <ns1:PurchaseOrder>
            <ns1:CustID>1111</ns1:CustID>
            <ns1:ID>1212</ns1:ID>
            <ns1:productName>HD TV</ns1:productName>
            <ns1:itemType>Electronics</ns1:itemType>
            <ns1:price>2250</ns1:price>
            <ns1:quantity>10</ns1:quantity>
            <ns1:status>Initial</ns1:status>
            <ns1:ccType>Mastercard</ns1:ccType>
            <ns1:ccNumber>1234-1234-1234-1234</ns1:ccNumber>
        </ns1:PurchaseOrder>
    </soap:Body>
</soap:Envelope>

ManualPOApproval(Human Task)에서 실행 중 상태입니다.



BPEL Process(approveLargeOrder)를 조금 자세히 보자면 아래와 같습니다.



BPM 작업 목록에서 확인해보면 주문이 하나 올라와있습니다. 승인 처리 해봅시다.



모든 처리가 완료 되었습니다.



Write 된 파일입니다.



1,000 ~ 4,999원의 주문은 그냥 카드 상태만 검사합니다.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body xmlns:ns1="http://xmlns.oracle.com/ns/order">
        <ns1:PurchaseOrder>
            <ns1:CustID>1111</ns1:CustID>
            <ns1:ID>2222</ns1:ID>
            <ns1:productName>iPod shuffle</ns1:productName>
            <ns1:itemType>Electronics</ns1:itemType>
            <ns1:price>145</ns1:price>
            <ns1:quantity>30</ns1:quantity>
            <ns1:status>Initial</ns1:status>
            <ns1:ccType>Mastercard</ns1:ccType>
            <ns1:ccNumber>1234-1234-1234-1234</ns1:ccNumber>
        </ns1:PurchaseOrder>
    </soap:Body>
</soap:Envelope>

ManualPOApproval(Human Task)을 타지 않았습니다.



Business Rule 이후에 approvalRequired 변수가 false로 갱신되었습니다.



1,000원 미만의 주문은 패스... 직접 해보세요~

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body xmlns:ns1="http://xmlns.oracle.com/ns/order">
        <ns1:PurchaseOrder>
            <ns1:CustID>1111</ns1:CustID>
            <ns1:ID>2121</ns1:ID>
            <ns1:productName>Bluetooth Headset</ns1:productName>
            <ns1:itemType>Electronics</ns1:itemType>
            <ns1:price>49.99</ns1:price>
            <ns1:quantity>1</ns1:quantity>
            <ns1:status>Initial</ns1:status>
            <ns1:ccType>Mastercard</ns1:ccType>
            <ns1:ccNumber>8765-8765-8765-8765</ns1:ccNumber>
        </ns1:PurchaseOrder>
    </soap:Body>
</soap:Envelope>





반응형
//