企业邮箱_qq企业邮箱smtp_多少钱

轻量服务器 虚拟云 浏览

小编:在"面向未来的ABAP"(A2tF)中,据说BOPF中的验证是为了检查一致性并防止保存。这只是部分正确。验证是模型中表示幂等(在不改变状态的情况下可重复)检查的部分。何时执行验证以

在"面向未来的ABAP"(A2tF)中,据说BOPF中的验证是为了检查一致性并防止保存。这只是部分正确。验证是模型中表示幂等(在不改变状态的情况下可重复)检查的部分。何时执行验证以及验证失败的影响取决于验证的配置。一般来说,有两种类型的验证配置:动作验证和一致性验证。这两种类型的实现都基于相同的接口(/BOBF/IF\u FRW\u VALIDATION),因此,可以在多个地方使用相同的实现类。因此,我也建议尽可能地限制验证的范围,以便于重复使用。

我们仍然不知道什么是动作(这将在本书的下一章中介绍),但我们将从动作验证开始。动作验证是在动作执行之前注册执行的。如果验证失败,则不会为失败的实例调用操作。

可以从测试UI轻松调用操作,数据灾备中心,这包括执行操作验证。或者您可以从check菜单执行核心服务"check action"。

图46–操作验证失败的结果:您可以看到错误消息和突出显示的源位置。

不仅可以验证建模的操作,还可以验证所谓的框架操作。就我们的目的而言,现在只需知道对于每个节点,一个CREATE\node>,UPDATE和DELETE操作存在,并且在执行相应的修改时由框架执行。

图47–备用键验证的配置:如果备用键不是唯一的,框架操作将被阻止

让我们看一个示例,它预示了一些章节ago:业务需求中写道,只有至少有一个头的怪物才能在月球上嚎叫。

图48–动作验证的定义。真正重要的部分是"触发动作"

图49-触发动作:哪些动作是由验证来保护的

此外,数据库软件,未来的狼人应该只有在满月时才能对着月亮嚎叫。这两个方面在语义上是独立的;因此我们创建了两个验证,我们都注册了HOWL AT The MOON动作:HAS至少有一个头部,IS FULL MOON。如果稍后,我们可能会添加一个动作咬,我们也可以注册它至少有一个头,但不是满月检查(假设也有人身狼人可以咬)。这个额外的配置将不需要一行代码,并且使我们的模型对于图中的业务更具可读性。

的实现至少有一个头部看起来与我们在上一章的属性确定中所编码的非常相似,但有一个很大的区别:我们现在想要阻止操作执行并提供有意义的错误消息。请记住:属性确定仅在使用者(UI层)请求时执行。

方法/bobf/if\frw\u验证~执行。

数据lt\u根类型zmonster\u t\u根。"要检索的节点的组合表类型

清除:et\u failed\u key,eo_消息

io_读取->检索(

导出

iv_节点=zif_monster_c=>sc_节点–root

it_key=it_key

it_请求的_属性=VALUE#((zif_monster_c=>sc_节点\u属性–root–头数))

导入

et_data=lt_root.

在lt_root处循环分配字段符号()。

如果-头数=0.

*获取消息容器。不幸的是,消息容器不是作为处理程序注入的,

*所以我们必须主动实例化它。#架构\u失败

如果eo\u消息是初始消息。

eo\u消息=/bobf/cl\u frw\u工厂=>获取\u消息()。

ENDIF。

*通过实例化消息类创建消息。不要使用书

*中所写的/bobf/cm\u frw\u core的实例化(这是不好的风格),只需让您的异常消息类继承自/bobf/cm\u frw.

*在SCN上还有一篇关于BOPF中消息对象的博文;)。在这种情况下,构造函数表达式的效果非常好!

eo_消息->添加_cm(新的zcm_怪物(

textid=zcm_怪物=>无头

severity=zcm_怪物=>co_严重性错误

症状=/bobf/if_frw_消息◎症状=>co_bo_不一致

生存期=/bobf/if_frw_c=>sc_生存期◎由_bopf设置

ms_原点◎位置=值◎(

bo_key=zif_怪物◎c=>sc_bo_密钥

节点◎zif_monster_c=>sc_node–root

key=-key))。

*刚刚创建的消息根本不需要解释,

*无论是框架还是使用者都无法解释。真正重要的

*(以及在操作验证的情况下框架不执行操作的原因)

*是实例的失败指示

将值#(key=-key)插入表etŠu failedŠkey.

ENDIF。"monster没有头

ENDLOOP.

ENDMETHOD.

如果要执行怒吼月亮的动作或者消费者正在执行核心服务"check\u action",则始终执行验证码:在这种情况下,将执行为请求的动作配置的所有动作验证。与书中所说的不同,没有调用特定验证的选项。

一致性验证是作为与更改一个或多个实例状态的业务对象交互的副作用而执行的检查(如果不更改其状态,则实例的一致性不能更改)无论如何)。因此,一致性验证的配置与确定的配置相当:您可以选择触发器节点和修改(CUD)。此外,在"检查"上配置的所有一致性验证都是通过核心服务检查一致性来执行的。

图50–在测试UI上调用核心服务"检查一致性"(包括范围选项"本地"和"子结构")

当前网址:http://vmchk.cooou.com/keji/101183.html

 
你可能喜欢的: