2022年9月

SAP Gateway在S4/HANA时代的ABAP开发模型中有着重要的地位。SAP Gateway是什么?它对ABAP开发有怎样的影响?可以为我们提供哪些方便?这篇译文将浅要地讨论这些话题。

SAP NetWeaver Gateway是一项基于市场标准的技术,它提供了简单的方式以连接SAP软件与设备、环境和平台。这个框架允许实现创新的、以人为本的解决方案,为SAP的商务软件带来了新体验:比如社交与协作环境、手机和笔记本设备以及富internet应用。

简而言之,NetWeaver Gateway是一个ABAP组件集,它附加在你已有的SAP ERP系统上,并提供了简单的、以人为本的工具来访问你的业务信息,并且降低了消费数据所需要的知识门槛,使得使用者不需要了解SAP系统内部的工作机制。Gateway提供了易用的、定义良好的API,提供了入口以访问SAP系统中富有价值的业务数据和功能。

本文链接:http://www.cnblogs.com/hhelibeb/p/7600998.html

原文链接:A simple overview on SAP Netweaver Gateway

1.1 兼容性

  • OPEN - 任何设备,任何体验,任何平台
  • PEOPLE - 优化用户交互场景
  • TIMELESS - 不分裂,任何SAP Business Suite版本
  • DEVELOPERS - 简单的API,不需要SAP知识,任何工具(都可以)
  • STANDARDS - 基于REST,ATOM/OData

SAP NetWeaver Gateway提供SAP应用与任何语言或模型的连接能力,借助REST services和OData/ATOM协议,实现这种连接不需要SAP方面的知识。

1.2 REST & OData

REST: 表现层状态转化(Representational State Transfer)是分布式系统的软件架构风格,例如万维网。凭借其更为简单的风格,REST已经逐渐代替了其它设计模型如SOAP。REST使用标准的GET, PUT, POST & DELETE方法和HTTP协议已有的特性。REST的主要目标包含组件交互的可测量性、接口的通用性、组件部署的独立性、中间组件减小延迟、增强安全性和封装遗留系统(legacy systems)等。

OData: 开放数据协议(Open Data Protocol)是一个用于查询和更新数据的开放的互联网协议。该协议允许消费者经由HTTP协议向数据源查询,并以Atom、JSON或者plain XML等格式返回数据,可以对数据编码、排序或者过滤。

1.3 关键优势

  • REST允许你的系统由此降低消费数据的门槛,因为借助它,无需SAP系统的专业知识也能消费其中的业务数据和功能。
  • 通过一个简单易用、非专有的接口,隐藏SAP系统背后的技术复杂性。
  • 让你的SAP业务数据和功能可以从符合以下特性的任何设备访问:
    • 通过HTTP(S)协议通信。
    • 理解OData消息
  • 提供服务生成工具(Service Provisioning tools),允许为已存在的ABAP功能快速生成REST实现。
  • 为主流IDE提供插件,比如Eclipse,Visual Studio和Xcode.

2.0 使用开源工具访问SAP业务数据

通过SAP NetWeaver Gateway消费数据只需要用HTTP(S)请求即可。这不需要使用任何SAP先前的软件或协议。应用开发者通过SAP NetWeaver Gateway接口消费数据也不需要有ABAP编程经验,甚至完全不需要懂得SAP内部的工作原理。

使用通常的开发工具,比如微软的.NET和苹果的XCode,或者开源语言,比如Ruby和PHP,我们可以轻松地通过消费SAP服务器提供的OData消息为SAP业务数据和功能创建用户界面。为了让OData的消费处理变得更加简单,SAP发布了多个版本的Gateway Consumption Tool。这个工具现在可以在Visual Studio和Xcode中使用,它可以生成OData代理对象。另外,它也可以将已生成的代理对象包装并生成基本应用。

微软的OData协议基于Atom发布协议(Atom Publishing Protocol),相应地,该协议基于Atom 联合格式(Atom Syndication Format)。SAP利用了OData内建的标准扩展特性来提供自己的注解(Annotations)。OData数据格式和SAP注解的结合使得SAP业务信息同时实现了自描述和高可读性。这两个特性各自地降低了SAP业务信息和功能的获取门槛,使它们更易于为其它外部设备上的业务应用所利用。

3.0 聚焦SAP NetWeaver Gateway

SAP NetWeaver Gateway接口的焦点在于它的REST能力允许非SAP系统应用轻松地消费SAP的数据与功能。它们包括:

  • 任何外部应用,比如微软Office应用可以通过.NET(甚至VBA)进行消费。
  • 桌面机器可以通过由PHP、Java或Ruby等后台支持的Web应用进行消费。
  • 移动端原生应用,比如iPad/iPhone或者安卓设备或者黑莓设备。
  • 嵌入式设备,比如制造业机器人或者卫星导航系统中的路线规划软件。
  • 任何你可以想到的可编程的、支持HTTP(S)协议的业务场景。

SAP NetWeaver Gateway接口可以用于任何支持HTTP(S)的可编程设备。为提供这一兼容性,它通过以下手段隐藏了系统内存在的复杂性:

协议适配:OData成为了向/从SAP系统供应/消费业务数据的唯一协议。

服务适配:不同类型和版本的SAP系统现在表现为单一的、集成的业务信息库。

4.0 开发过程

SAP NetWeaver Gateway软件由多种服务生成工具提供,它可以生成必要的源代码,以启动你的外部应用的开发。这些工具可以用于连接多种常用IDE,比如Eclipse,Visual Studio和Xcode。对这三个IDE,存在可用的扩展,所以开发者无需具备SAP知识。

SAP NetWeaver Gateway可以根据已有的BAPI、RFC和ABAP Dynpro屏幕创建新的Gateway对象。在生成Gateway对象时,生成工具使用起来和RFC生成器、BOR生成器和屏幕生成器一样。我们也可以通过Gateway附加组件来构建自定义Gateway对象,它会提供OData通道。这是一系列ABAP类和接口,可以用于在SAP系统中开发你自己的Gateway模型对象。需要在SAP NetWeaver Gateway中注册它们,这样就可以通过RESTful服务在外部访问。

可以通过以下图表轻松理解这些开发过程中的步骤:

5.0 总结

SAP NetWeaver Gateway不是用于由标准用户使用的事务型应用的通道,也不会替代现有的中间件如SAP NetWeaver PI。此外,SAP NetWeaver Gateway的目标也不是A2A或B2B场景。相反,SAP NetWeaver Gateway是一扇通往SAP业务数据和功能的门。它的目标受众是被称为临时平台用户(Occasional Platform Users ,OPU)的群体。这些人需要通过易于消费的方式实现特定的(ad hoc)SAP数据和功能访问。

 

你是ABAP开发者?你用abapGit吗?

看到这个问题,读者也许会想,什么是abapGit?就让我们从这个问题开始。简单地说,abapGit是一个以ABAP写成为ABAP服务的Git客户端。

有的读者可能依然感到困惑:什么是Git呢?这可能已经超出了本文的话题范围,请移步Google进行了解..

那么让我假设你在搜索之后已经返回了本文。Git是当代开发者的工具的基础部分,在我看来,在2017年的现在忽略它是不现实的。

 

本文链接:http://www.cnblogs.com/hhelibeb/p/7735421.html

原文标题:abapGit – so easy

 

回到主题,abapGit是一个开源项目,它由Lars Hvam发起,基于MIT许可证。

在本文撰写时,abapGit项目已经有30位贡献者,过去5个月中有超过500次commit,可见它是一个活跃而有生气的项目。也许看完本文后,你也会希望成为其中的一名贡献者,让项目变得更加壮大和优秀。

abapGit的设计目标之一是它应当“小型化”。这对很多人有着重要意义。其中之一即是,它会是迄今为止最易于安装的ABAP项目!没有传输,没有多个步骤,没有预安装,没有文件上传,没有补丁,不需要加载项。只要将代码复制粘贴到你的ABAP开发系统系统里,然后激活它。

就像这样(视频来自youtube,无法访问的话,请点击跳转到bilibili版):

安装完成后,你想做的第一件事大概就是连接GitHub,以保持你的abapGit代码是最新的。耶——这是个惊人的想法不是吗?我们可以在在自己喜欢的任何时间拉取abapGit项目的最近版本。Kapow! Take that CTS!(??) abapGit也有后台模式,所以你可以自动地完成更新任务。

你很可能希望为你的仓库使用Github。GitHub是当前最流行的Git托管平台,它免费,并且其中还包含某些极好的ABAP开源项目,比如abap2xlxs

abapGit需要使用TLS与GitHub连接。这意味着我们必须在ABAP系统中通过事务STRUST安装某些些根证书。abapGit安装文档可以告诉你如何获取并安装这些证书。也有一个简单的测试程序帮助你确保连接Github成功。

如果你想要将abapGit连接到其它Git服务器,它们可能也会强制你使用TLS,因此你需要安装其它根证书,具体的根证书取决于他们的CA。

所以现在已经搞定了,让我们看看我们怎样连接到GitHub上面的abapGit仓库,以保持自己安装的abapGit是最新的。有一个向导可以帮助你。

当abapGit第一次运行的时候,它会给你一个abapGit教程页。你也可以通过菜单Help->Tutorial来找到它。点击“install abapGit repo"链接来启动连接过程。会出现提示,要求你确认安装到$ABAPGIT包中。abapGit连接Git仓库(repo)和ABAP包(package)。因此我们需要将abapGit本身存储在一个本地包中——在本例里面是$ABAPGIT。还会出现提示询问你是否要覆盖刚刚创建的ZABAPGIT程序,选择“OK"。激活所有abapGit组件,就可以完成了。视频(b站链接点我):

 

为完成这篇文章,让我举个能让你理解abapGit是如何改变ABAP开发者的工作的例子,带你经过一个简单的场景。我们需要以clone一个到ABAP包里作为开始。我会使用到我最近的一段有关构建Gateway Service的示例代码,代码在这里:https://github.com/grahamrobbo/teched16_example.

视频如下(b站链接点我):

看看它有多简单,几个点击就可以从GitHub拉取所有的ABAP代码到一个我在abapGit界面中创建的包里,并且激活了所有的的东西。Kapow!

现在注意,我想我的代码需要点重构了,我决定删掉接口ZIF_GW_METHODS,因为我忘记这个东西在哪里能用到。我因此丢掉了重要的代码,程序遭到了破坏,而我无法激活任何东西。Arrrggghhhh...我想我只能登陆生产系统,复制粘贴旧版的代码,然后从头开始——假设我还能记住自己做过的修改的话。

或者——我可以只是刷新我的包为上次commit到GitHub repo的状态。并且因为我“commit early and commit often”,我并没有因此丢掉我的工作进展。视频(b站链接点我):

Kapow!

这只是将Git引入到ABAP开发者工具中的好处之一。

 

abapGit官方文档:abapGitdocumentation

 

 

 

因为曾经的“SAP Code Exchange”平台已经于2013年倒闭,现在无论在SCN还是网络上都比较难找到一个地方来关注全部的优秀ABAP开源项目。

本文将这些项目的地址和他们的描述列出,以供参考。

 

2019/9/5 更新: https://dotabap.org/ 这个网站包含一个abap开源项目列表。

 

本文链接:http://www.cnblogs.com/hhelibeb/p/7766141.html

SAPlink

SAPlink是一个致力于帮助程序员分享ABAP开发内容的项目,提供了分发和打包自定义开发对象的能力,并且易于使用。

文档:SAPlink User Documentation – ABAP Development – SCN Wiki

项目地址:Home | SAPlink Project | Assembla

SAPlink Plug-ins

SAPlink的插件们。

文档:SAPlink plugin list | SAPlink Project | Assembla

项目地址:Home | saplink-plugins Project | Assembla

abap2xlsx

从ABAP生成专业的Excel数据表格。

文档:abap2xlsx – Generate your professional Excel spreadsheet from ABAP

项目地址:abap2xlsx by ivanfemia

geohash-abap

ABAP实现的geohash工具。

项目地址:https://github.com/hhelibeb/geohash-abap

DOCX

使用ABAP生成DOCX文件。

文档:Generate DOCX file in ABAP

zJSON

从ABAP的数据类型(结构,内表,复杂数据)生成JSON文档。

文档:Usage zJSON · se38/zJSON Wiki · GitHub

项目地址:se38/zJSON · GitHub

ZCL_MDP_JSON

一个JSON库。

文档:An Open Source ABAP JSON Library – ZCL_MDP_JSON_*

项目地址:GitHub – fatihpense/zcl_mdp_json: Medepia ABAP JSON library that can generate and parse any JSON string.

abap_fm_json

 一个ABAP Function Module的JSON适配器。有了它,就可以通过URL和JSON格式的数据调用Function Module。

文档:JSON Adapter for ABAP Function Modules

项目地址:cesar-sap/abap_fm_json · GitHub

Twibap

推特的API。

文档:Home · se38/twibap Wiki · GitHub

项目地址:se38/twibap · GitHub

Neo4a

Neo4j连接器。

文档:Neo4a: The Neo4j ABAP Connector

项目地址:se38/Neo4a · GitHub

ZOAuth

ABAP OAuth处理器。

文档:Home · se38/ZOAuth Wiki · GitHub

项目地址:se38/ZOAuth · GitHub

OAuth2

OAuth2是OAuth的下一代协议。

文档:OAuth2: Next generation authentication API

项目地址:ivanfemia/abap2oauth2 · GitHub

abapGit

ABAP的Git客户端。

文档:Home · larshp/abapGit Wiki · GitHub

项目地址:larshp/abapGit · GitHub

abapOpenChecks

abapOpenChecks是SAP Code Inspector的检查集。你可以根据自己的场景和需求定制检查。注意,检查包含各种内容,某些检查可能并不适用于你的应用。

文档:Home · larshp/abapOpenChecks Wiki · GitHub

项目地址:larshp/abapOpenChecks · GitHub

ZAL11

AL11的替代品。

文档:ZAL11 : a replacement for AL11

ZTOAD

一个Open SQL编辑器,可以运行你写的OpenSQL并查看结果。

文档:ZTOAD – Open SQL editor

ZLISTCUBE

LISTCUBE的替代品。

文档:LISTCUBE replacement : a new way to display data

ZMOCKUP_LOADER

ABAP单元测试的测试数据加载器。在EXCEL中准备数据,保存到TXT,压缩为ZIP,通过SMW0上传至系统。

文档:Unit testing mockup loader for ABAP

项目地址:sbcgua/mockup_loader · GitHub

RSS-Feed Provider in ABAP

在ABAP系统之上发布RSS订阅内容,可以用来订阅solution manager或者传输请求的传输情况等..

文档:Publishing Content  from the SAP Netweaver AS ABAP to iGoogle and other RSS Readers

项目地址:peterlangner/zrss · GitHub

DSL tookit

一个用ABAP写成的用于了解DSL和string parsing技术的小工具。

文档:A primer on implementing DSLs in ABAP

项目地址:huberv/abap_dsltk · GitHub

FALV

Fast ALV grid(基于CL_GUI_ALV_GRID)

文档:http://abapblog.com/falv

项目地址:GitHub – fidley/falv: FALV – Fast ALV Grid

zGKGS

Google Knowledge Graph Search API

文档:Google Knowledge Graph Search API, schema.org and JSON-LD

项目地址:se38/zGKGS · GitHub

HTMLEditor

基于NICEdit的HTML编辑器。

文档:ABAPblog.com – WYSIWYG HTML Editor in ABAP

ABAP Active Record

使用AG5(ABAP + SAP Gateway + SAPUI5)实现Active Record概念。

文档:Installation Guide

项目地址:ABAP Active Record on Github

FastRWebABAP Connector

通过运行在Rserve上的FastRWeb连接ABAP与R。

文档:Connect ABAP with R via FastRWeb running on Rserve

项目地址:FastRWebABAPConnector on GitHub

Include assembler

一个把include文件合并进程序的工具。

文档:See  README.md @project page

项目地址:sbcgua/abap_include_assembler · GitHub

grunt nwabap ui5uploader

将UI5资源上传到NetWeaver ABAP的Grunt插件。

文档:Grunt plugin to upload UI5 sources to NetWeaver ABAP

项目地址:grunt-nwabap-ui5uploader on GitHub

TAB-delimited text parser for ABAP

一个把制表符(tab)分割的文本数据转换进任意宽结构内表的工具。

文档:See README.md at project page

项目地址:GitHub – sbcgua/abap_data_parser: TAB-delimited text parser for ABAP

W3MIME Poller

监视W3和MIME对象的修改,以及相关文件的上传。

文档:Project Wiki

项目地址:Project on Github

ABAP Mustache

ABAP上的mustache模板引擎。

文档:Project Wiki

项目地址:Project on Github

zMIMESync

可以简化BSP的JavaScript 开发

文档:Easy BSP JavaScript development with zMIMESync (Open Source)

项目地址:zmimesync_servicezmimesync

XLSX Workbench

基于EXCEL的可视化表单编辑器。

文档:Documentation

项目地址:Project

PyRFC

The Python RFC Connector

文档:http://sap.github.io/PyRFC

项目地址:https://github.com/SAP/PyRFC

 

英文原文:ABAP Open Source projects

 

S/4 HANA 1709 已经在几个月前发布,随之而来的是ABAP 7.52。

本文翻译了更新文档中有关Open SQL的部分。

如果读者是Open SQL的新手,请不要从本文看起。更合适的教程是:A complete guide to OpenSQL statements – Step-by-step tutorial with screenshots

 

本文链接:http://www.cnblogs.com/hhelibeb/p/7941300.html

1,内表作为数据源

现在可以将内表指定为查询语句的数据源。如果内表数据需要传递给数据库的话,则只能在部分数据库上运行。

例子:

DATA itab TYPE HASHED TABLE OFscarrWITHUNIQUE KEY mandt carrid.IF NOT cl_abap_dbfeatures=>use_features(EXPORTINGrequested_features=VALUE #( ( cl_abap_dbfeatures=>itabs_in_from_clause ) ) ).
cl_demo_output
=>display(
`System does
notsupport internal tables as data source` ).
RETURN.
ENDIF.

itab
= VALUE #( ( carrid = 'LH' carrname = 'L.H.')
( carrid
= 'UA' carrname = 'U.A.') ).SELECTscarr~carrid, scarr~carrname, spfli~connidFROM@itab AS scarr
INNER JOIN spfli
ON scarr~carrid =spfli~carridINTO TABLE @DATA(result)
##db_feature_mode[itabs_in_from_clause].

cl_demo_output
=>display( result ).

 

枚举对象是枚举类型的数据对象。枚举对象只能包含类型为枚举类型的枚举值。ABAP从版本7.51开始支持它们。

这是一种常见的模式。在ABAP 7.51之前,人们通常用如下方式实现类似的功能:

CLASS cx_wrong_size DEFINITION INHERITING FROMcx_static_check.ENDCLASS.CLASS shirt DEFINITION.PUBLIC SECTION.TYPES tsize TYPEi.CONSTANTS:
size_s
TYPE tsize VALUE 0,
size_m
TYPE tsize VALUE 1,
size_l
TYPE tsizeVALUE 2,
size_xl
TYPE tsize VALUE 3.METHODSconstructorIMPORTING size TYPEtsize
RAISING cx_wrong_size.
...
PRIVATE SECTION.DATAsizeTYPEtsize.ENDCLASS.CLASS shirt IMPLEMENTATION.METHODconstructor.IF size <> size_s ANDsize<> size_m ANDsize<> size_l ANDsize<>size_xl.RAISE EXCEPTION TYPEcx_wrong_size.ENDIF.me->size =COND #(
WHEN size
<> size_s ANDsize<> size_m ANDsize<> size_l ANDsize<> size_xl THENTHROW cx_wrong_size( )ELSEsize ).ENDMETHOD.ENDCLASS.