云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

_外贸企业邮箱用哪个好_好用

小七 141 0

MySQL数据库_腾讯云网站_多少钱

大家好,

在这个博客中,我们将通过一个例子来详细了解新的编程模型RAP,我建议在开始编写RAP之前也先学习一下这个理论,以了解RAP的基本知识。我要特别感谢SAP的同事Kailash Satapathy和Gaurav Kumar帮助我写这个博客。

前提条件:

概念核心数据服务(CDS)和注释。

让我们开始

RESTful ABAP编程模型(RAP):选择RESTful ABAP编程模型(RAP)一词是为了反映其面向"无状态"REST体系结构的方向。

我们将从ABAP多年来的演变开始:–

ABAP编程模型的演变

我们启动了我们的ABAP世界通过使用报表和模块池程序的经典ABAP编程,然后我们转向使用FPM的BSP/Webdynpro(用于UI协调),然后慢慢地从ERP风格的开发转向S/4 HANA模型开发,其中我们的主要编程包括CD、BOPF、,GW和Fiori.

SAP Fiori的ABAP编程模型(当前最佳实践):–

此开发模型通常由CDS视图组成,BOPF和GW,其中CDS与BOPF和GW紧密耦合(使用RDS映射或@OData.发布注).

注:此模型的问题是流没有很好的定义

未来方向-新的编程模型(ABAP Restful编程模型)

Restful ABAP编程模型详细说明:–

ABAP Restful编程模型定义了在SAP云平台ABAP环境中高效端到端开发本质上SAP HANA优化的OData服务(如Fiori应用程序)的体系结构。它支持所有类型的Fiori应用程序以及A2X服务的开发。它基于一些技术和框架,例如用于定义语义丰富的数据模型的核心数据服务(CDS)和用于创建OData服务(绑定到OData协议)的服务模型基础设施,以及用于自定义逻辑和基于SAPUI5的用户界面的基于ABAP的应用程序服务,如图所示下面

理解概念

业务对象(BO)是一个通用术语,用于表示企业应用程序开发中的真实工件,如产品、旅行或销售订单。一般来说,一个业务对象包含多个节点,如项目和公共事务操作,如创建、更新和删除数据,以及附加的特定于应用程序的操作,如SalesOrder业务对象中的批准,一种行为对应的运行时实现。

详见图。

1.1业务对象的结构

从结构上看,返利啦,业务对象由一棵节点树(SalesOrder、Items、ScheduleLines)组成,节点通过一种特殊的关联(compositions)进行链接。构图是定义整体-部分关系的特殊关联。复合零件仅与其父实体(整体)一起存在。

此复合树的每个节点都是用CDS实体建模的元素。根实体特别重要:在CDS数据定义的源代码中使用关键字root考虑到了这一点。根实体作为业务对象的表示,定义了业务对象结构中的顶层节点

1.2业务对象的行为

业务对象的每个实体都可以提供标准的CUD操作create()、update()和delete()。此外,每个实体还可以提供具有专用输入和输出结构的特定操作,这些结构称为操作。提供的CUD操作、动作以及一些与行为相关的属性,例如父实体和子实体之间的锁依赖关系,都在行为定义工件中定义。

行为定义总是指CDS数据模型。如下图所示,行为定义直接依赖于CDS根实体。一个行为定义正好指一个根实体,一个CDS根实体最多有一个行为定义(0..1关系),它也处理所有包含的子实体

1.3业务对象的运行时实现

业务对象运行时主要由两部分组成:第一部分是交互阶段,其中使用者调用业务对象操作来更改数据并读取实例(无论是否进行事务性更改)。业务对象运行时将更改保存在其内部事务缓冲区中,该缓冲区表示实例数据的状态。业务对象始终需要此事务缓冲区。在执行所有更改之后,可以持久化数据。这是通过保存序列来实现的。

业务对象运行时详细说明

交互阶段有不同的步骤,我们将其分离为修改、读取和锁定。Save sequence phase将有finalize、保存前检查、调整编号和保存等步骤。

实现可分为非托管、托管和带保存管理。

当前支持的实现为非托管。使用save实现进行管理和管理将在未来的版本中出现。

ABAP开发平台可以扮演服务提供者和服务使用者的角色,例如SAP Fiori UI客户端。

在ABAP RESTful编程模型的上下文中,业务服务是RESTful服务,消费者可以调用它。它是通过公开数据模型和行为模型来定义的。它由服务定义和服务绑定组成,如下图所示:–

服务定义是要公开的数据模型和相关行为的投影,而服务绑定实现特定的协议和要为使用者提供的服务类型。这种分离允许数据模型和服务定义集成到各种协议中,而无需任何重新实现。

2.1服务定义

服务定义表示通常从基于CDS的底层数据模型派生的服务模型。

示例:-

定义服务定义名称

{

公开cds_entity_1[作为别名_1];

EXPOSE cds_entity_2[作为别名_2];

EXPOSE…

EXPOSE cds_entity_m[作为别名_m];

}

2.2服务绑定

业务服务绑定(缩写:服务绑定)是一个ABAP存储库对象,用于将服务定义绑定到OData等客户机-服务器通信协议。

数据模型、服务定义和服务绑定之间的关系

让我们用CRUD示例学习RAP。

这里我们将以销售订单积垢为例。

为测试目的,我已经创建了销售订单头表–ZSSK\U VBAK和销售订单项目表–ZSSK\U VBAP

ZSSK\U VBAK

ZSSK\U VBAP

我们在这里有3个步骤要实现。

这里我们将使用组合和与子节点的关联为业务对象创建CDS视图。

销售订单头CDS视图的代码片段:–

@AbapCatalog.sqlview名称:'ZSSKSOHDR'

@AbapCatalog.compiler.compareFilter比较过滤器:正确

@AbapCatalog.preserveKey:正确

@访问控制.授权检查:#不需要

@EndUserText.label文件:'销售订单表头'

@UI:{

表头信息:{

类型名称:'销售订单',

类型名称复数:'销售订单',

标题:{类型:#标准,value:'vbeln'}

}

}

@ObjectModel.semanticKey对象模型:['vbeln']

@ObjectModel.representativeKey:'vbeln'

将根视图Zssk\u SoHeader定义为select from Zssk\u vbak as SoHeader

将Zssk\u SoItem的组成[0..*]定义为

{

@用户界面.facet:[

{

id:'通用数据',trustdata大数据,

类型:#集合,

位置:10,

label:'销售订单表头'

},

{

type:#FIELDGROUP|参考,

position:10,大数据如何处理,

targetQualifier:'GeneralData1',

parentId:'GeneralData',

isSummary:true,

isPartOfPreview:true

},

{

type:#FIELDGROUP|参考,

position:20,

targetQualifier:'GeneralData2',

parentId:'GeneralData',

isSummary:true,

isPartOfPreview:true

},

{

id:'SOItem',

目的:#标准,

类型:#行项目|参考,

标签:'Sales Order Item',

位置:10,

目标元素:'SOItem'

}

]

@UI:{

行项目:[{位置:10,重要性:#高}],

选择字段:[{位置:10}],

字段组:[{限定符:'GeneralData1',位置:10,重要性:#高}]

}

键SOHeader.vbeln文件,

@UI:{

行项:[{position:20,importance:#HIGH}],

选择字段:[{position:20}],

字段组:[{限定符:'GeneralData2',position:10,importance:#HIGH}]

}

SOHeader.erdat公司,

@UI:{

行项目:[{位置:30,重要性:#高}],

字段组:[{限定符:'GeneralData2',位置:20,重要性:#高}]

}

SOHeader.ernam公司,

@UI:{

行项:[{位置:40,重要性:#高}],

字段组:[{限定符:'GeneralData1',位置:20,重要性:#高}]

}

SOHeader.vkorg文件,大数据分析,

@UI:{

行项目:[{位置:50,重要性:#高}],

字段组:[{限定符:'GeneralData1',位置:30,重要性:#高}]

}

SOHeader.vtweg文件,

@UI:{

行项:[{位置:60,重要性:#高}],

字段组:[{限定符:'GeneralData1',位置:40,重要性:#高}]

}

SOHeader.spart公司,

//UI中的动作集收藏夹

@UI.lineItem:[{键入:#对于#操作,dataAction:'set\u favorite',label:'set favorite},

{位置:15,物联,重要性:#高}]

@EndUserText.label文件:"最爱"

SOHeader.favorite公司,

SOHeader.lastchangedby最后更改者,

SOHeader.lastchangedat,

/*关联*/

项目

}

销售订单项目CDS视图代码截取器:-

@AbapCatalog.sqlview名称:'ZSSKSOITM'

@AbapCatalog.compiler.compareFilter比较过滤器:正确

@AbapCatalog.preserveKey:正确

@访问控制.授权检查:#检查

@EndUserText.label文件:'销售订单项目'

@ObjectModel.representativeKey:["vbeln","posnr"]

将视图Zssk\u SoItem定义为select from Zssk\u vbap as SoItem

与父Zssk\u SoHeader的关联为\u SoHeader on(

$投影.vbeln= _SOHeader.vbeln文件

)

{

@用户界面.facet:[

{类型:#集合,位置:10,id:'SoItem',标签:'Sal