PyRFC

用于 Python 的异步、非阻塞 SAP NW RFC SDK 绑定。「Asynchronous, non-blocking SAP NW RFC SDK bindings for Python」

Github星跟蹤圖

Asynchronous, non-blocking SAP NetWeawer RFC SDK bindings for Python.

PyPI - Wheel
PyPI - Version
PyPI - Python Version
Code style
PyPI - Downloads
REUSE status
CII Best Practices
license

Features

  • 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

Supported platforms

Requirements

SAP NW RFC SDK 7.50.11

  • see SAP Note 3274546 for a list of bug fixes and enhancements made with this patch release
  • Using the latest version is recommended as SAP NWRFC SDK 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.

Docker

Windows

macOS

  • 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

Download and installation

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.m

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-2.8.3.tar.gz

Alternative build from source installation:

git clone https://github.com/SAP/PyRFC.git
cd PyRFC
python -m pip install .
# or
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.

Getting started

Note: The package must be installed before use.

Call ABAP Function Module from Python

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

Call Python function from ABAP

# 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.

SPJ articles

Highly recommended reading about RFC communication and SAP NW RFC Library, published in the SAP Professional Journal (SPJ)

How to obtain support

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.

Contributing

We appreciate contributions from the community to PyRFC!
See CONTRIBUTING.md for more details on our philosophy around extending this module.

License

Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file.

主要指標

概覽
名稱與所有者SAP-archive/PyRFC
主編程語言Python
編程語言Python (語言數: 2)
平台
許可證Apache License 2.0
所有者活动
創建於2014-02-07 18:25:16
推送於2025-03-12 07:55:50
最后一次提交
發布數44
最新版本名稱v3.3.1 (發布於 2024-01-09 10:39:52)
第一版名稱1.9.5 (發布於 2016-12-23 11:45:15)
用户参与
星數531
關注者數65
派生數154
提交數437
已啟用問題?
問題數307
打開的問題數15
拉請求數15
打開的拉請求數0
關閉的拉請求數8
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?