基于 ABAP Fundamental Library 应用支持的几种 Connectivity 方式

本文涉及的产品
运维安全中心(堡垒机),免费版 6个月
简介: 基于 ABAP Fundamental Library 应用支持的几种 Connectivity 方式

Fundamental Library for ABAP 运行时组件支持下列的 Connectivity Provider 技术:

Java

  • SAP Java Connector (JCo), SAP closed source, free of charge
  • SAP Cloud Connector, SAP closed source

NodeJS

  • node-rfc package, SAP open source, based on SAP NWRFC SDK

Python

  • PyRFC package, SAP open source, based on SAP NWRFC SDK

SAP NWRFC SDK 是封闭源代码的预构建 C++ 二进制文件,可通过 SAP 客户、合作伙伴或开发人员帐户在 SAP Service Portal 上免费获得。


上述三种 Connectivity 技术的一个根本区别是,NodeJS 和 Python RFC 客户端连接在默认情况下是有状态的,而 SAP Java 连接器在默认情况下是无状态的,因此如果需要实现有状态的连接(stateful connection),开发人员必须付出一些努力。 因此,NodeJS 和 Python 默认编程模型就像在 ABAP 中一样,调用 Update-BAPI 或其他将中间结果存储在当前用户的 ABAP 会话内存中的 RFM 就行了。例如,NodeJS 或 Python 程序只调用 BAPI 或函数模块,如果成功,只需在同一连接上调用 BAPI_TRANSACTION_COMMIT,在后端的同一用户会话中提交事务即可。

其中 BAPI_TRANSACTION_COMMIT 和 BAPI_TRANSACTION_ROLLBACK 在 SAP 框架应用的事务处理中使用,用于提交或回滚正在进行的 ABAP 会话。


SET/GET 参数由 ABAP 事务 SU3 维护,并定义 ABAP 表单输入字段的默认值。打开表单时,如果将 SET/GET 参数分配给输入字段,则该字段会自动预填充 SET/GET 参数值,从而避免用户输入始终相同的输入(即固定销售区代码)。


因此我们的 Fundamental/ABAP 应用程序应该以相同的方式运行,并自动填充其默认值(SET/GET 参数)在后端维护的字段。


独立于前端库,我们应用程序的中间件代码可以用 NodeJS、Java 或 Python 实现。 代码看起来差不多,所以让我们以 Python 和 Flask 服务器为例。 备选方案包括用于 Python 的 Pyramid、bottle、tornado 等,或用于 NodeJS 或 Java 中可用的大量其他服务器的 express、Koa 等。


代码如下:


import json
from flask import Flask, Response, jsonify
from pyrfc import Connection
def to_json(content, simple=False):
    if simple:
        js = simplejson.dumps(content, default=json_serial)
        return Response(js, status=200, mimetype='application/json')
    return jsonify(content)
app = Flask(__name__)
abap_client = Connection(dest="MME)
# Equipment
@app.route('/equipment/<path:path>', methods=['POST'])
def equipment(path):
    try:
        to_abap = json.loads(request.data)
        if path == 'get':
            from_abap = abap_client.call('/COE/RBP_PAM_EQUIPMENT_GET', to_abap)
        elif path == 'getlist':
            from_abap = abap_client.call('/COE/RBP_PAM_EQUIPMENT_GETL', to_abap)
        elif path == 'change':
            from_abap = abap_client.call('/COE/RBP_PAM_EQUIPMENT_CHANGE', to_abap)
        elif path == 'install':
            from_abap = abap_client.call('/COE/RBP_PAM_EQUIPMENT_INSTALL', to_abap)
        elif path == 'dismantle':
            from_abap = abap_client.call('/COE/RBP_PAM_EQUIPMENT_DISMTLE', to_abap)
        else:
            raise Exception ('not implemented: %s' % path)
        return to_json(from_abap)
    except Exception, e:
        return serverError(e), 50
if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8123)

上面的代码显示了设备的中间件服务器路由。 为 DMS 实现了类似的路由处理程序,并且没有单独的路由用于特征,这是设备 API 的可选部分。

相关文章
|
前端开发 JavaScript 网络协议
Fundamental Library for ABAP 主要的组成部分概述
Fundamental Library for ABAP 主要的组成部分概述
如何在 ABAP Development Tool 创建新的 ABAP Cloud 项目
如何在 ABAP Development Tool 创建新的 ABAP Cloud 项目
123 0
如何在 ABAP Development Tool 创建新的 ABAP Cloud 项目
|
存储 运维 Kubernetes
Kyma Application Connectivity 特性介绍
Kyma Application Connectivity 特性介绍
113 0
|
API
如何在ABAP Development Tool里只显示能在SAP云平台上使用的ABAP资源
如何在ABAP Development Tool里只显示能在SAP云平台上使用的ABAP资源
152 0
如何在ABAP Development Tool里只显示能在SAP云平台上使用的ABAP资源
SAP Hybris的类型系统更改和ABAP的LOAD_PROGRAM_TABLE_MISMATCH
SAP Hybris的类型系统更改和ABAP的LOAD_PROGRAM_TABLE_MISMATCH
183 0
SAP Hybris的类型系统更改和ABAP的LOAD_PROGRAM_TABLE_MISMATCH
|
Android开发
ABAP Development Tool前后台交互的原理
ABAP Development Tool前后台交互的原理
105 0
ABAP Development Tool前后台交互的原理
ABAP development tools实现原理介绍
ABAP development tools实现原理介绍
127 0
ABAP development tools实现原理介绍
|
XML 安全 网络安全
如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数
如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数
201 0
如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数
ABAP代码静态分析工具SQF - Support Query Framework
ABAP代码静态分析工具SQF - Support Query Framework
129 0
ABAP代码静态分析工具SQF - Support Query Framework
通过ABAP business switch动态扩展一个ABAP domain
I do some investigation in the system and I find one logic called “domain value append”. It can allow us to put the extend value range to value append and put that append to standard domain. The value append is stored in a package which is controlled by a switch.
101 0
通过ABAP business switch动态扩展一个ABAP domain