Report Cambi di Stato di un Defect tra 2 date

 

Il report che sto per proporre serve per verificare i cambi di stato che sono intercorsi tra 2 date in input.

 

Prerequisito: ogni volta che viene effettuato un cambio di stato (Bug_FieldCanChange = True) il campo DEVE essere bloccato (ReadOnly = True).

 

Strutturo il report con i seguenti campi:

  • ID Bug
  • Data di Rilevazione
  • Utente
  • Data del Cambio Stato
  • Vecchio Valore
  • Nuovo Valore

 

 

Per questo tipo di estrazioni devo far riferimento a 2 tabelle in cui vengono registrate le informazioni relative alla Storia di un attributo, se questo viene messo sotto AUDIT: AUDIT_LOG e AUDIT_PROPERTIES.

 

 Effettuerò la seguente query:

"Select bg_bug_id as ID_Bug, bg_detection_date as RilevatoInData, T1.au_user as Utente, T1.au_time as DataCambiamento, T2.ap_old_value as ValoreVecchio, T2.ap_new_value as ValoreNuovo " & _
"from BUG join (select au_user, au_action_id, au_entity_type, au_entity_id, au_time from audit_log) as T1 on T1.au_entity_id = bg_bug_id " &

"join (select ap_action_id, ap_old_value, ap_new_value,ap_field_name from audit_properties) as T2 on T2.ap_action_id = T1.au_action_id " & _
  "where (T1.au_time >= '" & Dal & "' and T1.au_time < DATEADD(day,1,'" & Al & "')) and (T1.au_entity_type like 'BUG') and (T2.ap_field_name like 'BG_STATUS') " & _
"ORDER BY 1,4 "

 

"Dal" e "Al"  saranno 2 variabili contenenti le date del range di riferimento.

 

______________________________________________________________________

 

Dettagli e Implementazione:

  

Gli step da effettuare sono 3:

  • Creazione di un tasto nella sezione Defect per innescare la Action che chiamiamo actReportCambioStato
  • Inserimento del richiamo alla corretta Sub all'interno della Funzione ActionCanExecute
  • Creazione Sub Defect_ReportCambioStato

  

1. Per il primo punto rimando alla sezione WorkFlow Script Editor.

 

2. Richiamo della Sub all'interno della Funzione ActionCanExecute

Function ActionCanExecute(ActionName)

On Error Resume Next

Dim Res

Res = True

  

if ActionName = "actReportCambioStato" then Defect_ReportCambioStato

  

ActionCanExecute = Res

On Error Goto 0

End Function

 

  

3. Codice della sub Defect_ReportCambioStato

Sub Defect_ReportCambioStato

On Error Resume Next

Dim DataDa, DataA, Dal, Al

Dim MyComm, RecSet, i, strQuery, bolCreaExcel

Dim objXLS, objWkb, objWks

 

'questo booleano viene messo a True se viene estratto qualcosa 

bolCreaExcel = False  

 

DataDa = InputBox("Inserire Data Inizio","Quality Center - Data Iniziale", "01/01/2010")

  

if DataDa = "" then Exit Sub

  

DataA = InputBox("Inserire Data Fine","Quality Center - Data Finale", date)

  

if DataA = "" then Exit Sub

  

  

'Controllo almeno che le date siano coerenti, DataDa < DataA

if CDate(DataDa) > CDate(DataA) then

     msgbox "Le date inserite non sono corrette!", vbCritical + vbSystemModal, "Errore Inserimento Date"

     exit Sub

end if

  

'Formatto le date come MM/GG/AAAA

Dal = split(DataDa,"/")(1) & split(DataDa,"/")(0) & split(DataDa,"/")(2)

Al = split(DataA,"/")(1) & split(DataA,"/")(0) & split(DataA,"/")(2)

  

'Carico la Query in una variabile stringa

strQuery = 

"Select bg_bug_id as ID_Bug, bg_detection_date as RilevatoInData, " & _

"T1.au_user as Utente, T1.au_time as DataCambiamento, " & _

"T2.ap_old_value as ValoreVecchio, T2.ap_new_value as ValoreNuovo " & _
"From BUG " & _

"Join (select au_user, au_action_id, au_entity_type, au_entity_id, " & _

"au_time from audit_log) as T1 on T1.au_entity_id = bg_bug_id " & _ 

"Join (select ap_action_id, ap_old_value, ap_new_value, ap_field_name from " & _

"audit_properties) as T2 on T2.ap_action_id = T1.au_action_id " & _
"Where (T1.au_time >= '" & Dal & _

"' and T1.au_time < DATEADD(day,1,'" & Al & "')) " & _

"and (T1.au_entity_type like 'BUG') " & _

"and (T2.ap_field_name like 'BG_STATUS') " & _
"ORDER BY 1,4 "

  

'Creo oggetto Command

set MyComm = TDConnection.Command

'Carico il testo della query da eseguire

MyComm.CommandText = strQuery

 

'Eseguo Query

set RecSet = MyComm.Execute

 

if RecSet.RecordCount > 0 then

   bolCreaExcel = True

end if

 

 

if bolCreaExcel then

   'Creo Foglio Excel

   set objXLS = CreateObject("Excel.Application")

   objXLS.Visible = False

   set objWkb = objXLS. WorkBooks.Add

   set objWks = objWkb.WorkSheets(1)

   objWks.Name = "Trend Defect"

 

   'scrivo l'intestazione del foglio excel

   objWks.Cells(1,1).Value = "ID Bug"

   objWks.Cells(1,2).Value = "Data di Rilevazione"

   objWks.Cells(1,3).Value = "Utente"

   objWks.Cells(1,4).Value = "Data del Cambiamento"

   objWks.Cells(1,5).Value = "Vecchio Valore"

   objWks.Cells(1,6).Value = "Nuovo Valore"

 

   'Mi posiziono al primo record

   RecSet.First

 

   'mi carico il numero di Righe e di Colonne

   intRow = RecSet.RecordCount

   intCol = RecSet.ColCount 

 

   'Ciclo per tutto il RecordSet

   Do while Not(RecSet.EOR)

        for j = 2 to intRow + 1

            for i = 0 to intCol - 1

                 objWks.Cells(j,i+1).Value = RecSet.FieldValue(i)

            next

        next     

        RecSet.Next

   Loop

 

   'Salvataggio File Excel

   objWkb.SaveAs "c:\temp\TrendDefect_" & split(date,"/")(2) & split(date,"/")(1) & split(date,"/")(0) & ".xls"

 

   objWkb.Close

   objXLS.Quit

 

 else

 

   msgbox "Nessun Cambio Stato Trovato per i Defect nel periodo: " & Dal & " - " & Al, vbExclamation + vbSystemModal, "QC - Nessun Dato Trovato"

 

end if

 

set objWks = Nothing

set objWkb = Nothing

set objXLS = Nothing

 

set RecSet = Nothing

set MyComm = Nothing

 

 

 

On Error Goto 0

End Sub

 

______________________________________________________________________ 

 

Pag: <    >