Solved
Combining/Joining DataSets
Hi Everyone.
I am unable to join datasets and suing below code.
Purpose: is to combine the outcome of 2 method queries WF Status and CertificationStatus to get a single table.
Kindly help with your comments or guidance:
Imports System
Imports System.Collections.Generic
Imports System.Data
Imports System.Data.Common
Imports System.Globalization
Imports System.IO
Imports System.Linq
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Imports OneStream.Finance.Database
Imports OneStream.Finance.Engine
Imports OneStream.Shared.Common
Imports OneStream.Shared.Database
Imports OneStream.Shared.Engine
Imports OneStream.Shared.Wcf
Imports OneStream.Stage.Database
Imports OneStream.Stage.Engine
Namespace OneStream.BusinessRule.DashboardDataSet.GetWFStatusandCertification
Public Class MainClass
Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As DashboardDataSetArgs) As Object
Try
Select Case args.FunctionType
Case Is = DashboardDataSetFunctionType.GetDataSetNames
Dim DSnames As New List(Of String)()
DSnames.Add("GetWFStatusandCertificationF")
Return DSnames
Case Is = DashboardDataSetFunctionType.GetDataSet
If args.DataSetName.XFEqualsIgnoreCase("GetWFStatusandCertificationF") Then
Dim WFTable As DataTable = New DataTable("WFSTATUS")
Dim CertTable As DataTable = New DataTable("WFCertSTATUS")
Dim CertTable1 As DataTable = New DataTable("WFCertSTATUS1")
Dim CertTable2 As DataTable = New DataTable("WFCertSTATUS2")
Dim WFTime As String = "2023M12" 'args.NameValuePairs("2023M12")
Dim WFScenario As String = "Actuals" 'args.NameValuePairs("Actuals")
Dim WFName As String = "P1000 Group" 'args.NameValuePairs("P1000 Prudential Group")
Dim methodTypeId As String
Dim methodQuery As String
Dim resultDataTableName As String
Using dbConnApp As DBConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
'Create Tables in Memory
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")
methodTypeId = XFCommandMethodTypeId.WorkflowStatus
methodQuery = "{" & WFName &"}{" & WFScenario & "}{" & WFTime & "}{AllProfiles}{Descendants}{}"
resultDataTableName = "WFSTATUS"
Dim customSubVars As New Dictionary(Of String, String)
Dim objDataSet As DataSet = BRApi.Database.ExecuteMethodCommand(dbConnApp,methodTypeId,methodQuery, resultDataTableName,customSubVars)
For Each Row As DataRow In objDataSet.Tables("WFSTATUS").Rows
Dim easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
Dim EST = TimeZoneInfo.ConvertTimeFromUtc(Row.Item("LastExecutedStepTime"), easternZone)
WFTable.Rows.Add(Row.Item("ProfileKey"),Row.Item("ProfileName"),Row.Item("ScenarioName"),Row.Item("TimeName"),Row.Item("StatusText"),Row.Item("LastExecutedStepStatus"),Row.Item("LastExecutedStepTime"),EST)
Next
'Return WFTable
End Using
Using DBConAppForCert1 As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
CertTable1.Columns.Add("ProfileName")
CertTable1.Columns.Add("ProfileKey")
CertTable1.Columns.Add("ScenarioKey")
CertTable1.Columns.Add("ScenarioName")
CertTable1.Columns.Add("TimeKey")
CertTable1.Columns.Add("TimeName")
methodTypeId = XFCommandMethodTypeId.CertificationForWorkflowUnit
MethodQuery = "{" & WFName & "}" & "{" & WFScenario & "}" & "{" & WFTime & "}" &"{True}" &"{}"
resultDataTableName = "WFCertSTATUS1"
Dim CustomSubVars As New Dictionary(Of String, String)
Dim ObjDataSet As DataSet = BRApi.Database.ExecuteMethodCommand(DBConAppForCert1,methodtypeid,methodQuery,resultDataTableName,CustomSubVars)
For Each Row As DataRow In ObjDataSet.Tables("WFCertSTATUS1").Rows
CertTable1.Rows.Add(Row.Item("ProfileName"),Row.Item("ProfileKey"),Row.Item("ScenarioKey"),Row.Item("ScenarioName"),Row.Item("TimeKey"),Row.Item("TimeName"))
Next
' Return CertTable1
End Using
Using DBConAppForCert2 As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
CertTable2.Columns.Add("ProfileKey")
CertTable2.Columns.Add("ScenarioKey")
CertTable2.Columns.Add("TimeKey")
CertTable2.Columns.Add("SignOffState")
CertTable2.Columns.Add("UserName")
CertTable2.Columns.Add("TimeStamp")
methodTypeId = XFCommandMethodTypeId.CertificationForWorkflowUnit
MethodQuery = "{" & WFName & "}" & "{" & WFScenario & "}" & "{" & WFTime & "}" &"{True}" &"{}"
resultDataTableName = "WFCertSTATUS2"
Dim CustomSubVars As New Dictionary(Of String, String)
Dim ObjDataSet As DataSet = BRApi.Database.ExecuteMethodCommand(DBConAppForCert2,methodTypeId,MethodQuery,resultDataTableName,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
' Return CertTable2
End Using
'
' Return WFTable
Dim DS_CertStatus As New DataSet("DS_CertificationStatus")
DS_CertStatus.Tables.Add(WFTable)
' DS_CertStatus.Tables.Add(CertTable1)
DS_CertStatus.Tables.Add(CertTable2)
DS_CertStatus.Relations.Add("ProfileKeyRelation",DS_CertStatus.Tables(0).Columns("ProfileKey"),DS_CertStatus.Tables(1).Columns("ProfileKey"),False)
Return DS_CertStatus
End If
End Select
Return Nothing
Catch ex As Exception
Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
End Try
End Function
End Class
End Namespace
