基于 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 的可选部分。

相关文章
|
存储 运维 Kubernetes
Kyma Application Connectivity 特性介绍
Kyma Application Connectivity 特性介绍
|
JavaScript Java 中间件
基于 ABAP Fundamental Library 应用支持的几种 Connectivity 方式
基于 ABAP Fundamental Library 应用支持的几种 Connectivity 方式
|
前端开发 JavaScript 网络协议
Fundamental Library for ABAP 主要的组成部分概述
Fundamental Library Styles 是一个轻量级的表示层(presentation layer),可以与开发人员选择的 UI 框架(例如 Angular、React、Vue 等)一起使用。 通过组合基本样式、样式表库和 HTML 标记,开发人员可以在任何基于 Web 的技术中构建一致的 Fiori 应用程序。
如何在 ABAP Development Tool 创建新的 ABAP Cloud 项目
如何在 ABAP Development Tool 创建新的 ABAP Cloud 项目
|
XML Android开发 数据格式
ABAP Development Tool前后台交互的原理
ABAP Development Tool前后台交互的原理
ABAP Development Tool前后台交互的原理
|
存储 Android开发
SAP ABAP Development Tool 的本地存储原理(local storage)
SAP ABAP Development Tool 的本地存储原理(local storage)
SAP ABAP Development Tool 的本地存储原理(local storage)
|
前端开发 Java
ABAP Development Tools的语法增强
ABAP Development Tools的前端是Java,根本识别不了ABAP。那么在ADT里的ABAP语法高亮是如何实现的? 第一次打开一个report时,显示在ADT里的代码是没有任何语法高亮显示的,
ABAP Development Tools的语法增强
ABAP development tools实现原理介绍
ABAP development tools实现原理介绍
124 0
ABAP development tools实现原理介绍
SAP Cloud Platform API management Policy Editor的高级用法
SAP Cloud Platform API management Policy Editor的高级用法
SAP Cloud Platform API management Policy Editor的高级用法