1

Environment: Windows Programming language: Python Package: pyRFC SAP: SAP RFC SDK

I am trying to call the following method BAPI_MDDATASET_CREATE_OBJECT after connecting to the BW through the object bwConn

bwConn.call('BAPI_MDDATASET_CREATE_OBJECT', COMMAND_TEXT = [QUERY])

Since COMMAND_TEXT has a limitation of 75 characters - how can I define QUERY?

Currently QUERY is defined as

QUERY = "SELECT NON EMPTY [ABC].[LEVEL01].MEMBERS \n" \
        " DIMENSION PROPERTIES [XYZ].[FIELD01] ON ROWS" \
        " FROM [ABC/QUERY01]"
AlexM
  • 1,020
  • 2
  • 17
  • 35
Ranjith Venkatesh
  • 1,322
  • 3
  • 20
  • 57

1 Answers1

0

The character limit is per element in the list COMMAND_TEXT, so you just need to split your QUERY into a strings that are 75-characters or shorter. You can do this manually like:

COMMAND_TEXT = [
  'SELECT NON EMPTY [ABC].[LEVEL01].MEMBERS \n',  # 42-characters
  ' DIMENSION PROPERTIES [XYZ].[FIELD01] ON ROWS',  # 45-characters
  ' FROM [ABC/QUERY01]',  # 19 characters
]
bwConn.call('BAPI_MDDATASET_CREATE_OBJECT', COMMAND_TEXT=COMMAND_TEXT)

or you can write your query as you like and have it automatically split into chunks:

import textwrap
QUERY = "SELECT NON EMPTY [ABC].[LEVEL01].MEMBERS \n" \
        " DIMENSION PROPERTIES [XYZ].[FIELD01] ON ROWS" \
        " FROM [ABC/QUERY01]"
COMMAND_TEXT = textwrap.wrap(QUERY, 75)
bwConn.call('BAPI_MDDATASET_CREATE_OBJECT', COMMAND_TEXT=COMMAND_TEXT)

Note that you could also define QUERY as a multiline string equivalently as:

QUERY2 = """SELECT NON EMPTY [ABC].[LEVEL01].MEMBERS 
 DIMENSION PROPERTIES [XYZ].[FIELD01] ON ROWS FROM [ABC/QUERY01]"""
print(QUERY == QUERY2)  # True

which is easier to read and maintain.

AlexM
  • 1,020
  • 2
  • 17
  • 35