SKMundra
6 days agoNew Contributor III
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...
- 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