【问题标题】:How to check NOT NULL when calling RFC_READ_TABLE?调用 RFC_READ_TABLE 时如何检查 NOT NULL?
【发布时间】: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'])

【问题讨论】:

    标签: python sap-erp saprfc pyrfc


    【解决方案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'" }]
    

    注意这里有两行,因为TEXTRFC_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....
    • 我已经完成了我的回答,我希望它会澄清。
    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2012-01-29
    • 2017-07-08
    相关资源
    最近更新 更多