首页 > 解决方案 > 从后端到客户端的 ABAP AMC 通道不起作用

问题描述

进入ABAP渠道协作,尝试实现4个场景,全部使用PCP协议,借助一些非常好的帖子。前两个由作者提供,只有所做的更改与将频道从文本转换为 PCP 相关

  1. 来自 SAPUI5 客户端的 Websocket 调用,来自后端的响应

基于ABAP Push / Messaging Channel 和 SAPUI5 Demo Application,它工作正常

  1. 后端通信

基于https://blogs.sap.com/2014/03/26/abap-channels-part-2-publish-subscribe-messaging-using-abap-messaging-channels/,也可以正常工作

这是两种方案都工作的 AMC 通道配置(方案 1 的类,方案 2 的报告):

在此处输入图像描述

让前两个工作,尝试将它们结合起来

  1. 来自客户端的通过 websocket 的消息,传递到 SAP 会话

工作得很好(我从 SAPUI5 客户端发送了消息,它被 GUI 后端会话接收),只要我删除了 APC 通道接收器类,下面的新配置

在此处输入图像描述

  1. 来自后端的消息,传递给 SAPUI5 客户端(实际上,其他 3 个服务只是为了到达这里)

其背后的想法是从授权程序选项卡中删除报告接收器并再次将其替换为 APC 接收器类,只是这次定义为“通过会话接收”,因此我可以从发送者报告接收消息并将其转发到客户。调用 SAPUI5 应用程序,按预期打开 APC 通道的连接,调用后端报告,消息由发送方应用程序正确发送(sy-subrc = 0,无异常)但似乎无处可去,因为 a)客户端中没有任何内容和 b) (最重要的)APC类的on_message方法里面的断点没有命中(方法没有被调用)

假设所有其他 3 个场景都运行良好,是否有什么我错过/我应该看看的特定点,或者我完全错误地理解了事情并且场景 3“偶然”工作?场景 4 AMC 配置如下。

在此处输入图像描述

标签: sapui5abapchannel

解决方案


您是否将 Push Channel 绑定到特定的 APC Channel?

METHOD if_apc_ws_extension~on_start.

  TRY.
* bind the WebSocket connection to the AMC channel
DATA(lo_binding) = i_context->get_binding_manager( ).
lo_binding->bind_amc_message_consumer( i_application_id = ‘YAMC_TEST’
i_channel_id      = ‘/ping’ ).
CATCH cx_apc_error INTO DATA(lx_apc_error).
DATA(lv_message) = lx_apc_error->get_text( ).
MESSAGE lx_apc_error->get_text( ) TYPE ‘E’.
ENDTRY.

ENDMETHOD.

推荐阅读