Python - win32com и установка значений в таблице для RFC_READ_TABLE из SAP - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь портировать на Python скрипт загрузки таблиц SAP, который уже работает в 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.

Спасибо всем, кто предоставит подсказку

1 Ответ

0 голосов
/ 19 июня 2019

После долгих проб и ошибок я нашел решение. Вместо добавления строка за строкой в ​​таблицы «OPTIONS» или «FIELDS», вы можете просто отправить предварительно заполненную таблицу. Это должно работать:

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

то же самое здесь:

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