CRM WebClient UI的浏览器打印实现

WebClient UI上自带了一个打印按钮,按Ctrl + P后可以生成一个新的页面供打印。


如下图所示。可以看到这个页面里所有的超链接都已经被移除了。

这个页面的生成逻辑如下。

1. 按住ctrl + p之后,会触发WebClient UI框架的按键响应函数thtmlbKeyDown。浏览器传入的事件处理对象里ctrl属性为true,keycode为80(按键p对应的code),意思就是ctrl和p同时按下。

这个响应函数thtmlbKeyDown被注册到整个document对象上,因此您在页面任何位置点击ctrl+p都能得到响应。

从右上角的调用栈能发现crmFrwPrint被调用。crmFrwPrint会打开print.do这个控制器,位于BSP应用bspwd_basics里。

2. 打开print.do控制器的实现类CL_BSPWD_BASICS_PRINT

这个控制器会打开print.html页面

3. 我们按了ctrl+p后生成的页面的内容就是在print.html里生成的。核心代码在函数ppStartScripts里,被thtmlbRegisterOnLoad注册到页面的load事件里,意思是print.html加载时就执行。


thtmlUtil.addEventHandler就是SAP自己封装的事件注册函数,用于多浏览器的兼容支持。

最核心的两个函数:

CreateShield

生成一个height和width为100%的div,背景图片设置成SAP预定义好的1x1.gif。

运行时显示如下:

loadPage

通过window.opener拿到发生了ctrl+p按键的原始页面,然后把其th-l-wcsubheadercontainer下面的所有元素的html直接复制到打印输出页面的header元素下面。

这样就实现了把原始页面的内容搬到了打印输出页面。

然后得到打印页面所有超链接标签,然后把这些标签的href和onclick都置为一个函数体为return false的函数,这样超链接就不再能点击。


var?nirvana?=?new?Function?(?"return?false;"?);

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

原文地址:http://blog.51cto.com/5899363/2104597

时间: 2024-07-31 02:50:58

CRM WebClient UI的浏览器打印实现的相关文章

CRM WebClient UI和Hybris里工作中心跳转的url生成逻辑

CRM WebClient UI 把Work center的navigation target在client side不可见:在Chrome development tool里看不到,而是点击了Work center之后,在后台ABAP端计算出navigation target. Hybris 这个Catalog的下拉menu里每个item都对应一个url,在html里用 tag实现.这个url在客户端可见. https://localhost:9002/yacceleratorstorefro

Jerry答网友提问:SAP CRM WebClient UI里的EXT,STRUCT等含义

2020年,Jerry会做一个新的尝试,选择部分朋友向我提出的问题,在公众号,知识星球或者微信圈子这些平台上公开回答,这样或许能帮助到更多的朋友. 具体说明参见我前一篇文章:2020年关于SAP知识问答的一个新的尝试 网友的提问: Jerry的解答: 以上截图是CRM系统里BSP_WD_CPMWB这个事务码进入之后,任意打开一个上下文节点(Context Node)看到的信息: STRUCT的含义? 在Jerry之前的文章 Jerry的WebClient UI 42篇原创文章合集 提到这样一张图

CRM WebClient UI里的文件是如何上传到Netweaver后台的

使用Chrome开发者工具调试CRM WebClient UI里附件上传的功能: 从本地选择一个文件,断点触发: 前端取得用户选中上传的文件名: Jerry.txt 点Attach按钮后,触发ABAP后台的事件处理函数: 从Chrome开发者工具的network标签能观察到,UI向ABAP后台发送了一个http post请求: 后台依次处理所有的form parts: 从对应的form part里取出文件名称和文件类型: 以及实际的文件内容(由于security原因,该form part的内容无

SAP CRM WebClient UI和Hybris backoffice UI开发的相同点

CRM WebClient和Hybris backoffice的UI开发都不需要开发人员手写原生的html代码. CRM WebClient UI 在CRM WebUI workbench里,开发人员需要写下图这些SAP封装的tag: 这些Tag能在事物码SE80里找到: Hybris backoffice UI 比如我通过backoffice左边倒L形的工作中心列表查看优惠券列表,这个列表实际上是一棵树,根节点是Marketing. 上图界面是通过在XML文件里定义Hybris封装的tag来实

SAP CRM WebClient UI和Hybris Commerce里的跨组件跳转

CRM WebClient UI How to debug cross component navigation framework https://wiki.scn.sap.com/wiki/display/CRM/How+to+debug+cross+component+navigation+framework Hybris 点了一个产品的图片,系统怎么知道需要load哪个jsp文件来渲染? 之前的issue讨论过,这个点击对应的url,会被Spring MVC map到一个通过@Reque

如何在SAP CRM WebClient UI里创建HANA Live Report

1. 使用业务角色ANALYTICSPRO登录WebClient UI: 2. 点击新建按钮: 为新建的报表分配一个HANA Live Query: 指定Query的参数: 上图WebClient UI选择的参数都定义在HANA studio里: 给报表添加属性: 添加measure: 之后报表即可在WebClient UI里成功渲染: 并且也能在CRM Fiori的Customer Report应用里看到该report. 如果想获得更多关于上图提到的Fiori应用,请查看我的公众号文章 SAP

SAP CRM WebClient UI和Fiori UI混搭并存

SAP CRM里有个功能可以创建HANA live report,消费HANA Studio里创建的模型. 最后创建好的report长这个样子: 具体创建步骤可以参考我的博客Step by Step to create HANA live report in Webclient UI 这些report肉眼上看去显示在WebClient UI里,而WebClient UI似乎不能这么灵活的显示这些风格特异的图标.这是怎么实现的呢? 红色方框里的UI区域实际上是一个UI5应用: Webclient

使用Selenium自动化测试SAP CRM WebClient UI

<meta charset="utf-8"> package com.xc.crm.test; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; imp

SAP CRM WebClient UI的on_new_focus应该怎么理解

问题 我在做练习16时(第3步的e,f),发现有一句这样的描述: Double click on method CONNECT_NODES.Make Value node 'Competitors' dependent from BTAdminH. METHOD connect_nodes. DATA: coll_wrapper TYPE REF TO cl_bsp_wd_collection_wrapper. coll_wrapper = btadminh->get_collection_wr