使用win32com模块设置RFC_READ_TABLE的查询参数吗?

问题描述 投票:1回答:1

我正在尝试将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

该脚本适用于产生少于500个字符的行的输出,而无需设置FIELDS表。这是该函数中的SAP限制。

我知道这不是最好的方法,但是我不能使用SAPNWRFC库,也不能使用librfc32.dll。我必须能够解决这种问题,或者恢复到VB版本。

感谢任何提供提示的人

python sap win32com saprfc
1个回答
1
投票
经过大量的反复试验,我找到了解决方案。无需将行逐行添加到“ OPTIONS”或“ FIELDS”表中,您只需提交预填充的表即可。这应该工作:

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

同样在这里:

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

© www.soinside.com 2019 - 2024. All rights reserved.