Asynchronous, non-blocking SAP NetWeaver RFC SDK bindings for Python.
- Features
- Supported platforms
- Requirements
- Download and installation
- Getting started
- SPJ articles
- How to obtain support
- Contributing
- Code of Conduct
This project is currently looking for new maintainers. Please see this issue for details.
- Client and Server bindings
- Automatic conversion between Python and ABAP datatypes
- Stateless and stateful connections (multiple function calls in the same ABAP session / same context)
- Sequential and parallel calls, using one or more clients
- Throughput monitoring
-
All platforms supported by SAP NWRFC SDK are supported by build from source installation (build instructions)
-
In addition, pre-built wheels are provided for Windows, Darwin and Ubuntu Linux, attached to PyRFC GitHub release
-
Docker containers: SAP fundamental-tools/docker
-
Linux wheels supported by build from source installation only
-
Pre-built portable Linux wheels
-
are not supported, neither issues related to portable Linux wheels
-
must not be distributed with embedded SAP NWRFC SDK binaries, only private use permitted
-
-
Microsoft IIS, see #359
- see SAP Note 3337381: SAP NetWeaver RFC SDK 7.50 -- Patch Level 12 for a list of bug fixes and enhancements made with this patch release.
- Only the latest patch level is supported by SAP
- The latest version is fully backwards compatible, from today S4, down to R/3 release 4.6C.
- Can be downloaded from SAP Software Download Center of the SAP Support Portal, like described at https://support.sap.com/nwrfcsdk.
- If you are lacking the required authorization for downloading software from the SAP Service Marketplace, please follow the instructions of SAP Note 1037575 for requesting this authorization.
PyRFC is using source distribution (sdist) installation on Linux systems and Cython is required on Linux system to build the PyRFC package from source. See Installing Cython
-
Visual C++ Redistributable Package for Visual Studio 2013 is required for run-time, see SAP Note 2573790 - Installation, Support and Availability of the SAP NetWeaver RFC Library 7.50
-
Build toolchain for Python requires Microsoft C++ Build Tools, the latest version recommended
-
Due to a change 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.
-
Remote paths must be set in SAP NWRFC SDK for macOS: documentation
-
When the PyRFC is started for the first time, the popups may come-up for each NWRFC SDK library, to confirm the usage. If SAP NW RFC SDK is installed in admin folder, the app shall be first time started with admin privileges, eg.
sudo -E
- Docker container examples for Linux, Intel and ARM based Darwin: SAP/fundamental-tools/docker. SAP NWRFC SDK libraries are not included.
pip install pyrfc
On Windows and macOS platforms pre-built binary wheel is installed, without local compilation. On Linux platform the package is locally built from source distribution.
Build from source distribution can be requested also on other platforms:
pip install --no-binary pyrfc pyrfc
# or
pip install https://files.pythonhosted.org/packages/.../pyrfc-3.1.0.tar.gz
Alternative build from source installation:
git clone https://github.com/SAP/PyRFC.git
cd PyRFC
# if you use tox
tox -e py311 # for Python 3.11
# or
python -m pip install .
# or
python -m build --wheel --sdist --outdir dist
# or
PYRFC_BUILD_CYTHON=yes python -m build --wheel --sdist --outdir dist
pip install --upgrade --no-index --find-links=dist pyrfc
Run python
and type from pyrfc import *
. If this finishes silently, without oputput, the installation was successful.
Using virtual environments you can isolate Python/PyRFC projects, working without administrator privileges.
See also the pyrfc documentation, complementing SAP NWRFC SDKdocumentation, especially SAP NWRFC SDK 7.50 Programming Guide.
Note: The package must be installed before use.
In order to call remote enabled ABAP function module (ABAP RFM), first a connection must be opened.
from pyrfc import Connection
conn = Connection(ashost='10.0.0.1', sysnr='00', client='100', user='me', passwd='secret')
Connection parameters are documented in sapnwrfc.ini
file, located in the SAP NWRFC SDK demo
folder. Check also section 4.1.2 Using sapnwrfc.ini
of SAP NWRFC SDK 7.50 Programming Guide.
Using an open connection, remote function modules (RFM) can be invoked. More info in pyrfc documentation.
# ABAP variables are mapped to Python variables
result = 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 dictionaries
IMPORTSTRUCT = { "RFCFLOAT": 1.23456789, "RFCCHAR1": "A" }
# ABAP tables are mapped to Python lists, of dictionaries representing ABAP tables' rows
IMPORTTABLE = []
result = conn.call("STFC_STRUCTURE", IMPORTSTRUCT=IMPORTSTRUCT, RFCTABLE=IMPORTTABLE)
print result["ECHOSTRUCT"]
{ "RFCFLOAT": 1.23456789, "RFCCHAR1": "A" ...}
print result["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:
with Connection(user='me', ...) as conn:
conn.call(...)
# connection automatically closed here
Alternatively, connection parameters can be provided as a dictionary:
def get_connection(conn_params):
"""Get connection"""
print 'Connecting ...', conn_params['ashost']
return Connection(**conn_param)
from pyrfc import Connection
abap_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.1
conn.alive
True
See also pyrfc documentation for Client Scenario
# create server for ABAP system ABC
server = Server({"dest": "gateway"}, {"dest": "MME"}, {"port": 8081, "server_log": False})
# expose python function my_stfc_connection as ABAP function STFC_CONNECTION, to be called from ABAP system
server.add_function("STFC_CONNECTION", my_stfc_connection)
# start server
server.start()
# get server attributes
print("Server attributes", server.get_server_attributes())
# stop server
input("Press Enter to stop servers...")
server.stop()
print("Server stoped")
See also pyrfc documentation for Server Scenario and server example source code.
Highly recommended reading about RFC communication and SAP NW RFC Library, published in the SAP Professional Journal (SPJ)
If you encounter an issue or have a feature request, you can create a ticket.
Check out the SAP Community (search for "pyrfc") and stackoverflow (use the tag pyrfc), to discuss code-related problems and questions.
We appreciate contributions from the community to PyRFC! See CONTRIBUTING.md for more details on our philosophy around extending this module.
See Code of Conduct