调用 RFC_READ_TABLE 时如何检查 NOT NULL?
Posted
技术标签:
【中文标题】调用 RFC_READ_TABLE 时如何检查 NOT NULL?【英文标题】:How to check NOT NULL when calling RFC_READ_TABLE? 【发布时间】:2021-09-01 23:20:34 【问题描述】:我正在尝试使用 python connect SAP 系统获取数据。在这里,我有关于如何过滤一个特定字段 IS NOT EMPTY 的问题?
例如下面,如何过滤字段 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'])
【问题讨论】:
【参考方案1】:在 ABAP SQL(A.K.A. Open SQL)中,“不等于”对应于运算符 <>
。使用 pyrfc,它将是:
options = [ 'TEXT': "QNAME <> '' and LGNUM = '586' and VLTYP = 'GPA' and NLTYP = 'PD2'",
'TEXT': " and QDATU = '20160422'" ]
注意这里有两行,因为TEXT
在RFC_READ_TABLE
中只有 72 个字符。如果您有超过 72 个字符,则将条件分成几行,如 here 解释的那样,即 RFC_READ_TABLE
将用空格填充每一行以获得正好 72 个字符,并将整理所有行而不进行任何转换以形成 WHERE子句。
【讨论】:
谢谢!你知道如何获取和过滤当前日期字段 QDATU 吗? (获取昨天的日期。)提前谢谢你!!! 在连接到基于 ABAP 的系统的数据库中,日期字段对应于 YYYYMMDD CHAR 格式,并且始终根据公历表示。所以,昨天,2021年6月17日,对应文字20210617
。
你的意思是这样的?: options = [ 'TEXT': "QNAME '' and LGNUM = '586' and VLTYP = 'GPA' and NLTYP = 'PD2' and QDATU = ' 20160422'"]
谢谢!我尝试添加选项 QDATU = '20160422',然后我收到错误消息。你的意思是在每个条件之后,应该有一个新的行来分割它们?像这样? options = [ 'TEXT': "QNAME '' and /*new line*/ LGNUM = '586' and /*new line*/ VLTYP = 'GPA' and....
我已经完成了我的回答,我希望它会澄清。以上是关于调用 RFC_READ_TABLE 时如何检查 NOT NULL?的主要内容,如果未能解决你的问题,请参考以下文章