如何在 SAP CRM 里通过 navigation framework 跳转到 ABAP Webdynpro 页面

对于国内不少 SAP CRM 客户来说,他们的 CRM 自开发项目里都存在不少基于 ABAP Webdynpro 技术开发的第三方页面,这是因为国内 ABAP Webdynpro 的开发顾问相对较多。

对于这些 CRM 客户来说,一个常规需求,就是在 CRM WebClient UI 里,通过点击事件,跳转到 ABAP Webdynpro 页面去。

本文介绍如何通过 SAP CRM WebClient UI 的 navigation framework 来实现这个需求。

CRM 导航框架使用所谓的导航对象,它可以告诉框架目标 UI 视图和相应的操作(显示、编辑、搜索等)。

导航对象严重依赖于 CRM ui 概念,例如 UI 对象类型、BOR 和 BOL 类型,这对于 ABAP Webdynpro 页面没有意义。

所以这个解决方案的主要思想是,使用一个包装 CRM ui 组件来封装 ABAP webdynpro页面并进行配置,以实现从源 UI 组件到包装组件的导航。 打开包装器组件后,它将打开 ABAP webdynpro 页面本身。

最终结果如下图所示:

这个解决方案不需要对 CRM 标准的 ui Component 进行任何增强,仅仅一些简单的配置即可搞定。

  1. 创建一个简单的 wrapper ui Component:

给 window MainWindow 创建一个 inbound plug,并编写下列的 ABAP 代码:

  method IP_FROM_WF.
    data(lo_entity) = iv_collection->get_first( ).
    CHECK lo_entity IS NOT INITIAL.
    data(lv_guid) = lo_entity->get_property_as_string( ‘DOCMNT’ ).
    cl_zmeta_mainwindow_impl=>gv_url = zcl_url_utility=>get_url( CONV #( lv_guid ) ).
  endmethod.

上面这段代码的大致思路是,从 iv_collection 获取由 CRM 导航框架传递的目标 ABAP webdynpro 页面 url,并将其设置为窗口控制器类的静态属性。 gv_url 只是在视图 windowOpen.htm 中使用。 所以这意味着当这个包装器 UI 组件视图即将被渲染时,它将通过 javascript window.open 打开目标 ABAP webdynpro 页面。

  1. 启动事务码 SM30, view name BSPDLCV_OBJ_TYPE,创建一个新的 UI Object type CRM_WF.

这里我创建了一个新的 UI 对象类型 CRM_WF。 可以在 BOL 对象名称中输入任何名称。这个字段没有验证检查,只需输入一个有意义的名称即可。

这里指定的 Genil 组件将在运行时由框架自动加载。 大多数时候,ABAP webdynpro 页面在 CRM 中没有相应的 Genil 组件,只需维护一个虚拟组件即可。

  1. 在配置表 CRMS_UI_OBJ_MAP 里创建一条新的记录。Object name 从前一步骤里获取。

映射类必须实现接口 IF_CRM_UI_OBJ_MAPPER.

如果场景只是从 CRM ui 导航到 ABAP webdynpro,只需要实现 GET_ENTITY_FROM_UI_OBJECT 即可。
在这里,我只是使用从框架传入的文档键( iv_entty_key_value )从数据库检索相应的文档数据:

  1. 通过下列路径进行配置:
    SPRO-Customer Relationship Management-UI Framework-Technical Role Definition-Define Work Area Component Repository:

给 wrapper Component 创建一条新的记录:

以上就是全部的步骤。