Asynchronous, non-blocking SAP NetWeawer RFC SDK client bindings for Node.js, providing convenient ABAP business logic consumption from NodeJS.
- Based on N-API standard
- Stateless and stateful connections (multiple function calls in the same ABAP session (same context))
- Async/await, promise and callback API
- ECMAScript, TypeScript
- Sequential and parallel calls, using one or more clients
- Automatic conversion between NodeJS and ABAP datatypes
- Direct and managed connections (connection pool)
- Throughput monitoring: number of calls, bytes sent/received, application/total time; SAP NWRFC SDK >= 7.53 required
- Supported Platforms
- Prerequisites
- Installation
- Getting started
- Usage
- API
- Troubleshooting
- More resource and info about SAP Connectors and RFC communication
- Code of Conduct
- Contributing
- License
-
The node-rfc connector can be built from source on all platforms supported both by SAP NW RFC SDK and by nodejs
-
Pre-built binaries are provided for active nodejs LTS releases, for 64 bit Windows 10, macOS 10.15 and Centos 7 based docker container
Other platforms and frameworks:
- SAP Cloud Platform, AWS Lambdas, heroku ...: Create SAP feature request for
Security Services
category of the SAP Cloud Platform – Platform Foundation - Electron
- NW.js
- Node-RED
- Sails JS
-
SAP NW RFC SDK C++ binaries must be downloaded (SAP partner or customer account required) and locally installed (installation instructions. More information on SAP NW RFC SDK section on SAP Support Portal. Using the latest version is reccomended as SAP NW RFC SDK is fully backwards compatible, supporting all NetWeaver systems, from today S4, down to R/3 release 4.6C.
-
Build toolchain requires CMake
-
Build from source on older Linux systems, may require
uchar.h
file, attached to SAP OSS Note 2573953, to be copied to SAP NW RFC SDK include directory.
-
Visual C++ Redistributable is required for runtime. The version is given in SAP Note 2573790 - Installation, Support and Availability of the SAP NetWeaver RFC Library 7.50
-
Build toolchain requires Microsoft C++ Build Tools, the latest version reccomended
- Disable macOS firewall stealth mode (Can't ping a machine - why?):
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode off
-
Remote paths must be set in SAP NWRFC SDK for macOS: documentation
-
When 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 -E
More info: Installation
❗ The build from source requires NodeJS release with minimum N-API version given in package.json
property "napi_versions": NodeJS/N-API version matrix.
After the SAP NW RFC SDK is installed on your system, the node-rfc
can be installed from npm:
npm install node-rfc
Alternatively, when the node-rfc
package is not provided for your platform for example, you can build the package from source:
git clone --single-branch https://github.com/SAP/node-rfc.git
cd node-rfc
npm install
npm run addon # rebuild native addon
npm run ts # rebuild typescript wrapper
In order to call remote enabled ABAP function module, we need to create a node-rfc
client instance with valid logon credentials, connect to SAP ABAP NetWeaver system and then invoke a remote enabled ABAP function module from nodejs. Async example below shows basic principles and you can check the documentationand unit tests for more examles.
Add your ABAP system destintion to sapnwrfc.ini file in your working directory:
DEST=MME
USER=demo
PASSWD=welcome
ASHOST=myhost
SYSNR=00
CLIENT=620
LANG=EN
Call the ABAP RFM. When in doubt about RFM parameters' structure, use rfmcall:
const noderfc = require("node-rfc");
const pool = new noderfc.Pool({ connectionParameters: { dest: "MME" } });
(async () => {
try {
// get a client connection instance
const client = await pool.acquire();
// invoke ABAP function module, passing structure and table parameters
// ABAP structure
const abap_structure = {
RFCINT4: 345,
RFCFLOAT: 1.23456789,
RFCCHAR4: "ABCD",
RFCDATE: "20180625", // ABAP date format
// or RFCDATE: new Date('2018-06-25'), // as JavaScript Date object, with clientOption "date"
};
// ABAP table
let abap_table = [abap_structure];
const result = await client.call("STFC_STRUCTURE", {
IMPORTSTRUCT: abap_structure,
RFCTABLE: abap_table,
});
// check the result
console.log(result);
} catch (err) {
// connection and invocation errors
console.error(err);
}
})();
Finally, the connection is closed automatically when the instance is deleted by the garbage collector or by explicitly calling the client.close()
method of the direct client, or client.release()
or pool.release()
for the managed client.
Highly reccomended series of three insightful articles about RFC communication and SAP NW RFC Library, published in the SAP Professional Journal (SPJ):
and more:
- NAPI Type checks nodejs/node-addon-api/#265
If you encounter an issue or have a feature request, you can create a ticket.
Check out the SCN Forum (search for "node-rfc") and stackoverflow (use the tag "node-rfc"), to discuss code-related problems and questions.
We appreciate contributions from the community to node-rfc! See CONTRIBUTING.md for more details on our philosophy around extending this module.