共计 2330 个字符,预计需要花费 6 分钟才能阅读完成。
这篇文章主要讲解了“SAP ABAP 里存在 Java List 集合工具类吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“SAP ABAP 里存在 Java List 集合工具类吗”吧!
在开发过程中发现该 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 理论上的差异解析,网上一搜一大把:
https://ions/1665082/what-is-the-difference-between-http-status-code-200-cache-vs-status-code-304
本文我们从一个实际的例子出发,观察 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.
感谢各位的阅读,以上就是“SAP ABAP 里存在 Java List 集合工具类吗”的内容了,经过本文的学习后,相信大家对 SAP ABAP 里存在 Java List 集合工具类吗这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!