|
In questa fase riconosciamo i vari stati in cui può trovarsi l'applicazione. Analizzando i requisiti, tali stati coincidono per lo più con le diverse schermate che vorremmo presentare all'operatore. Enumeriamo ora gli stati principali: | Start: | pagina principale dell'applicazione; all'operatore viene presentata una schermata di login. | | NewOrder: | l'operatore e` stato identificato ed inserisce alcune informazioni inerenti la pratica, per avviare la procedura. | | OrderLine: | i dati della pratica sono stati inseriti e la pratica è stata spedita (ad esempio tramite mail o direttamente invocando un webservice remoto) e l'operatore e` in attesa di una risposta dalla "controparte" (l'azienda cosiddetta Carrier). Da qui la pratica può essere rifiutata dal Carrier, accettata entro 24h o accettate dopo le 24h (equivarra` ad essere rifiutata). | | StopLineActivation: | la pratica e` stata rifiutata dal Carrier. | PerformLineActivation:
| il Carrier ha confermato che la pratica e` entrata in lavorazione. A questo punto l'operatore attende unacomunicazione da parte del Carrier (es. tramite email o fax o telefono) e proseguira` in uno dei seguenti modi: - annullerà la pratica (ad es. il Carrier ha incontrato qualche ostacolo di natura commerciale o tecnica)
- sospenderà la pratica (ad es. come sopra, ma il Carrier ha sentore che l'ostacolo sara` solo momentaneo)
- espletare la pratica entro 15gg (cioe` il lavoro e` stato portato a compimento senza ostacoli)
- espletare la pratica dopo 15 gg (in quel caso equivarra` ad un annullamento per aver superato i limiti temporali fissati).
| | SuspendLineActivation: | la pratica è stata momentaneamente sospesa dal Carrier dopo essere entrata in lavorazione; da qui la pratica potrà essere: - annullata dal Carrier
- ripristinata entro 15gg dall'inizio dei lavori
- ripristinata dopo 15gg dall'inizio dei lavori (equivarra` ad un annullamento).
| | LineActivationPerformed: | i lavori sulla pratica da parte del Carrier sono terminati; a questo punto l'operatore potrà: - annullare la pratica (ad es. per qualche novita` sopraggiunta nel frattempo)
- verificare che la nuova connessione di rete sia attiva
- verificare che la nuova connessione di rete non è attiva come previsto
|
Potete vedere una immagine dell'automa che abbiamo realizzato in figura. Alcuni stati non compaiono nella descrizione sopra perchè sono in un certo senso "secondari", non funzionali alla procedura di attivazione della nuova linea quanto piuttosto a garantire che (ad esempio) una volta terminata una procedura di attivazione si possa iniziare con una nuova procedura.
Descrizione dell'automa in XML (il codice completo è contenuto nel file DeliveryWeb.xml)
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <Automa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:noNamespaceSchemaLocation="automa.xsd"
5 Id="Delivery">
6 <GlobalState>
7 <!-- this variable stores user's choices during
8 session (through GET) -->
9 <Variable Name="operator" Type="string" />
10 <!-- this variable stores user's choices during
11 session (through GET) -->
12 <Variable Name="lineChosen" Type="string" />
13 </GlobalState>
14 <Clocks>
15 <Variable Name="cStart" />
16 <Variable Name="cSend" />
17 <Variable Name="cProcessing" />
18 </Clocks>
19 <ActionPool>
20 <!-- ACTION -->
21 <Action Id="startPage" Type="object">
22 <Input>
23 <Parameter Name="operator" />
24 <Parameter Name="lineChosen" />
25 </Input>
26 <System Path="../test/DeliveryWeb.lib.php"
27 Class="DeliveryWeb"
28 Name="startPage"/>
29 </Action>
30 ...
31 <!-- METRICHE -->
32 <Action Id="startMetric" Type="object">
33 <Input>
34 <Parameter Name="operator" />
35 <Parameter Name="lineChosen" />
36 </Input>
37 <System Path="../test/DeliveryWeb.lib.php"
38 Class="DeliveryWeb"
39 Name="startMetric" />
40 <Enumeration Type="string">
41 <Const Value="CREATE"/>
42 </Enumeration>
43 </Action>
44 ...
45 </ActionPool>
46 <States>
47 <State Id="Start"
48 IdAction="startPage"
49 IdMetric="startMetric"
50 Interactive="true">
51 </State>
52 <State Id="NewOrder"
53 IdAction="newOrderPage"
54 IdMetric="newOrderMetric"
55 Interactive="true">
56 </State>
57 <State Id="OrderLine"
58 IdAction="orderLinePage"
59 IdMetric="orderLineMetric"
60 Interactive="true">
61 </State>
62 ...
63 </States>
64 <FinalStates>
65 </FinalStates>
66 <InitialState IdState="Start"/>
67 <Transitions>
68 <Transition IdInputState="Start"
69 IdOutputState="NewOrder"
70 MetricValue="CREATE">
71 <ClockReset ClockVar="cStart"/>
72 <Transition/>
73 <Transition IdInputState="NewOrder"
74 IdOutputState="OrderLine"
75 MetricValue="SEND">
76 <ClockReset ClockVar="cSend"/>
77 </Transition>
78 ...
79 </Transitions>
80 </Automa>
|