首页 > 其他分享 >SAP 标准 ABAP 代码里的 IF 1 = 0 是怎么一回事?

SAP 标准 ABAP 代码里的 IF 1 = 0 是怎么一回事?

时间:2023-06-22 10:22:52浏览次数:56  
标签:语句 ABAP 回事 message SAP MESSAGE CRM

SAP ABAP 系统里的标准实现,有时会发现下面这种代码:

IF 1 = 0.

然后把逻辑写在这个永远都不可能执行到的 IF 分支里。比如下图这个 SAP CRM 里的标准类 CL_CRM_MDG_BP_CRGRP:

在这里插入图片描述

我查看了一下,这个类创建于 2009 年。

这个写法有什么作用?

我们把视野放开阔一点,注意到这行 IF 语句的下一行,即是将 Message Class 消息类 CRM_MDG_CORE 里编号为 034 的消息,通过 add_message 方法,显示在 WebClient UI 界面上。

我们使用事务码 SE91,定位到编号为 034 的这条消息,点击工具栏的 Where Used List 按钮,想查询这条消息到底被哪些 ABAP 类和程序所使用到:
在这里插入图片描述

从查询的结果来看,一目了然。原来,针对 ABAP Message 进行的 Cross Reference 即 Where Used List 查询,只能检测到那些通过 MESSAGE 关键字抛出的消息,即下图查询结果里这些包裹在 IF 1 = 0 分支里的 MESSAGE 语句。

在这里插入图片描述

然而,MESSAGE 一旦执行,在不同的执行上下文,抛出不同类型的消息,其表现行为都有所差异。

在这里插入图片描述

因为我们讨论的代码在 WebClient UI 运行环境下执行,显然不需要 MESSAGE 语句像在 SAPGUI 环境下,执行时弹出一个对话框,因此我们将 MESSAGE e034(crm_mdg_core) 放在永远不可能进入的 IF 1 = 0 分支内,起到的作用是,让 ABAP Message Text 的 Cross Reference 即 Where Used List 功能,能够顺利捕捉到这条消息的使用情况,同时又不让这段代码真的被执行。这算是一个非功能性编程的例子吧。

我当时把这个案例,发在了 SAP 社区上,引起了大家的热烈讨论。

在这里插入图片描述

有朋友给出了另一种替代方案,使用下列语句:

MESSAGE e034(crm_mdg_core) INTO lv_message.

这条语句将 CRM_MDG_CORE 里编号为 034 的文本内容,写入变量 lv_message 之中。虽然引入了一个随后根本不会被读取的变量 lv_message, 但是确实消除了会令有些人费解的 IF 1 = 0 分支。

ABAP Extended check 会对这种定义了变量但却又没有读取它的行为提出抱怨(warning),但好在可以通过 Pragma ##NEEDED 来屏蔽。
在这里插入图片描述

标签:语句,ABAP,回事,message,SAP,MESSAGE,CRM
From: https://www.cnblogs.com/sap-jerry/p/17497538.html

相关文章

  • ABAP MESSAGE 关键字的使用方法
    ABAPmessage关键字的作用是要么显示在当前用户的登录语言中,从数据库表T100的msg字段中指定的短消息文本,要么显示作为消息的任何文本。以下是可用的变体:如果没有指定RAISING或INTO中的任何一个,语句MESSAGE将中断程序流并发送消息。该语句MESSAGE的基本形式的确切行为(即文本......
  • 什么是 ABAP 的 Message Class,Message Number 和 Message Text 试读版
    ABAP编程语言里的Message(消息)是SAP产品里及其重要的一个概念,因为Message是SAP应用在运行过程中,向终端用户提供运行反馈的最重要的交互渠道之一。当用户使用SAP产品过程中,如果遇到各种错误或者提示消息,会根据这些消息,查询文档或者咨询SAP支持人员,以获得下一步的操作......
  • SAP Spartacus 和 Sticky session 相关的话题
    当Commerce后端运行多个Pods/节点时,当连续的请求过快到达时,后端将无法在集群中发送缓存失效通知。此外,如果多个请求分散到多个节点上,会产生延迟和不必要的资源消耗。Spartacus尽可能与单个后端进行交互,以服务于单个客户端。这通常被称为stickysession.Stickysession(粘滞会......
  • 什么是 SAP Business ByDesign 里的 TREX
    TREX(TextRetrievalandInformationExtraction)在SAPBusinessByDesign中是一个强大的搜索和分析引擎,专门用于处理大量的结构化和非结构化数据。它是SAP的全文搜索引擎,提供高效的文本搜索、信息提取和分析功能。TREX的应用范围广泛,下面将详细说明其在SAPBusinessByD......
  • ChatGPT的ABAP能力如何?
    ChatGPT是最近的热门话题,作为语言模型,它擅长处理各种语言相关的问题。显然,ABAP也是一种语言,ABAP开发者的很大一部分工作就是把自然语言和ABAP语言做互相转换,这应该也是在ChatGPT的擅长范畴内。那么ChatGPT能做好ABAP开发者的工作吗?本文记录了我的一些使用经验和感想。1,模拟场景:物......
  • asp.net使用sapnco3.x64,未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格
    报错原因:引用了sapnco3.x64的dll之后将web应用程序改为了64位,VS启动报错,未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。造成这种故障的原因是,大部分asp.net编译器和容器并没有默认设置为64位,而是以32位兼容模式运行。如果将程序库更换为32位,则运行......
  • 线性结构中的栈、队列和串是怎么回事?
    一.栈1.栈的概念栈(stack)是一种操作受限的线性表,栈的操作被限定在线性表的尾部进行,栈结构有两个特殊概念:栈顶:栈的尾部被称为栈顶(Top);栈底:另一端固定不动,被称为栈底(Bottom)。栈中的元素只能先入后出。最早进入栈的元素所在的位置是栈底,最后进入栈的元素所在的位置是......
  • 动手开发第一个 SAP Fiori Elements 应用
    本教程的前五篇文章,我们已经为SAPFioriElements的创建做了足够的铺垫。0.迈入SAPFioriElements开发的大门-什么是FioriElements,它和FreestyleUI5开发方式有何区别?1.SAPFioriElements开发环境的搭建和开发准备工作2.在ES5系统注册用户以获得Fiori......
  • 每日一个 ChatGPT 使用小技巧系列之2 - 用 ChatGPT 研读 SAP ABAP BAPI 的实现源代码
    本系列之前的文章:与其整天担心AI会取代程序员,不如先让AI帮助自己变得更强大每日一个ChatGPT使用小技巧系列之1-给出提纲或者素材,让ChatGPT帮你写作正好昨天有朋友向我发起知乎咨询,询问关于SAPABAPBAPIbapi_vendor_create的使用问题,本文就来说一说:bapi_......
  • 将 SAP ABAP 数据库表里存储的文件二进制内容下载成为本地文件试读版
    在SAP标准产品和实际项目开发中,经常遇到一些需要将尺寸不大的文件(比如小于1MB的配置文件)的二进制内容,存储到ABAP数据库的情况。比如笔者的SAPOData开发教程里这篇文章,下图代码第17行,使用ABAPOPENSQL将变量ls_file_db的值,插入到数据库表zfile里:下图是数据库......