使用 Python 通过 RFC_READ_TABLE 连接 SAP 系统时如何设置 SAP 表字段 NOT NULL

问题描述

我正在尝试使用 python connect SAP 系统获取数据。在这里,我对如何过滤一个特定字段不是空的有疑问?

例如下图,如何过滤字段QNAME不为空。在SAP中,我们可以轻松设置。 非常感谢!

table = 'LTAP'
options = [{ 'TEXT': "LGNUM = '586'" and "VLTYP = 'GPA'" and "NLTYP = 'PD2'"}]
fields = ['TANUM','VLTYP','VLPLA','NLTYP','NLPLA','QDATU','QNAME']
pp = PrettyPrinter(indent=4)
rowskips = 0

print("----Begin of Batch---")
result = conn.call("RFC_READ_TABLE",QUERY_TABLE = table,DELIMITER='|',FIELDS = fields,\
OPTIONS = options,ROWSKIPS = rowskips,ROWCOUNT = 50 )
pp.pprint(result['DATA'])

解决方法

在 ABAP SQL(又名 Open SQL)中,“不等于”对应于运算符 <>。使用 pyrfc,它将是:

options = [{ 'TEXT': "QNAME <> '' and LGNUM = '586' and VLTYP = 'GPA' and NLTYP = 'PD2'"},{ 'TEXT': " and QDATU = '20160422'" }]

注意有两行,因为 TEXTRFC_READ_TABLE 中只有 72 个字符。如果您有超过 72 个字符,将条件分成几行,如解释 here,即 RFC_READ_TABLE 将用空格填充每一行以获得恰好 72 个字符,并将整理所有行而不进行任何转换形成 WHERE 子句。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...