Forum Discussion
RobbSalzmann
21 days agoValued Contributor II
It looks like you need to filter on the latest certifications - see the *** code sections:
Private Function GetWFStatusandCertificationF(ByVal si As SessionInfo, ByVal args As DashboardDataSetArgs) As DataTable
' Table declarations
Dim WFTable As New DataTable("WFSTATUS")
Dim CertTable2 As New DataTable("WFCertSTATUS2")
Dim CombinedTable As New DataTable("CombinedWFandCertStatus")
' Columns for final output
CombinedTable.Columns.Add("ProfileKey")
CombinedTable.Columns.Add("ProfileName")
CombinedTable.Columns.Add("ScenarioName")
CombinedTable.Columns.Add("TimeName")
CombinedTable.Columns.Add("StatusText")
CombinedTable.Columns.Add("LastExecutedStepStatus")
CombinedTable.Columns.Add("LastExecutedStepTimeUTC")
CombinedTable.Columns.Add("LastExecutedStepTimeEST")
CombinedTable.Columns.Add("SignOffState")
CombinedTable.Columns.Add("UserName")
CombinedTable.Columns.Add("TimeStamp")
' Parameters for WF query
Dim WFName As String = "ASIA"
Dim WFScenario As String = "Actual"
Dim WFTime As String = "2025M1"
Dim methodTypeId As String = XFCommandMethodTypeId.WorkflowStatus
Dim resultDataTableName As String = "WFSTATUS"
Dim methodQuery As String
Dim customSubVars As New Dictionary(Of String, String)
' Construct WF query
methodQuery = "{" & WFName & "}{" & WFScenario & "}{" & WFTime & "}{AllProfiles}{Descendants}{ProfileName like '*.Confirm*'}"
' Set up WFTable columns
WFTable.Columns.Add("ProfileKey")
WFTable.Columns.Add("ProfileName")
WFTable.Columns.Add("ScenarioName")
WFTable.Columns.Add("TimeName")
WFTable.Columns.Add("StatusText")
WFTable.Columns.Add("LastExecutedStepStatus")
WFTable.Columns.Add("LastExecutedStepTimeUTC")
WFTable.Columns.Add("LastExecutedStepTimeEST")
' Fetch workflow status records
Using dbConnApp As DBConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
Dim objDataSet As DataSet = BRApi.Database.ExecuteMethodCommand(dbConnApp, methodTypeId, methodQuery, resultDataTableName, customSubVars)
For Each row As DataRow In objDataSet.Tables("WFSTATUS").Rows
WFTable.Rows.Add(row.Item("ProfileKey"), row.Item("ProfileName"), row.Item("ScenarioName"),
row.Item("TimeName"), row.Item("StatusText"), row.Item("LastExecutedStepStatus"),
row.Item("LastExecutedStepTime"), row.Item("LastExecutedStepTime"))
Next
End Using
' Set up Certification status table
methodTypeId = XFCommandMethodTypeId.CertificationForWorkflowUnit
methodQuery = "{" & WFName & "}{" & WFScenario & "}{" & WFTime & "}{True}{}"
CertTable2.Columns.Add("ProfileKey")
CertTable2.Columns.Add("ScenarioKey")
CertTable2.Columns.Add("TimeKey")
CertTable2.Columns.Add("SignOffState")
CertTable2.Columns.Add("UserName")
CertTable2.Columns.Add("TimeStamp")
' Fetch certification status records
Using DBConnAppForCert2 As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
Dim objDataSet As DataSet = BRApi.Database.ExecuteMethodCommand(DBConnAppForCert2, methodTypeId, methodQuery, "WFCertSTATUS2", customSubVars)
For Each row As DataRow In objDataSet.Tables("WFCertSTATUS2_SignOffGroups").Rows
CertTable2.Rows.Add(row.Item("ProfileKey"), row.Item("ScenarioKey"), row.Item("TimeKey"),
row.Item("SignOffState"), row.Item("UserName"), row.Item("TimeStamp"))
Next
End Using
' Loop through each workflow row and attach the most recent certification row (by TimeStamp)
For Each wfRow As DataRow In WFTable.Rows
Dim profileKey As Object = wfRow("ProfileKey")
' *** Select matching certification rows for only this profileKey
Dim certRows As DataRow() = CertTable2.Select("ProfileKey = '" & profileKey.ToString() & "'")
' *** Added to Get only the latest cert row by TimeStamp
Dim latestCertRow As DataRow = certRows _
.OrderByDescending(Function(r) Convert.ToDateTime(r("TimeStamp"))) _
.FirstOrDefault()
If latestCertRow IsNot Nothing Then
Dim newRow As DataRow = CombinedTable.NewRow()
' Copy WF data
newRow("ProfileKey") = wfRow("ProfileKey")
newRow("ProfileName") = wfRow("ProfileName")
newRow("ScenarioName") = wfRow("ScenarioName")
newRow("TimeName") = wfRow("TimeName")
newRow("StatusText") = wfRow("StatusText")
newRow("LastExecutedStepStatus") = wfRow("LastExecutedStepStatus")
newRow("LastExecutedStepTimeUTC") = wfRow("LastExecutedStepTimeUTC")
newRow("LastExecutedStepTimeEST") = wfRow("LastExecutedStepTimeEST")
' Copy only the latest certification row
newRow("SignOffState") = latestCertRow("SignOffState")
newRow("UserName") = latestCertRow("UserName")
newRow("TimeStamp") = latestCertRow("TimeStamp")
CombinedTable.Rows.Add(newRow)
End If
Next
' Return final combined result
Return CombinedTable
End Function
Related Content
- 2 years ago
- 2 years ago
- 2 years ago