Quantcast
Channel: SCN : All Content - All Communities
Viewing all articles
Browse latest Browse all 2129

VBA Macro to run DMP to import transaction data from BW Cube

$
0
0

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


 

ParameterValue
Filename/CPMB/LOAD_INFOPROV_UI
GroupIdData Management
PackageDescImport TX BW
PackageIdImport TX BW
PackageTypeProcess Chain
TeamId
UserGroup0001
PromptFileD:\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:

SAP.png

 

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.

 

 



Viewing all articles
Browse latest Browse all 2129

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>