分类 SAP 下的文章

Core data services(以下简称CDS)可以指两样东西,一个是HANA CDS,一个是ABAP CDS

如我们所知,HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种数据库供应商,结果是,ABAP CDS相比之下要少一些功能。因此,在某些情况下,无法使用ABAP CDS解决问题时,可以使用一种变通的方法,即通过ABAP Managed Database Procedures (AMDP)创建ABAP CDS Table Function

 

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

注:本文的主要理论内容已经包含在之前的AMDP介绍文章:ABAP中的AMDP(ABAP-Managed Database Procedures ) 中,相比它,本文更像一个step by step教程。

ABAP CDS视图

在通常的ABAP CDS视图开发过程中,我们通过编辑器(通常是ADT)在ABAP层声明了我们的字段结构和annotations。激活后,系统会自动地在数据库层生成所有的SQL视图。

ABAP CDS视图提供多种SQL命令和函数的支持,如果你想要了解细节和全部的可用特性,建议你看这篇文章:ABAP CDS Feature Matrix

ABAP CDS Table Function

在ABAP CDS Table Function的开发过程中,我们将字段结构、参数(可选)、association等通过类/方法定义为实体。通过AMDP我们可以直接在ABAP层写存储过程,并且把它封装在类/方法中,更多介绍可以看之前的文章:ABAP中的AMDP(ABAP-Managed Database Procedures

因为AMDP直接运行数据库脚本,所以需要做几个额外的步骤并且会使用到脚本语言(在HANA中即SQL Script)。稍后在示例部分我们会讨论配置的细节。

通过上文介绍的这两种开发技术,我们可以开始开发一个技术示例了。按本文的例子做下去,你将会可以创建你自己的ABAP CDS Table Function,并且为不能直接通过ABAP CDS实现的需求提供解决方案。为了实现示例,我们会使用数据库视图SFLIGHTS,这一视图提供了航班连接的细节。

场景

每个航空公司提供世界上不同城市的航班连接,用户想要在单一字段中看到某一特定航空公司支持的所有城市,内容以逗号分隔。因为每家航空公司的城市数是不同的,我们需要一个逻辑来拼接城市们,无论有查询结果多少条数据。

在常规的ABAP CDS内我们可以使用CONCAT函数,但是使用它的时候,我们需要定义固定数量的字段,既然CDS视图不能实现此处需要的处理动态逻辑,要如何处理呢?

这是一个使用ABAP CDS Table Function的绝佳场景,因为我们可以使用简单的数据库函数STRING_AGG(String Aggregation)。这个功能在SQL Script中可用,但是目前还是不支持ABAP CDS视图。

开发

打开你的HANA Studio(或者ADT),创建一个新的Core Data Services -> Data Definitio。

选择project,package并且定义名字和描述:

选择传输请求,然后点击Next。在模板中选择最后一个选项“Define Table Function with Parameters”,然后点击Finish:

 编辑生成的实体,包含以下内容:

  • 字段:
    • Client
    • Airline Code
    • Airline Name
    • Cities To
  • : ZCL_FLIGHTS_DEMO_CDS
  • 方法: FLIGHTS_CONNECTIONS

结果应该是:

define table functionZDEMO_FLIGHTS_TABLE_FUNCTION
returns
{
client : abap.clnt;
airline_code : s_carr_id;
airline_name : s_carrname;
cities_to : abap.string;
}
implemented by method
ZCL_FLIGHTS_DEMO_CDS
=>FLIGHTS_CONNECTIONS;

 

枚举对象是枚举类型的数据对象。枚举对象只能包含类型为枚举类型的枚举值。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.

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

 

因为曾经的“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

 

 

你是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