Forum Discussion

SKMundra's avatar
SKMundra
New Contributor III
6 days ago
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...
  • RobbSalzmann's avatar
    RobbSalzmann
    6 days ago

    sry about that, here's an update, Monday morning, I misread your initial code...
    Here's how you can combine the results, using what you had:

    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
                                Return GetWFStatusandCertificationF(si, args)
                            End If
    
                    End Select
                    Return Nothing
                Catch ex As Exception
                    Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
                End Try
            End Function
    
            Private Function GetWFStatusandCertificationF(ByVal si As SessionInfo, ByVal args As DashboardDataSetArgs) As DataTable
                Dim WFTable As New DataTable("WFSTATUS")
                Dim CertTable2 As New DataTable("WFCertSTATUS2")
                Dim CombinedTable As New DataTable("CombinedWFandCertStatus")
    
                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")
    
                Dim WFName As String = "P1000 Prudential Group"
                Dim WFScenario As String = "Actuals"
                Dim WFTime As String = "2023M12"
                Dim methodTypeId As String = XFCommandMethodTypeId.WorkflowStatus
                Dim resultDataTableName As String = "WFSTATUS"
                Dim methodQuery As String
                Dim customSubVars As New Dictionary(Of String, String)
    
                methodQuery = "{" & WFName & "}{" & WFScenario & "}{" & WFTime & "}{AllProfiles}{Descendants}{}"
                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
    
                methodTypeId = XFCommandMethodTypeId.CertificationForWorkflowUnit
                methodQuery = "{" & WFName & "}" & "{" & WFScenario & "}" & "{" & WFTime & "}" & "{True}" & "{}"
                Using DBConnAppForCert2 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")
    
                    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
    
                For Each wfRow As DataRow In WFTable.Rows
                    Dim profileKey As Object = wfRow("ProfileKey")
    
                    Dim certRows As DataRow() = CertTable2.Select("ProfileKey = '" & profileKey.ToString() & "'")
    
                    For Each certRow As DataRow In certRows
                        Dim newRow As DataRow = CombinedTable.NewRow()
    
                        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")
    
                        newRow("SignOffState") = certRow("SignOffState")
                        newRow("UserName") = certRow("UserName")
                        newRow("TimeStamp") = certRow("TimeStamp")
    
                        CombinedTable.Rows.Add(newRow)
                    Next
                Next
    
                Return CombinedTable
            End Function
        End Class
    End Namespace