如何使用RFC_READ_TABLE在PyRFC查询中指定Open子句?
我正在尝试从PyRFC开始使用python表提取(在没有支持/合作的基础团队的情况下)。在http://scn.sap.com/community/scripting-languages/blog/2012/11/04/revisiting-python-and-sap-with-pyrfc的这个例子中,他们使用:
pyrfc.Connector.call("RFC_READ_TABLE", QUERY_TABLE=table, DELIMITER='|')http://saplsmw.com/node/101说,需要传递WHERE子句作为RFC调用的一个选项。我如何在PyRFC中做到这一点?(OPTIONS是RFC_READ_ table在SAP端的函数模块声明中表类型的导出变量)。
编辑: OK http://scn.sap.com/community/scripting-languages/blog/2014/05/05/python-for-basis有一个在选项中发送WHERE子句的示例:
OPTIONS = [{'TEXT':source_where}])因此,语法看起来像是单个元素字典的数组(映射SAP表类型),其中键是SAP数据类型,值是where子句。
因此,下一个问题是:如何指定要发送给RFC_READ_TABLE的包大小,以便在不触及内部表限制的情况下提取大型表?
发布于 2014-07-31 09:30:05
RFC_READ_TABLE有一个参数'ROWCOUNT‘,它指定要在单个调用中返回的最大行数。
当然,如果您说一次将其限制为1000行,如果表包含超过1000行,则可能会有其他行您从未下载过。
为了解决这个问题,还有另一个参数“ROWSKIPS”,您可以通过它指定要返回的起始行。
因此,使用第一个调用ROWCOUNT = 1000 ROWSKIPS =0
下一个调用ROWCOUNT = 1000 ROWSKIPS = 1000
下一个调用ROWCOUNT = 1000 ROWSKIPS = 2000
等等,每次递增ROWSKIPS如下: ROWSKIPS = ROWSKIPS + ROWCOUNT。
定义了ROWCOUNT和ROWSKIPS的一个示例PyRFC调用,从TCURR分10次读取(其中FCURR设置为‘美元’):
#!/usr/bin/env python
from pyrfc import Connection, ABAPApplicationError, ABAPRuntimeError, LogonError, CommunicationError
from ConfigParser import ConfigParser
from pprint import PrettyPrinter
def main():
try:
config = ConfigParser()
config.read('sapnwrfc.cfg')
params_connection = config._sections['connection']
conn = Connection(**params_connection)
options = [{ 'TEXT': "FCURR = 'USD'"}]
pp = PrettyPrinter(indent=4)
ROWS_AT_A_TIME = 10
rowskips = 0
while True:
print u"----Begin of Batch---"
result = conn.call('RFC_READ_TABLE', \
QUERY_TABLE = 'TCURR', \
OPTIONS = options, \
ROWSKIPS = rowskips, ROWCOUNT = ROWS_AT_A_TIME)
pp.pprint(result['DATA'])
rowskips += ROWS_AT_A_TIME
if len(result['DATA']) < ROWS_AT_A_TIME:
break
except CommunicationError:
print u"Could not connect to server."
raise
except LogonError:
print u"Could not log in. Wrong credentials?"
raise
except (ABAPApplicationError, ABAPRuntimeError):
print u"An error occurred."
raise
if __name__ == '__main__':
main()https://stackoverflow.com/questions/24172130
复制相似问题