📄 atm.bpel
字号:
<to part="detail" variable="unauthorizedAccess"> <query>customerName</query> </to> </copy> </assign> <reply name="DenyAccess" operation="logOn" partnerLink="atm" portType="atm:FrontEnd" variable="unauthorizedAccess" faultName="atm:unauthorizedAccess"> <documentation>send fault back to ATM</documentation> </reply> </sequence> </else> </if> <while name="AccountLoop"> <documentation>accept account requests, one at a time</documentation> <condition>$logged</condition> <pick name="AccountMenu"> <onMessage operation="getBalance" partnerLink="atm" portType="atm:FrontEnd" variable="customerMsg"> <correlations> <correlation initiate="no" set="customerInteraction" /> </correlations> <sequence name="BalanceSeq"> <invoke inputVariable="customerMsg" name="QueryBalance" operation="queryBalance" outputVariable="balanceMsg" partnerLink="account" portType="acc:AccountSystem"> <documentation>get current account balance</documentation> </invoke> <reply name="TellBalance" operation="getBalance" partnerLink="atm" portType="atm:FrontEnd" variable="balanceMsg"> <documentation>return balance to ATM</documentation> </reply> </sequence> </onMessage> <onMessage operation="deposit" partnerLink="atm" portType="atm:FrontEnd" variable="balanceChange"> <correlations> <correlation initiate="no" set="customerInteraction" /> </correlations> <sequence name="DepositSeq"> <assign name="PrepareDeposit" validate="no"> <documentation>populate balance update request</documentation> <copy> <from part="customerName" variable="balanceChange" /> <to part="body" variable="accountOperation"> <query>customerName</query> </to> </copy> <copy> <from part="amount" variable="balanceChange" /> <to part="body" variable="accountOperation"> <query>amount</query> </to> </copy> </assign> <invoke inputVariable="accountOperation" name="UpdateBalance" operation="updateBalance" outputVariable="balanceMsg" partnerLink="account" portType="acc:AccountSystem"> <documentation>post positive balance update</documentation> <correlations> <correlation initiate="no" pattern="out" set="customerInteraction" /> </correlations> </invoke> <reply name="TellNewBalance" operation="deposit" partnerLink="atm" portType="atm:FrontEnd" variable="balanceMsg"> <documentation>make new balance available to ATM</documentation> </reply> </sequence> </onMessage> <onMessage operation="withdraw" partnerLink="atm" portType="atm:FrontEnd" variable="balanceChange"> <correlations> <correlation initiate="no" set="customerInteraction" /> </correlations> <sequence name="WithdrawSeq"> <assign name="PrepareBalanceQuery" validate="no"> <documentation>populate balance query request</documentation> <copy> <from part="customerName" variable="balanceChange" /> <to part="customerName" variable="customerMsg" /> </copy> </assign> <invoke inputVariable="customerMsg" name="QueryBalance" operation="queryBalance" outputVariable="balanceMsg" partnerLink="account" portType="acc:AccountSystem"> <documentation>get current account balance</documentation> <correlations> <correlation initiate="no" pattern="out" set="customerInteraction" /> </correlations> </invoke> <assign name="EvaluateNewBalance" validate="no"> <documentation> evaluate amount that would remain in account </documentation> <copy> <from>$balanceMsg.balance - $balanceChange.amount</from> <to variable="newBalance" /> </copy> </assign> <if name="BalanceDecision"> <documentation>decide outcome of withdraw request</documentation> <condition>$newBalance >= 0.0</condition> <sequence name="PositiveBalanceSeq"> <documentation>accept withdrawal</documentation> <assign name="PrepareWithdraw" validate="no"> <documentation>populate balance update request</documentation> <copy> <from part="customerName" variable="balanceChange" /> <to part="body" variable="accountOperation"> <query>customerName</query> </to> </copy> <copy> <from>-$balanceChange.amount</from> <to part="body" variable="accountOperation"> <query>amount</query> </to> </copy> </assign> <invoke inputVariable="accountOperation" name="UpdateBalance" operation="updateBalance" outputVariable="balanceMsg" partnerLink="account" portType="acc:AccountSystem"> <documentation>post negative balance update</documentation> <correlations> <correlation initiate="no" pattern="out" set="customerInteraction" /> </correlations> </invoke> <reply name="TellNewBalance" operation="withdraw" partnerLink="atm" portType="atm:FrontEnd" variable="balanceMsg"> <documentation>return new balance to ATM</documentation> </reply> </sequence> <else> <sequence name="NegativeBalanceSeq"> <documentation>reject withdrawal</documentation> <assign name="PrepareRejection" validate="no"> <documentation>populate withdraw fault</documentation> <copy> <from part="customerName" variable="balanceChange" /> <to part="detail" variable="insufficientFunds"> <query>customerName</query> </to> </copy> <copy> <from part="balance" variable="balanceMsg" /> <to part="detail" variable="insufficientFunds"> <query>amount</query> </to> </copy> </assign> <reply name="RejectWithdraw" operation="withdraw" partnerLink="atm" portType="atm:FrontEnd" variable="insufficientFunds" faultName="atm:insufficientFunds"> <documentation>return fault to ATM</documentation> </reply> </sequence> </else> </if> </sequence> </onMessage> <onMessage operation="logOff" partnerLink="atm" portType="atm:FrontEnd" variable="customerMsg"> <correlations> <correlation initiate="no" set="customerInteraction" /> </correlations> <assign name="SetLoggedOff" validate="no"> <documentation>turn off logged flag</documentation> <copy> <from>false()</from> <to variable="logged" /> </copy> </assign> </onMessage> <onAlarm> <for>'PT2M'</for> <assign name="SetLoggedOff" validate="no"> <documentation> turn off logged flag after a period of inactivity </documentation> <copy> <from>false()</from> <to variable="logged" /> </copy> </assign> </onAlarm> </pick> </while> </sequence> </scope> </onMessage> <onMessage operation="disconnect" partnerLink="atm" portType="atm:FrontEnd" variable="ticketMsg"> <correlations> <correlation initiate="no" set="atmInteraction" /> </correlations> <assign name="SetDisconnected" validate="no"> <documentation>turn off connected flag</documentation> <copy> <from>false()</from> <to variable="connected" /> </copy> </assign> </onMessage> </pick> </while> </scope> </sequence></process>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -