通用页面流程框架及实例介绍(4)BTT 通用页面流程设计和各种流程后续2
 
- UID
- 1066743
|

通用页面流程框架及实例介绍(4)BTT 通用页面流程设计和各种流程后续2
XUI 页面流程(XUI Flow Processor)XUI 页面流程是 Java 富客户端的页面流程,是 BTT 两种 Java 富客户端页面流程中的一种。 XUI 页面流程把一个交易中的所有 XML UI 页面、业务流程和业务操作组成一个流程,并且根据状态机进行业务的执行和页面的导航。通用页面流程中的 XUIProcessor 就是用于驱动 XUI 富客户端页面流程的。
图 7. XUI 富客户端页面流程和流程之间的关系 XUI 富客户端页面流程和 Web 页面流程一样,是异步的,具有 XUI 页面状态(state),超时机制等。下面是同样的信用卡申请流程的 XUI 页面流程定义。我们可以看出,其原理和 Web 页面流程非常类似。
清单 3. XUI 富客户端页面流程(XUI Flow Processor)实例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
| <!-- xuiProcessor表示XUI富客户端页面流流程, id唯一标示这个xui富客户端页面流程-->
<xuiProcessor context="creditCardsCtx" id="creditCardsProc">
<!-- 开始状态,执行initialStep业务操作,并根据结果导航到下一个状态-->
<state id="initial" type="initial">
<entryActions>
<Step id="initialStep"
implClass="com.ibm.btt.rcp.sample.operation.step.InitialStep" />
</entryActions>
<transitions>
<transition id="initialStep.ok"
targetState="creditCardsWellcome" />
<transition id="initialStep.error"
targetState="finalNotOk" />
</transitions>
</state>
<!-- 欢迎页面状态。type="page"表示是页面状态,
typeIdInfo="jar:///xui/firstStep.xui"表示页面内容对应的XML。-->
<xuiState id="creditCardsWellcome" type="page"
typeIdInfo="jar:///xui/firstStep.xui">
<!-- 根据页面上出发的事件,转到下一个状态creditHistoryOpState。
页面上会使用StateChangeAction,发送"history"事件 -->
<transitions>
<transition context="creditCardsWellcome_history_Ctx"
id="creditCardsWellcome.history"
targetState="creditHistoryOpState" />
</transitions>
</xuiState>
<!-- 业务状态,执行相应的业务操作,
type="operation"表示这个状态是一个业务操作-->
<state id="creditHistoryOpState" type="operation">
<entryActions>
<!-- 执行相应的业务操作,
operationName="creditHistoryOp" 表示要执行的业务操作的ID-->
<executeOperationAct id="creditHistoryAct" linkContextTo="processor"
operationName="creditHistoryOp" />
</entryActions>
<!-- 根据业务操作的返回结果,转移到XUI页面流程的下一个状态-->
<transitions>
<transition id="creditHistoryAct.accountExists"
targetState="creditCardsPage" />
<transition id="creditHistoryAct.newAccount"
targetState="financialInfoState" />
<transition id="creditHistoryAct.error"
targetState="finalNotOk" />
</transitions>
</state>
<!-- 子流程状态,这是一个特殊的页面状态-->
<xuiState id="financialInfoState">
<entryActions>
<!-- executeXuiSubflowAct表示执行一个子页面流程,
processor="financialInfoProc"表示子页面流程的ID,
XUI富客户端页面流程会根据ID并且执行子页面流程-->
<executeXuiSubflowAct id="initialStep"
processor="financialInfoProc" />
</entryActions>
<!-- 根据子页面流程的结果,XUI富客户端页面流程执行下一个流程状态 -->
<transitions>
<transition id="initialStep.ok"
outputMapFmt="financialInfoToCreditApplFormat"
targetState="creditCardsPage" />
<transition id="initialStep.notOK"
outputMapFmt="errorMessagesMapper"
targetState="finalNotOK" />
<transition id="initialStep.canceled"
targetState="creditCardsWellcome" />
</transitions>
</xuiState>
<!-- 选择信用卡类型页面状态,type="page"表示这个状态是页面,
typeIdInfo="jar:///xui/chooseCard.xui"表示页面内容。-->
<xuiState id="creditCardsPage" type="page"
typeIdInfo="jar:///xui/chooseCard.xui">
<transitions>
<!-- 如果用户信用卡选择成功,
转到流程的下一个状态creditCardConfirmationPage -->
<transition id="creditCardsPage.ok"
targetState="creditCardConfirmationPage" />
<!-- 如果用户取消了信用卡申请,则转到流程的下一个状态finalOK -->
<transition id="creditCardsPage.cancel"
targetState="creditCardsWellcome" />
</transitions>
</xuiState>
<!-- 信用卡确认信息页面,type="page"表示这个状态是页面,
typeIdInfo="jar:///xui/confirm.xui"表示页面内容 -->
<xuiState id="creditCardConfirmationPage" type="page"
typeIdInfo="jar:///xui/confirm.xui">
<transitions>
<!-- 如果用户确认了信用卡信息,
则转移到下一个流程状态creditCardProcessingOpState。 -->
<transition id="creditCardConfirmationPage.ok"
targetState="creditCardProcessingOpState" />
<!-- 如果用户取消了信用卡申请,则转到流程的下一个状态finalOK -->
<transition id="creditCardConfirmationPage.cancel"
targetState="finalOk" />
</transitions>
</xuiState>
<!-- 信用卡处理逻辑状态 -->
<state id="creditCardProcessingOpState">
<entryActions>
<!-- 执行业务操作,operationName="creditCardProcessingOp"表示业务操作的ID -->
<executeOperationAct id="creditCardProcAct"
linkContextTo="processor"
operationName="creditCardProcessingOp" />
</entryActions>
<transitions>
<!-- 如果信用卡处理申请提交成功,则转移到下一个状态finalOk。 -->
<transition id="creditCardProcAct.ok"
targetState="finalOk" />
<!-- 如果信用卡处理申请提交失败,则转移到下一个状态finalNotOK。 -->
<transition id="creditCardProcAct.error"
targetState="finalNotOk" />
</transitions>
</state>
<!-- 申请成功页面。type="final"表示这个状态是流程的结束状态,
finalPage="jar:///xui/success.xui"表示页面内容 -->
<xuiState id="finalOk" type="final" typeIdInfo="ok"
finalPage="jar:///xui/success.xui" />
<!-- 申请错误页面。type="final"表示这个状态是流程的结束状态,
finalPage="jar:///xui/error.xui"表示错误页面内容 -->
<xuiState id="finalNotOk" type="final" typeIdInfo="error"
finalPage="jar:///xui/error.xui" />
</xuiProcessor>
|
|
|
|
|
|
|