对于国内不少 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 进行任何增强,仅仅一些简单的配置即可搞定。
- 创建一个简单的 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 页面。
- 启动事务码 SM30, view name BSPDLCV_OBJ_TYPE,创建一个新的 UI Object type
CRM_WF .
这里我创建了一个新的 UI 对象类型 CRM_WF。 可以在 BOL 对象名称中输入任何名称。这个字段没有验证检查,只需输入一个有意义的名称即可。
这里指定的 Genil 组件将在运行时由框架自动加载。 大多数时候,ABAP webdynpro 页面在 CRM 中没有相应的 Genil 组件,只需维护一个虚拟组件即可。
- 在配置表 CRMS_UI_OBJ_MAP 里创建一条新的记录。Object name 从前一步骤里获取。
映射类必须实现接口 IF_CRM_UI_OBJ_MAPPER.
如果场景只是从 CRM ui 导航到 ABAP webdynpro,只需要实现 GET_ENTITY_FROM_UI_OBJECT 即可。
在这里,我只是使用从框架传入的文档键( iv_entty_key_value )从数据库检索相应的文档数据:
- 通过下列路径进行配置:
SPRO-Customer Relationship Management-UI Framework-Technical Role Definition-Define Work Area Component Repository :
给 wrapper Component 创建一条新的记录:
以上就是全部的步骤。