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

免备案CDN_163企业邮箱登陆入囗_评分榜

小七 141 0

哈莱姆功能模块洗牌

如何改进功能模块中的错误处理。

作为最近的一个非常好的博客系列,是Jorg Krause的"与功能模块的麻烦,人"。

https://blogs.sap.com/2016/09/20/the-hassle-with-function-module-calls/

就像所有好博客一样,它让我思考,让我以一种新的方式来看待一些东西。

博客是关于围绕功能模块包装方法的。

我一直反对这一点,毒害我的是,在SAP的OO早期,我估计开发人员的报酬是他们可以创建多少类和方法。因此,他们将数百个函数模块放入具有完全相同接口的类的静态方法中(或者在没有表的情况下尽可能接近它们)。

这就是为什么(我认为)方法可以有设置SY-SUBRC的"经典"异常,可以用与函数模块调用几乎相同的语法调用。

整个练习似乎毫无意义,因为方法是静态的,它们不能被子类化,并且您失去了执行RFC调用的能力。雪上加霜的是,类/方法的名称通常与函数模块的名称没有任何关系,两个名称都是同样不直观的。

然而,大数据与数据挖掘,再看一遍,问题不是包装子类;而是以一种愚蠢的方式包装它。我现在可以把整个论点翻过来了好处:-

内联声明成为可能,它们不适用于功能模块更好的语法检查,避免运行时转储传递错误类型的变量可能简化的接口通过使用异常类而不是长字符串来减少代码的混乱异常类比经典异常好(一开始我不这么认为,一年后我100%相信)

我也想到了一些。首先也是最重要的是使所有方法(包装函数模块)都成为实例方法,这样就可以对它们进行子类化,从而启用单元测试。我认为上面的博客中还提到了单元测试,这是一个进一步的好处。

另外,我认为我想包装任何(如果有)标准SAP方法,这些方法也会在定制方法中引发经典异常,因此,它们可以使用异常类并可以进行子类化。

Name and shume

在上面博客中的示例中是一些类名,如CA03,例如ZCL\u CA03\u DDIC。我从来都不喜欢以任何名义在计算机系统内外使用密码。

在澳大利亚,附加福利税表格被称为附加福利税表格。在英国它被称为P11D。即使我还在英国工作,我仍然不会调用一个类来处理这个ZCL\u P11D。我会给它一个名字,描述它实际上是关于什么的。

SAP功能组的名字通常是完全没有意义的,例如SPO3,虽然功能模块的名字是这样的,你可以猜到他们在做什么至少50%的时间,在整个系统中没有一致的命名约定。

我经常举的一个例子是BAPI,其中似乎没有一个明确的决定"READ"操作应该被称为什么,返利模式,这导致了几十种变化,因此很难进行搜索。

另一个例子是,当涉及到数据库读取缓冲功能时模块:-

玛拉单读

SD单读

V单读

安拉单读

积极的一面是,单词SINGLE几乎总是在单词READ之前。然而,即使知道我一直试图插入函数VBAK\u SINGLE\u读取和忘记愚蠢的前缀,从而失败。也有一些功能模块具有类似的用途,但命名规则完全不同。

如果我要包装这些功能,我会给出一个一致的命名规则,也可以说材料,而不是玛拉等等。

你想要的是代码行读起来像英语一样,如下所示示例:-

MATERIAL\u HEADER\u DETAILS=BUFFERED\u READ\u OF->MATERIAL\u HEADER\u OF(ORDER\u ITEM\u DETAILS-MATERIAL)

有些人会说我太罗嗦了,比如我真的需要"OF"这个词吗?每个人都有不同的意见,什么是同时最紧凑,也是最清晰的代码阅读。

我可以RFC清楚现在

因为我们知道只有功能模块可以用于RFC。当类在2000年出现,SAP从那时开始告诉我们不要使用功能模块时,你会认为他们可以在这16年的时间里找到一种在远程系统上执行类方法的方法,学生云服务器,有些语言只能有类,它们似乎管理正常。

SAP方法和Excel方法在某种程度上似乎能够在彼此的系统内执行。不管怎样,如果这永远都是一个很难解决的问题,ecs云服务器,那么我们解决这个问题的方法就是从包装器方法中调用RFC函数。许多标准的SAP example Gateway类都在方法内部进行RFC,例如,网关希望代码在与hub不同的系统上执行。

将RFC调用放在方法内部允许您为单元测试创建子类,如果这一点非常重要,那么功能模块内的所有代码都可以是OO。函数模块包装器超类(我们将在一分钟内讨论)可以有一个方法来设置RFC目标。我在这里只是虚张声势。

转到包装类的顶部

博客讨论了使用通用机制将来自函数模块的消息转换为基于类的异常,而不必每次都进行大量的编码。这既要处理实际的SYST(T100)消息传递的情况,也要处理功能模块设置的SY-SUBRC。