'Modifications
'01-AUG-2013
'- added support for hierarchy node variables (but not hierarchy variable)
'- added single quote in front of variable values when generating commands to keep formatting of external value
'20-OCT-2014
'- added support for Multiple Single Values variable
'21-OCT-2014
'- added support for Formula variable
Option Explicit
Dim w As Worksheet
Dim lRow As Long
'
'Create a new worksheet with the list of BEx variables by dataprovider
'Doesn't handle hierarchy variable
'
Sub generateCommand()
Dim objXML As MSXML2.DOMDocument
Dim strXML As String
Dim oNodeList As IXMLDOMSelection
Dim curNode As IXMLDOMNode
Dim oList As IXMLDOMSelection
Dim varNode As IXMLDOMNode
Dim n As Long, n2 As Long, n3 As Long
'Get the BExAnalyzer repository (XML)
Set objXML = New MSXML2.DOMDocument
'In Excel 2007, Scripts property doesn't exist anymore. We use CustomXMLParts instead
If Val(Application.Version) >= 12 Then
strXML = ActiveWorkbook.CustomXMLParts(4).XML
Else
strXML = Worksheets("BExRepositorySheet").Scripts(1)
End If
If Not objXML.loadXML(strXML) Then
Err.Raise objXML.parseError.errorCode, , objXML.parseError.Reason
Exit Sub
End If
'create a new worksheet to store result
Call initLog
'List of dataproviders
Set oNodeList = objXML.selectNodes("//T_DATAPROVIDER/RSR_SX_DATAPROVIDER")
'Process each dataprovider
For n = 0 To oNodeList.Length - 1
Set curNode = oNodeList.Item(n)
'Name of dataprovider
Call writeLog("DATA_PROVIDER", n, curNode.selectNodes("NAME").Item(0).nodeTypedValue)
'BEx commands for variables
Call writeLog("CMD", n, "PROCESS_VARIABLES")
Call writeLog("SUBCMD", n, "VAR_SUBMIT")
'Variables
Set oList = curNode.selectNodes("REQUEST/VAR/RRX_VAR")
'Process each variable entry
For n2 = 0 To oList.Length - 1
Set varNode = oList.Item(n2)
Select Case varNode.selectNodes("OPT").Item(0).nodeTypedValue
Case ""
Case "EQ", "GE", "GT", "LE", "LT", "CP"
'if hierarchy node variable (can only be single value or list of single values. Cannot exclude value)
If varNode.selectNodes("VARTYP").Item(0).nodeTypedValue = "2" Then
Call writeLog("VAR_NAME_" & n2 + 1, n, varNode.selectNodes("VNAM").Item(0).nodeTypedValue)
Call writeLog("VAR_VALUE_EXT_" & n2 + 1, n, "'" & varNode.selectNodes("LOW_EXT").Item(0).nodeTypedValue)
Call writeLog("VAR_NODE_IOBJNM_" & n2 + 1, n, "0HIER_NODE")
Else
Call writeLog("VAR_NAME_" & n2 + 1, n, varNode.selectNodes("VNAM").Item(0).nodeTypedValue)
Call writeLog("VAR_OPERATOR_" & n2 + 1, n, varNode.selectNodes("OPT").Item(0).nodeTypedValue)
Call writeLog("VAR_SIGN_" & n2 + 1, n, varNode.selectNodes("SIGN").Item(0).nodeTypedValue)
'if individual variable (P = Single Value ; M = Multiple Single Value ; F = Formula)
Select Case varNode.selectNodes("VPARSEL").Item(0).nodeTypedValue
Case "P", "M", "F"
Call writeLog("VAR_VALUE_EXT_" & n2 + 1, n, "'" & varNode.selectNodes("LOW_EXT").Item(0).nodeTypedValue)
Case Else
Call writeLog("VAR_VALUE_LOW_EXT_" & n2 + 1, n, "'" & varNode.selectNodes("LOW_EXT").Item(0).nodeTypedValue)
End Select
End If
Case "BT"
Call writeLog("VAR_NAME_" & n2 + 1, n, varNode.selectNodes("VNAM").Item(0).nodeTypedValue)
Call writeLog("VAR_OPERATOR_" & n2 + 1, n, varNode.selectNodes("OPT").Item(0).nodeTypedValue)
Call writeLog("VAR_SIGN_" & n2 + 1, n, varNode.selectNodes("SIGN").Item(0).nodeTypedValue)
Call writeLog("VAR_VALUE_LOW_EXT_" & n2 + 1, n, "'" & varNode.selectNodes("LOW_EXT").Item(0).nodeTypedValue)
Call writeLog("VAR_VALUE_HIGH_EXT_" & n2 + 1, n, "'" & varNode.selectNodes("HIGH_EXT").Item(0).nodeTypedValue)
Case Else
Call writeLog("Unknown operator: ", varNode.selectNodes("OPT").Item(0).nodeTypedValue, "")
End Select
Next
Next
'Housekeeping
Set oList = Nothing
Set varNode = Nothing
Set oNodeList = Nothing
Set curNode = Nothing
Set objXML = Nothing
Call closeLog
End Sub
'
'List the variables by dataprovider in the immediate windows
'
Sub parseXML()
Dim objXML As MSXML2.DOMDocument
Dim strXML As String
Dim oNodeList As IXMLDOMSelection
Dim curNode As IXMLDOMNode
Dim oList As IXMLDOMSelection
Dim varNode As IXMLDOMNode
Dim n As Long, n2 As Long, n3 As Long
Dim s As String
'Get XML BEx repository
Set objXML = New MSXML2.DOMDocument
'In Excel 2007, Scripts property doesn't exist anymore. We use CustomXMLParts instead
If Val(Application.Version) >= 12 Then
strXML = ActiveWorkbook.CustomXMLParts(4).XML
Else
strXML = Worksheets("BExRepositorySheet").Scripts(1)
End If
If Not objXML.loadXML(strXML) Then
Err.Raise objXML.parseError.errorCode, , objXML.parseError.Reason
End If
'List of InfoProviders
Set oNodeList = objXML.selectNodes("//T_DATAPROVIDER/RSR_SX_DATAPROVIDER")
'Process each InfoProvider
For n = 0 To oNodeList.Length - 1
Set curNode = oNodeList.Item(n)
'Name of InfoProvider
Debug.Print "DATA PROVIDER " & n & ":" & curNode.selectNodes("NAME").Item(0).nodeTypedValue
'Variables
Set oList = curNode.selectNodes("REQUEST/VAR/RRX_VAR")
Debug.Print "VARIABLES:"
For n2 = 0 To oList.Length - 1
Set varNode = oList.Item(n2)
s = ""
For n3 = 0 To varNode.childNodes.Length - 1
s = s & varNode.childNodes.Item(n3).baseName & "=" & varNode.childNodes.Item(n3).nodeTypedValue & ";"
Next
Debug.Print s
Next
Debug.Print "*************************************************"
Next
'Housekeeping
Set oList = Nothing
Set varNode = Nothing
Set oNodeList = Nothing
Set curNode = Nothing
Set objXML = Nothing
End Sub
Private Sub initLog()
Set w = ActiveWorkbook.Sheets.Add
lRow = 1
End Sub
Private Sub writeLog(s1 As Variant, s2 As Variant, s3 As Variant)
w.Cells(lRow, 1) = s1
w.Cells(lRow, 2) = s2
w.Cells(lRow, 3) = s3
lRow = lRow + 1
End Sub
Private Sub closeLog()
Set w = Nothing
End Sub
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
8 | |
5 | |
5 | |
4 | |
4 | |
4 | |
4 | |
4 | |
3 | |
3 |