Requisito Utente
Deve essere possibile l'esecuzione di uno step solamente se il precedente è stato eseguito e ha uno stato valido (passed/failed)
Soluzione Proposta
Vengono rese disponibili le azioni in base allo stato dello step precedente oppure se lo step in questione è il primo.
Per step precedente o successivo si fa riferimento al campo che indica l'ordine ("ST_ORDER").
_______________________________________________________________________
Implementazione sul Prodotto
La logica di funzionamento è per la maggior parte all'interno della sub Step_MoveTo in cui viene esaminato lo step selezionato. Vengono subito disabilitate alcune azioni ed eventualmente abilitate secondo questa logica:
- step selezionato è il primo
oppure
- se lo stato dello step precedente ha un valore valido (passed/failed)
Sono state individuate le seguenti azioni su cui agire:
- Dare il Pass allo step selezionato: act_pass_selected
- Dare il Fail allo step selezionato: act_fail_selected
- Aggiunta Step: act_add_step
- Cancellazione Step: act_del
- Aggiunta Allegato: act_attach
- Nuovo Defect: act_add_bug
e anche:
- Pin OnTop: act_pin_unpin
- Ritorno alla Vista precedente: act_back
- Vista a Mini Step: act_ministeps
Questo il codice implementato:
1. Common Module - Funzione ActionCanExecute
'questo serve solo per richiamare la ActionCanExecute del relativo modulo
if ActiveModule = "ManualRun" then
ActionCanExecute = ManualRun_ActionCanExecute(ActionName)
end if
2. Manual Runner Module - Funzione ManualRun_ActionCanExecute
Dim res
res = True
Select Case ActionName
Case "act_add_step", "act_del", "act_pin_unpin", "act_back", "act_ministeps":
res = False 'Disabilito per tutti le azioni indicate
End Select
'ritorno valore della funzione
ManualRun_ActionCanExecute = res
3. Manual Runner Module - Sub Step_MoveTo
Dim MyRun
'Creazione oggetto MyRun
Set MyRun = TDConnection.RunFactory.Item(Run_Fields("RN_RUN_ID").Value)
'disabilito tutti i pulsanti/azioni
Actions.Action("act_add_step").Enabled = False
Actions.Action("act_del").Enabled = False
Actions.Action("act_pin_unpin").Enabled = False
Actions.Action("act_back").Enabled = False
Actions.Action("act_ministeps").Enabled = False
Actions.Action("act_pass_selected").Enabled = False
Actions.Action("act_fail_selected").Enabled = False
Actions.Action("act_attach").Enabled = False
Actions.Action("act_add_bug").Enabled = False
'disabilito anche tuttti i campi dello step su cui sono posizionato
for k=1 to Step_Fields.Count
Step_Fields.FieldById(k).IsReadOnly=True
next
'Devo abilitare solo le azioni per dare il passed, failed, aggiungere allegati e bug.
'Secondo quanto indicato sopra (Primo Step o altro che può essere eseguito perché
'lo step precedente ha uno stato valido (passed/failed)).
'Verifico il numero d'ordine dello step selezionato
Dim nr_Ord
Dim thisStep
'creo oggetto Step
set thisStep = MyRun.StepFactory.Item(Step_Fields.Field("ST_ID").Value)
'mi salvo il numero d'ordine
nr_Ord = thisStep.Field("ST_STEP_ORDER")
Select Case nr_Ord
'se il numero d'ordine è 1 allora abilito le azioni
Case 1: Step_EnableActions
'altrimenti devo verificare lo stato dello step precedente
Case else:
Step_VerifyPrevStepStatus(thisStep)
End Select
4. Manual Runner Module - Step_EnableActions (nuova Sub da creare nel modulo)
Sub Step_EnableActions
On Error Resume Next
Actions.Action("act_pass_selected").Enabled = True
Actions.Action("act_fail_selected").Enabled = True
Actions.Action("act_attach").Enabled = True
Actions.Action("act_add_bug").Enabled = True
'Abilito il solo campo in cui inserire il risultato attuale.
'volendo si possono abilitare anche altri campi o tutti
Step_Fields.Field("ST_ACTUAL").IsReadOnly = False
On Error Goto 0
End Sub
5. Manual Runner Module - Step_VerifyPrevStepStatus (nuova Sub da creare nel modulo)
Sub Step_VerifyPrevStepStatus(myStep)
On Error Resume Next
Dim nr_Ord_Prev 'variabile per il numero d'ordine dello step
precedente
Dim Run_StepList 'la lista degli step dell'oggetto run
Dim myPrevStep 'l'oggetto step precedente
'mi carico il numero d'ordine precedente ( -1)
nr_Ord_Prev = myStep.Field("ST_STEP_ORDER") - 1
'creo oggetto Lista degli Step
set Run_StepList = TDConnection.RunFactory.Item(Run_Fields("RN_RUN_ID").Value).StepFactory.NewList("")
'Ciclo For per analizzare stato dello step precedente
for each el_St in Run_StepList
'verifico se lo step in questione è quello da analizzare (il precedente)
if el_St.Field("ST_STEP_ORDER") = nr_Ord_Prev then
'Step precedente, mi creo l'oggetto
set myPrevStep = el_St
'Eseguo un refresh dell'oggetto per l'aggiornamento dello stato
myPrevStep.Post
myPrevStep.Refresh
'Verifico lo stato dello step chiedendomi se è "Passed" o "Failed"
if myPrevStep.Status = "Passed" Or _
myPrevStep.Status = "Failed" then
'Abilito le azioni per lo step corrente (myStep)
Step_EnableActions
end if
end if
next
On Error Goto 0
End Sub