Package: pynwrfc
PyRFCAsynchronous, non-blockingSAP NetWeawer RFC SDKbindings for Python.FeaturesClient, Throughput and Server bindingsAutomatic conversion between Python and ABAP datatypesStateless and stateful connections (multiple function calls in the same ABAP session / same context)Sequential and parallel calls, using one or more clientsSupported platformsPython 3Windows 10 and macOS >= 10.15 supported by pre-built wheels and build from source installationLinux wheels are supported by build from source installation onlyPrebuilt Centos wheels are attached to thelatest release on GitHubPre-builtportable Linux wheelsare not supported, neither issues related to portable Linux wheels:exclamation: must not be distributed with embedded SAP NWRFC SDK binaries, only private use permittedPlatforms supported by SAP NWRFC SDKcan be supported bybuild from sourcePrerequisitesAll platformsSAP NWRFC SDK 7.50 PL3 or later must bedownloaded(SAP partner or customer account required) andlocally installedUsing the latest version is recommended as SAP NWRFC SDK is fully backwards compatible, supporting all NetWeaver systems, from today S4, down to R/3 release 4.6C.SAP NWRFC SDKoverviewandrelease notesBuild from source on older Linux systems, may requireuchar.hfile, attached toSAP OSS Note 2573953, to be copied to SAP NWRFC SDK include directoryWindowsVisual C++ Redistributable Package for Visual Studio 2013is required for runtime, seeSAP Note 2573790 - Installation, Support and Availability of the SAP NetWeaver RFC Library 7.50Build toolchain for Python 3 requiresMicrosoft C++ Build Tools, the latest version recommendedBuild toolchain for Python 2 requiresMicrosoft Visual C++ 9.0:exclamation: Due to achange introduced with Python 3.8 for Windows, PATH directories are no longer searched for DLL. The SAP NWRFC SDK lib path is no longer required on PATH, for Python >= 3.8.macOSThe macOS firewall stealth mode must be disabled (Can't ping a machine - why?):sudo/usr/libexec/ApplicationFirewall/socketfilterfw--setstealthmodeoffRemote paths must be set in SAP NWRFC SDK for macOS:documentationWhen the node-rfc is started for the first time, the popups come-up for each NWRFC SDK library, to confirm it should be opened. If SDK is installed in admin folder, the node-rfc app shall be that first time started with admin privileges, eg.sudo -ESPJ articlesHighly recommended reading about RFC communication and SAP NW RFC Library, published in the SAP Professional Journal (SPJ)Part I RFC Client ProgrammingPart II RFC Server ProgrammingPart III Advanced TopicsInstallationpipinstallpynwrfcCython is required on Linux platforms, for the the default build from source installation method.Build from source can be also requested on Windows and Darwin platforms:pipinstallpynwrfc--no-binary:all:# orPYRFC_BUILD_CYTHON=yespipinstallpynwrfc--no-binary:all:Alternative build from source installation:gitclonehttps://github.com/SAP/PyRFC.gitcdPyRFC
pythonsetup.pybdist_wheel
pipinstall--upgrade--no-index--find-links=distpynwrfcSee also thepyrfc documentation,
complementingSAP NWRFC SDKdocumentation.Getting startedNote:The package must beinstalledbefore use.Open ConnectionIn order to call remote enabled ABAP function module (ABAP RFM), first a connection must be opened.frompyrfcimportConnectionconn=Connection(ashost='10.0.0.1',sysnr='00',client='100',user='me',passwd='secret')Connection parameters are documented insapnwrfc.inifile, located in the SAP NWRFC SDKdemofolder.Call ABAP function modulesUsing an open connection, remote function modules (RFM) can be invoked. More info inpyrfc documentation.# ABAP variables are mapped to Python variablesresult=conn.call('STFC_CONNECTION',REQUTEXT=u'Hello SAP!')print(result){u'ECHOTEXT':u'Hello SAP!',u'RESPTEXT':u'SAP R/3 Rel. 702   Sysid: ABC   Date: 20121001   Time: 134524   Logon_Data: 100/ME/E'}# ABAP structures are mapped to Python dictionariesIMPORTSTRUCT={"RFCFLOAT":1.23456789,"RFCCHAR1":"A"}# ABAP tables are mapped to Python lists, of dictionaries representing ABAP tables' rowsIMPORTTABLE=[]result=conn.call("STFC_STRUCTURE",IMPORTSTRUCT=IMPORTSTRUCT,RFCTABLE=IMPORTTABLE)printresult["ECHOSTRUCT"]{"RFCFLOAT":1.23456789,"RFCCHAR1":"A"...}printresult["RFCTABLE"][{"RFCFLOAT":1.23456789,"RFCCHAR1":"A"...}]Finally, the connection is closed automatically when the instance is deleted by the garbage collector. As this may take some time, we may either call the close() method explicitly or use the connection as a context manager:withConnection(user='me',...)asconn:conn.call(...)# connection automatically closed hereAlternatively, connection parameters can be provided as a dictionary:defget_connection(conn_params):"""Get connection"""print'Connecting ...',conn_params['ashost']returnConnection(**conn_param)frompyrfcimportConnectionabap_system={'user':'me','passwd':'secret','ashost':'10.0.0.1','saprouter':'/H/111.22.33.44/S/3299/W/e5ngxs/H/555.66.777.888/H/','sysnr':'00','client':'100','trace':'3',#optional, in case you want to trace'lang':'EN'}conn=get_connection(**abap_system)Connecting...10.0.0.1conn.aliveTrueSee also thepyrfc documentation,
complementingSAP NWRFC SDKdocumentation.How to obtain supportIf you encounter an issue or have a feature request, you can create aticket.Check out theSAP Community(search for "pyrfc") and stackoverflow (use the tagpyrfc), to discuss code-related problems and questions.ContributingWe appreciate contributions from the community toPyRFC!
SeeCONTRIBUTING.mdfor more details on our philosophy around extending this module.