dear SAP Gurus
I'm trying to create a VBA Macro which user can run to import Transaction Data from BW Cube. The selections for the BW Cube fields are fixed and will not change.
I created a DMP called "Import TX BW" based on Process Chain /CPMB/LOAD_INFOPROV_UI.
I wrote a code which will run the package based on the ADMPackage values and also the prompt file.
Public Sub ExecuteDMPackageWithParameters()
' Get the DM Automation class instance
Dim objDMautomation As EPMAddInDMAutomation
Set objDMautomation = New EPMAddInDMAutomation
' Prompt file specified in Name Range PKG
objDMautomation.RunPackage objPackageFromSheet("PKG"), strFilename("PKG")
End Sub
objPackageFromSheet is a ADMPackage function which will store the data of the package
strFilename is a String function which will store the path of the Prompt File.
Private Function objPackageFromSheet(strRange As String) As ADMPackage
Dim i As Integer
' Get the range in which the DM package paramteres is set
Dim rngPackageRange As Range
Set rngPackageRange = Application.Names(strRange).RefersToRange
' Create the ADM Package object
Set objPackageFromSheet = New ADMPackage
' Loop through the rows
For i = 1 To rngPackageRange.Rows.Count
Select Case rngPackageRange(i, 1).Value
Case "Filename"
objPackageFromSheet.Filename = rngPackageRange(i, 2).Value
Case "GroupId"
objPackageFromSheet.GroupId = rngPackageRange(i, 2).Value
Case "PackageDesc"
objPackageFromSheet.PackageDesc = rngPackageRange(i, 2).Value
Case "PackageId"
objPackageFromSheet.PackageId = rngPackageRange(i, 2).Value
Case "PackageType"
objPackageFromSheet.PackageType = rngPackageRange(i, 2).Value
Case "TeamId"
objPackageFromSheet.TeamId = rngPackageRange(i, 2).Value
Case "UserGroup"
objPackageFromSheet.UserGroup = rngPackageRange(i, 2).Value
End Select
Next
End Function
Private Function strFilename(strRange As String) As String
Dim i As Integer
' Get the range in which the DM package paramteres is set
Dim rngPackageRange As Range
Set rngPackageRange = Application.Names(strRange).RefersToRange
' Loop through the rows
For i = 1 To rngPackageRange.Rows.Count
If rngPackageRange(i, 1).Value = "PromptFile" Then
strFilename = rngPackageRange(i, 2).Value
Exit Function
End If
Next
End Function
PKG as range in Excel
Parameter | Value |
Filename | /CPMB/LOAD_INFOPROV_UI |
GroupId | Data Management |
PackageDesc | Import TX BW |
PackageId | Import TX BW |
PackageType | Process Chain |
TeamId | |
UserGroup | 0001 |
PromptFile | D:\BPCMDUPLOAD\MDPromptFileTest.txt |
D:\BPCMDUPLOAD\MDPromptFileTest.txt contents:
Import TX BW{param_separator}<?xml version="1.0" encoding="utf-16"?>
<ArrayOfAnswerPromptPersistingFormat xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AnswerPromptPersistingFormat>
<_ap>
<Name>%InforProvide%</Name>
<Values> <string>ZCUPC01</string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%SELECTION%</Name>
<Values>
<string><Selections><Selection Type="Selection"><Attribute><ID>0PROFIT_CTR</ID><Operator>1</Operator><LowValue>074000-002</LowValue><HighValue /></Attribute><Attribute><ID>ZCHGLACT</ID><Operator>3</Operator><LowValue>19510000</LowValue><HighValue>19520000</HighValue></Attribute><Attribute><ID>0FISCPER</ID><Operator>1</Operator><LowValue>2014001</LowValue><HighValue /></Attribute></Selection><Selection Type="FieldList"><FieldID>0COMP_CODE</FieldID><FieldID>0PROFIT_CTR</FieldID><FieldID>ZCHCOCDTR</FieldID><FieldID>ZCHFISPER</FieldID><FieldID>ZCHGLACT</FieldID></Selection></Selections></string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%TRANSFORMATION%</Name>
<Values> <string>\ROOT\WEBFOLDERS\XXX\XXX\DATAMANAGER\TRANSFORMATIONFILES\TRANSACTION\ACTUAL_IMPORT.xlsx</string> </Values> </_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%TARGETMODE%</Name>
<Values> <string>1</string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%RUNLOGIC%</Name>
<Values> <string>1</string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%CHECKLCK%</Name>
<Values> <string>0</string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
</ArrayOfAnswerPromptPersistingFormat>
The Prompt file is created based on a successful DMP run which is done manually:
When I ran the macro, it gives an error message:
Run-time error '-1073479167 (c0040201)':
There is an error in XML document (13,22).
I assume it is referring to line 13,22 in the prompt file. I'm not sure what is wrong with the file, but it is referring to the part where the SELECTIONS on the BW InfoProvider is.
I did a test where I removed the "SELECTIONS" code (hightlighed in bold below) in order to remove the filter and take on all data in the BW Cube, and it works! However this does not give me the option to filter the data to import from BW to BPC...
Import TX BW{param_separator}<?xml version="1.0" encoding="utf-16"?>
<ArrayOfAnswerPromptPersistingFormat xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AnswerPromptPersistingFormat>
<_ap>
<Name>%InforProvide%</Name>
<Values> <string>ZCUPC01</string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%SELECTION%</Name>
<Values> <string></string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%TRANSFORMATION%</Name>
<Values> <string>\ROOT\WEBFOLDERS\XXX\XXX\DATAMANAGER\TRANSFORMATIONFILES\TRANSACTION\ACTUAL_IMPORT.xlsx</string> </Values> </_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%TARGETMODE%</Name>
<Values> <string>1</string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%RUNLOGIC%</Name>
<Values> <string>1</string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
<AnswerPromptPersistingFormat>
<_ap>
<Name>%CHECKLCK%</Name>
<Values> <string>0</string> </Values>
</_ap>
</AnswerPromptPersistingFormat>
</ArrayOfAnswerPromptPersistingFormat>
Does anyone have any experience on this to share? Would be greatly appreciated.