使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率

简介: 使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率

程序员区别于其他岗位的一个优势是,我们可以充分利用自己掌握的编程语言,将平日一些琐碎的,重复的日常工作,通过代码来实现自动化,从而省下更多的时间来投入到技术含量更高的工作中,提高工作效率。

本文介绍一个笔者在实际项目工作中 ABAP 这门编程语言实现的一个工作自动化的例子。

客户端轮询 vs Web Socket API

ABAP Channel 是 Netweaver 740 发布的一项新的基于事件驱动的前后台通信技术,底层的实现基于 Web Socket 和 TCP Socket.


所谓 Web Socket,是一种在用户的浏览器和服务器之间打开双向交互通信会话的技术。 使用基于 Web Socket 的应用编程接口,我们可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器以获取回复。


做过 SAP CRM 呼叫中心(Interaction Center)的 CRM 顾问们,一定对这个产品的轮询机制有深刻的印象。因为当时技术的局限,每当 ABAP 后台有事件发生时,没有办法通知到前台 WebClient UI 界面。前台为了能够显示最新的数据,只得以一个固定的时间间隔,周期性地主动向 ABAP 后台发起轮询(poll)。

用 Chrome 开发者工具观测,能容易地观察到这个轮询行为:下图显示 CRM 呼叫中心每隔 1 秒钟向后台发起一个 HTTP 请求进行轮询。

2014 年,Netweaver 740 发布了底层基于 Web Socket 协议的 ABAP Channel 技术,因此 CRM 呼叫中心也顺势采用了该技术替换了之前笨拙而低效的轮询解决方案。


ABAP 从业者做项目时经常需要使用各种跟踪和性能监控工具,最典型的有 ST05 和 SAT. 笔者确实认为这些工具对 ABAP 开发者非常有用。


然而目前在 Netweaver 里所有的这些工具都有一个局限:开发人员必须要手工打开工具的跟踪模式,在该模式下运行应用。运行结束之后,或手动关掉跟踪模式,或者由工具自动关闭。也就是说,这些工具都无法在应用处于运行状态时,实时地提供开发者需要的信息。


我之前在德国参加了原 CRM One Order 框架迁移到 S/4HANA 的重构和原型开发工作。


原型开发完成后就得做测试了。我得在新的 S4CRM UI 上进行一系列和以前老 CRM 一样的操作,然后观察传入 API 的输入参数和 API 返回的输出参数是否正确。


起初我采用的方式是在 API 里设置断点,然后在 ABAP 调试器里检查。很快我发现这样效率很低:CRM 开发顾问都知道,像 CRM_ORDER_MAINTAIN/READ 这种 API, 输入输出参数个数特别多,在 ABAP 调试器里得选中一个双击进去看,看完了得点回退再双击看另一个。如果要把 API 所有的参数全部检查完,总共要点一百多次鼠标。


笔者最受不了的就是这种重复的体力活。有没有办法可以让 Netweaver 也能像 SAP 云平台的 CloudFoundry 编程环境那样,一个 cf logs app name 命令之后,正在运行的应用,其运行时产生的日志就哗哗哗地打印在浏览器上呢?有!使用 ABAP Channel.


于是我动手开发了一个工具。看下这个工具怎么用:一个 BSP 应用,在浏览器里访问:

然后直接切换到 One Order 应用,像往常一样进行操作。比如新建一个服务订单,维护下面几个字段:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VxPADURG-1647864842811)(https://upload-images.jianshu.io/upload_images/2085791-7308cdcd1fa77389.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]


再切换回我做的工具,One Order API 的输入和输出参数内容已经实时地显示在浏览器里了,再不用去调试器里进行繁琐的点击操作了。

因为是通过浏览器显示,所以我还可以直接用 CTRL+F 根据关键字搜索,而这在 SAPGUI 里是没法做到的。

下面是这个工具的详细开发步骤。

  1. 事务码 SAPC, 创建一个新的 APC(ABAP Push Channel) 应用ZORDER_LOG_APC,连接类型要选择成 WebSocket。

点击按钮 Generate Class and Service 自动生成处理类和 ICF 节点。

  1. 事务码 SAMC, 创建一个新的 AMC(ABAP Message Channel)应用,取名为ZORDERLOG。

将第一步 APC 应用自动生成的 ABAP 类的名称维护到 Authorization Program 下面。这一步的目的是指定在 ABAP Channel 场景中,通过 WebSocket 进行数据收发的ABAP 处理类名称。将 Channel ID/order_log 抄下来。

  1. 从上图中得知我指定了 ABAP 类 CL_CRM_ORDER_LOGGER 用来将应用程序调用One Order API 产生的日志发送到 Web Socket 上去,因此这一步需要对这个类进行编程了。

在静态构造函数里,将第二步创建的 AMC ID 和 channel ID 传入生产者的构造器里。确实,ABAP Channel 的场景就是一个典型的生产者/消费者模式,ABAP 后台生产的消息,通过 Web Socket 发送给浏览器由后者消费。

消息的发送通过下面这个 SEND 方法完成。

  1. 重定义第一步 APC 应用自动生成的处理类的 ON_START 方法:

在这个方法里将第一步创建的APC应用和第二步创建的AMC应用做绑定。

  1. 给 API CRM_ORDER_MAINTAIN 创建一个增强,把我的CL_CRM_ORDER_LOGGER 注入进去。这样每次该 API 被调用时,都会自动进行日志记录并通过 Web Socket 发送给浏览器。

以上五步就是 ABAP Channel 生产者的实现。下面是消费者,即运行于浏览器里的 Web应用的开发。

创建一个 BSP 应用,在 index.htm 里维护下面的代码:

第 17 行声明了进行前后台通信的 Web Socket url:

这样 Web Socket 消费者的开发也做完了。

总结

本文首先介绍了传统呼叫中心中浏览器采取轮询方式从服务器抓取响应的低效解决方案,从而引出 Web Socket 技术的应用场景。接着介绍了传统 ABAP 性能分析工具需要显式开启和关闭 trace 模式的痛点,提出了一种新型的基于 Web Socket 技术的分析工具,能大幅提高程序员的日常工作效率。

相关文章
|
24天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
1月前
|
Web App开发 前端开发 开发工具
介绍Web开发的基础知识
介绍Web开发的基础知识
29 7
|
4天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
10天前
|
JSON Java fastjson
Spring Boot 底层级探索系列 04 - Web 开发(2)
Spring Boot 底层级探索系列 04 - Web 开发(2)
18 0
|
10天前
|
安全 编译器 PHP
PHP 8.1版本发布:引领Web开发新潮流
PHP编程语言一直是Web开发的主力军,而最新发布的PHP 8.1版本则为开发者们带来了更多创新和便利。本文将介绍PHP 8.1版本的主要特性,包括更快的性能、新的语言功能和增强的安全性,以及如何利用这些功能来提升Web应用程序的质量和效率。
|
13天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
|
13天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
22天前
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
18 3
|
25天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
29天前
|
前端开发 JavaScript 数据管理
描述一个使用Python开发Web应用程序的实际项目经验,包括所使用的框架和技术栈。
使用Flask开发Web应用,结合SQLite、Flask-SQLAlchemy进行数据管理,HTML/CSS/JS(Bootstrap和jQuery)构建前端。通过Flask路由处理用户请求,模块化代码提高可维护性。unittest进行测试,开发阶段用内置服务器,生产环境可选WSGI服务器或容器化部署。实现了用户注册登录和数据管理功能,展示Python Web开发的灵活性和效率。
15 4