首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

通用页面流程框架及实例介绍(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>

返回列表