【问题标题】:Set query parameters of RFC_READ_TABLE using win32com module?使用 win32com 模块设置 RFC_READ_TABLE 的查询参数?
【发布时间】:2018-09-03 15:57:59
【问题描述】:

我正在尝试将 SAP 表下载脚本移植到 Python,该脚本已经在 Excel VBA 上运行,但我想要一个命令行版本,并且出于超出此目标的多种原因,我更愿意避免使用 VBScript发帖。

我被困在需要在表格中填写值的那一刻

from win32com.client import Dispatch
Functions = Dispatch("SAP.Functions")

Functions.Connection.Client = "400"
Functions.Connection.ApplicationServer = "myserver"
Functions.Connection.Language = "EN"
Functions.Connection.User = "myuser"
Functions.Connection.Password = "mypwd"
Functions.Connection.SystemNumber = "00"
Functions.Connection.UseSAPLogonIni = False
if (Functions.Connection.Logon (0,True) == True):
    print("Logon OK")
    RFC = Functions.Add("RFC_READ_TABLE")
    RFC.exports("QUERY_TABLE").Value = "USR02"
    RFC.exports("DELIMITER").Value = "~"
    #RFC.exports("ROWSKIPS").Value = 2000
    #RFC.exports("ROWCOUNT").Value = 10

    tblOptions = RFC.Tables("OPTIONS")
    #RETURNED DATA
    tblData = RFC.Tables("DATA")
    tblFields = RFC.Tables("FIELDS")

    tblFields.AppendRow ()

    print(tblFields.RowCount)
    print(tblFields(1,"FIELDNAME"))
    # the 2 lines above print 1 and an empty string, so the row in the table exists

在此之前,它基本上是从 VBA 复制而来的,以适应语法。 此时在VBA中我可以做到

tblFields(1,"FIELDNAME") = "BNAME"

如果我这样做,我会得到一个错误,因为左边的部分是一个函数,并且以这种方式编写它返回一个字符串。在 VBA 中,它可能是一个二维数组。

我尝试了各种方法都没有成功,比如

tblFields.setValue([{"FIELDNAME":"BNAME"}])
tblFields(1,"FIELDNAME").Value = "BNAME"
tblFields(1,"FIELDNAME").setValue("BNAME")
tblFields.FieldName = "BNAME" ##kinda desperate 

该脚本在不设置 FIELDS 表的情况下适用于生成少于 500 个字符的行的输出。这是函数中的 SAP 限制。

我知道这不是最好的方法,但我不能使用 SAPNWRFC 库,也不能使用 librfc32.dll。 这个方法我一定能解决,还是回VB版吧。

感谢任何提供提示的人

【问题讨论】:

    标签: python sap win32com saprfc


    【解决方案1】:

    经过多次反复试验,我找到了解决方案。 无需逐行添加到“OPTIONS”或“FIELDS”表中,您只需提交预填表即可。 这应该有效:

    tblFields.Data = (('VBELN', '000000', '000000', '', ''),
                      ('POSNR', '000000', '000000', '', ''))
    

    这里也一样:

    tblOptions.Data = (("VBELN EQ '2557788'",),)
    

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多