1

环境:Windows 编程语言:Python 包:pyRFC SAP:SAP RFC SDK

通过对象 bwConn 连接到 BW 后,我尝试调用以下方法 BAPI_MDDATASET_CREATE_OBJECT

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

由于 COMMAND_TEXT 有 75 个字符的限制 - 我如何定义 QUERY?

目前 QUERY 被定义为

QUERY = "SELECT NON EMPTY [ABC].[LEVEL01].MEMBERS \n" \
        " DIMENSION PROPERTIES [XYZ].[FIELD01] ON ROWS" \
        " FROM [ABC/QUERY01]"
4

1 回答 1

0

字符限制是列表中的每个元素COMMAND_TEXT,因此您只需将您QUERY的字符串拆分为 75 个字符或更短的字符串。您可以手动执行此操作,例如:

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)

或者您可以根据需要编写查询并自动将其拆分为块:

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)

请注意,您也可以QUERY等效地定义为多行字符串:

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

这更容易阅读和维护。

于 2020-07-07T16:17:16.197 回答