`
JerryWang_SAP
  • 浏览: 1031782 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下

阅读更多

最近Jerry参与了SAP Commerce Cloud的标准开发,我们调用微软云平台Azure上创建Lambda Function的Restful API来创建Lambda Function:

 

 

在开发过程中发现该API工作不太稳定,同样的输入,时不时会返回HTTP 400 Bad Request:Encountered an error (InternalServerError) from host runtime

这个错误并不是总能重现。

 

 

通过排查,最后我们确认这个问题和我们调用API的代码无关,于是给Azure报了一个bug:

 

 

在分析定位问题时,不由得让我怀念起以前在ABAP On-Premise上做开发的一个便利之处——大多数问题都可以通过在ABAP应用服务器端调试来找到根源。

本文记录了2016年时,SAP成都研究院CRM开发团队在开发SAP CRM Fiori应用时的一些技术讨论,关于HTTP请求的响应状态码的差异。

当时我们用Chrome打开SAP Fiori应用,在Chrome开发者工具的network标签里,观察到有的请求响应码为HTTP 200,有的却是HTTP 304.

 

 

HTTP 200和HTTP 304理论上的差异解析,网上一搜一大把:

stackoverflow.com/quest

本文我们从一个实际的例子出发,观察ABAP服务器分别是在何种情况下,返回HTTP 200和304这两个状态码的,帮助大家加深理解。

分几种情况进行讨论。

  • 第一种情况:HTTP 200 OK
  • 第二种情况:HTTP 304 Not Modified
  • 第三种情况:HTTP 200(from Cache)

首先进行第一轮测试。

将这种来自SAP UI5标准库文件的url粘贴到浏览器里访问:

https://:7080/sap/bc/ui5_ui5/ui2/ushell/resources/~20160308134900~/sap/fiori/core-min-0.js

得到HTTP 200状态码:

 

 

大家想过没有,上图高亮的HTTP响应头部字段,比如last-modified, 是在ABAP服务器上哪段代码里被填充的?

灵活运用Jerry 文章 SAP错误消息调试之七种武器:让所有的错误消息都能被定位 介绍的办法,顺利通过调试的方式,找到准确的位置如下:

 

 

上述代码的逻辑:

(1) 第九行,服务器试图从HTTP请求的头部字段中,提取名为If-Modified-Since的字段值,因为这是我第一次请求该JavaScript文件,而这个字段的值逻辑上应该等于第一次请求到达服务器后,从服务器返回的响应结构里名为last-modified字段的值。

在我的第一轮测试里,因为是第一次请求该文件,HTTP请求头部没有包含If-Modified-Since字段,所以服务器解析出的值为空,即变量lv_modified_since为空。

(2) 在我使用的ABAP服务器上,JavaScript文件core-min-0.js最后修改的时间戳为20160316205045. 因此,两个变量lv_change_time_char和lv_change_time_string都被附上了这个值。

 

 

下面第20行代码展示了前文HTTP 200状态码的截图里,HTTP响应字段cache-control被填充的地方。

 

 

第二种情况:HTTP 304 Not Modified

之前Chrome浏览器里打开的url:

https://:7080/sap/bc/ui5_ui5/ui2/ushell/resources/~20160308134900~/sap/fiori/core-min-0.js

不用关闭这个浏览器窗口,直接按F5刷新,这次收到的响应码不再是HTTP 200 OK,而是HTTP 304 Not Modified.

 

 

为什么会产生这种差异呢?按F5之后仔细观察请求头部,发现第二次请求,浏览器发出的HTTP请求里,If-Modified-Since字段包含的就是第一个请求里从服务器端返回的last-modified字段值。

 

 

按F5刷新的这个请求到了服务器端,这一次ABAP服务器成功解析出请求字段If-Modified-Since的值:

 

 

将客户端发送过来的这个If-Modified-Since时间戳,同服务器端该文件最后修改的时间戳进行比较(即下图第26行AND后的第二个判断条件),发现二者相等,因此在第28行返回HTTP 304 Not Modified.

 

 

第三种情况:HTTP 200(from Cache)

关掉Chrome,再打开,再访问同一url,此时Chrome直接从自身的cache里返回该JavaScript文件,而不是向ABAP服务器上发起请求。因此服务器上所有ABAP断点均不会触发。

 

 

再回到Jerry遇到的那个Azure上执行function创建API遇到的HTTP 400 Bad request的incident,至本文发稿时为止还是未能得到解决。

 

 

尽管Azure的Function Host运行时也是开源的,但不能调试,我拿着这些海量代码也没辙,目前Github上看到的就有多达967个开着的issue.

 

 

从开发者遇到问题后调试定位这个角度上说,还是ABAP On-Premises方便啊。

感谢阅读。

 

 

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

 

ABAP专题

0
3
分享到:
评论

相关推荐

    ZUI2_JSON2_/UI2/CL_JSON_ui2/cl_json_abap_Ui2_cl_json_zui2_json_源

    标题中的"ZUI2_JSON2_/UI2/CL_JSON_ui2/cl_json_abap_Ui2_cl_json_zui2_json_源"可能指的是一个与ZUI2相关的项目,它利用了ABAP类/UI2/CL_JSON来解析和生成JSON数据。描述中提到,我们需要用到这个类来将JSON格式的...

    SAP-ABAP-OO-实现-CL-SALV-TABLE

    ### SAP-ABAP-OO 实现 CL-SALV-TABLE 的关键知识点 #### 1. ABAP 面向对象的 ALV 显示方法 在 SAP 的 ABAP 环境中,ALV (Application List Viewer) 是一种非常常用的技术,用于在屏幕上以表格的形式展示数据。传统...

    sap abap调用java生成的webservice手册

    【SAP ABAP调用Java生成的Web Service手册】 在SAP系统中,与外部服务进行交互时,经常需要调用由Java等其他语言编写的Web Service。本手册详细介绍了如何在MyEclipse环境中生成Web Service,并在SAP ABAP环境中...

    ABAP OO去掉ALV中的标准工具栏

    在ABAP面向对象编程(ABAP OO)中,经常需要对ALV(Application List Viewer)进行定制化的控制,包括移除或隐藏某些默认显示的工具栏功能。这通常是为了提供更简洁、更符合业务需求的用户界面。本文将详细介绍如何...

    SAP ABAP与JAVA之间通过RFC传递数据实例

    ### SAP ABAP与JAVA之间通过RFC传递数据实例详解 #### 需求概述 本文档主要介绍了如何在SAP ABAP系统与JAVA应用程序之间通过RFC(Remote Function Call远程函数调用)实现数据交互的具体实现方法。核心需求是在给定...

    SAP ABAP 开发环境和开发工具介绍

    SAP ABAP 开发环境和开发工具介绍 SAP ABAP 开发环境和开发工具是 SAP 系统中最重要的组件之一,它提供了一个强大的开发平台,允许开发者创建、测试和部署 ABAP 程序。ABAP 是 SAP 系统中的主要编程语言,用于开发...

    SAP_ABAP_4.7.rar_SAP abap4_abap_abap chm_abap 4_abap4

    《SAP ABAP 4.7开发指南》 在企业级信息技术领域,SAP系统扮演着至关重要的角色,尤其在企业资源规划(ERP)方面。SAP ABAP(Advanced Business Application Programming)是SAP系统中的一种编程语言,用于开发、...

    sap abap oo实现alv框可编辑

    本文将详细介绍如何使用面向对象编程(Object-Oriented Programming,OOP)在SAP ABAP中实现ALV框的可编辑功能。 首先,我们需要定义一个事件接收器类(Event Receiver Class),用于处理ALV框中的事件。在这个类中...

    SAPABAP常用函数清单.pdf

    SAP ABAP常用函数清单 SAP ABAP是一种高级程序设计语言,用于开发SAP R/3系统中的应用程序。ABAP语言提供了许多实用的函数,可以帮助开发者快速、高效地开发应用程序。本文将对SAP ABAP常用函数进行总结,涵盖文档...

    SAP ABAP 电子书

    《工程师突击:SAP+ABAP实用程序开发攻略》则可能更专注于实际应用,它可能详细讲解了ABAP编程中的关键技术和工具,如ABAP Workbench、ABAP Object-Oriented Programming(面向对象编程)、Function Modules、BADI...

    sapabap开发从入门到精通

    资源名称:sap abap开发从入门到精通 内容简介: 《SAP ABAP开发从入门到精通》以应用实例的形式,讲解了SAPABAP开发的相关知识点,详细介绍了SAPABAP开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库...

    SAP abap实例大全

    《SAP ABAP实例大全》是一本专注于SAP ABAP编程语言实践的资源集合,旨在为初学者提供全面且易懂的入门指南。SAP ABAP(Advanced Business Application Programming)是SAP系统中的核心编程语言,用于开发企业级业务...

    SAP ABAP ALV分页显示

    ### SAP ABAP ALV 分页显示技术解析 #### 核心知识点:SAP ABAP ALV 分页显示 本篇文章将深入分析一个基于SAP ABAP的ALV(Application List Viewer)分页显示的实现方法。ALV是SAP GUI中用于展示表格数据的一种...

    SAP ABAP开发学习——第10课:OOALV(视频教程)

    在本课程中,我们将深入探讨SAP ABAP的面向对象技术在ALV(ABAP List Viewer)中的应用,这是SAP ABAP开发学习的第10课,专注于OOALV。这个主题对于任何想要在SAP系统中进行高效数据展现和处理的开发者来说都是至关...

    SAP ABAP入门PPT

    此外,可能还涵盖了ALV Grid Control(ABAP List Viewer)的使用,这是SAP提供的一种标准的表格显示工具。 5. SEC_PMO_TRN_ABAP培训_day5.pptx - 最后一天的课程可能涵盖了更高级的主题,如ABAP对象导向编程(OO ...

    sap abap举例大全

    在SAP ABAP编程中,ALV(Accelerated SAP List Viewer)是一种强大的工具,用于创建交互式、可自定义的报告。以下是一些关键的知识点,涵盖了从基础到高级的ALV应用: 1. **Simple ALV Grid Report**: 这是ALV报告...

    SAP_ABAP_BADI_增强_开发

    详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。详细讲述SAP ABAP的BADI增强的概述及使用。...

    ALV.rar_SAP_abaP ALV_abap_alv_sap alv

    在SAP系统中,ALV(Accelerated List Viewer)是一种用于数据展示的工具,它提供了标准的表格形式来显示数据库查询结果。ALV是ABAP编程的重要组成部分,它简化了复杂数据的可视化处理。本篇将深入探讨如何通过ABAP...

    sap abap常用bapi

    SAP ABAP(Advanced Business Application Programming)是SAP系统中用于开发业务应用的语言和环境。BAPI(Business Application Programming Interface)是SAP系统中预定义的接口,用于实现和访问标准的商业对象和...

    sap ABAP 事件 event 的声明及调用

    sap中ABAP开发常用事件的定义及调用 文档展示了逻辑关系

Global site tag (gtag.js) - Google Analytics