专栏首页Jerry的SAP技术分享CRM WebClient UI的浏览器打印实现
原创

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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • S/4HANA和CRM Fiori应用的搜索分页实现

    在我的博客Paging Implementation in S/4HANA for Customer Management 我介绍了S/4HANA for Cu...

    Jerry Wang
  • 如何查找Authorization object在哪些ABAP代码里使用到

    双击where-Used List->Authorization Objects->In Programs:

    Jerry Wang
  • 服务人员在Hybris ASM手动分配coupon给某个客户

    用户Jerry登录storefront,在My Coupon里没有发现任何可用的coupon:

    Jerry Wang
  • S/4HANA和CRM Fiori应用的搜索分页实现

    在我的博客Paging Implementation in S/4HANA for Customer Management 我介绍了S/4HANA for Cu...

    Jerry Wang
  • Hybris UI的Route(路由)实现

    登录Hybris前台,在product catalog里选择Digital camera:

    Jerry Wang
  • SAP S/4HANA里订单状态的实现原理

    we can find the header update function module is still called - one update recor...

    Jerry Wang
  • Item描述信息的更改也会导致will trigger ORDERADM_H的update函数触发

    we can find the header update function module is still called - one update recor...

    Jerry Wang
  • SAP Vim和ABAP Editor的个人设置

    每个user SE80的配置存在表RSEUMOD里。比如我想参考Wade 的SE80设置,最后一次打开了哪些package,program之类的信息:

    Jerry Wang
  • SpringBoot应用和PostgreSQL数据库部署到Kubernetes上的一个例子

    上述Service的yaml文件里每个字段,在Kubernetes的API文档里有详细说明。

    Jerry Wang
  • ViewPager快速实现引导页

    在很多APP第一次启动时都会出现引导页,在一些APP里面还会包括一些左右滑动翻页和页面轮播切换的情况。在之前也已经学习了AdapterViewFlipp...

    分享达人秀

扫码关注云+社区

领取腾讯云代金券