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:
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:
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
______________________________________________________________________