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

CRM WebClient UI的浏览器打印实现相关推荐

  1. 如何证明CRM WebClient UI上的应用是有状态(Stateful)的

    随便找一个在CRM WebClient UI里会被频繁调用到的函数,在函数里创建一个隐式增强,打印当前的会话ID. 不关闭浏览器,在浏览器里不断做操作,可以观察到不管做任何操作,每次断点出发后,打印出 ...

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

    2020年,Jerry会做一个新的尝试,选择部分朋友向我提出的问题,在公众号,知识星球或者微信圈子这些平台上公开回答,这样或许能帮助到更多的朋友. 具体说明参见我前一篇文章:2020年关于SAP知识问 ...

  3. SAP CRM WebClient UI Technical profile里timeout 设置

    Created by Jerry Wang, last modified on May 15, 2014 SPRO里能够对technical profile设定超时相关的参数: End session ...

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

    CRM WebClient UI 把Work center的navigation target在client side不可见:在Chrome development tool里看不到,而是点击了Wor ...

  5. SAP CRM WebClient UI交互式报表的Gross Value工作原理

    SAP CRM WebClient UI交互式报表(Interactive Report)的Gross Value工作原理 the selection fields passed to backend ...

  6. Angular的scope. apply和CRM WebClient UI的modify方法

    标题的两个方法作用相同. Angular 在每一次Javascript代码执行序列执行结束后,Angular都去检查绑定的数据是否发生改变,通过调用scope.apply完成.scope. apply ...

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

    CRM WebClient UI How to debug cross component navigation framework https://wiki.scn.sap.com/wiki/dis ...

  8. 在C4C UI里嵌入CRM WebClient UI

    效果如图:在SAP Cloud for Customer里能看见SAP CRM WebClient UI的登录界面. 实际使用的技术叫SAP HTML mashup,在我这篇文章里有详细实现步骤: S ...

  9. 为什么CRM WebClient UI每次点了回车都会触发到后台的roundtrip

    答案是这个modify的调用: 同样,在C4C的ESF里也有类似CRM WebClient UI的处理. 比如这个error message的抛出, 虽然是在Sales Order BO item n ...

最新文章

  1. android 在一个Activity(A)中结束另一个Activity(B)
  2. PostgreSQL和Excel的数据合并
  3. ZOJ 1610 Count the Colors 【线段树】
  4. hibernate3.2多表关联查询常见问题
  5. Spring 框架中有哪些不同类型的事件?
  6. 【arc101】比赛记录
  7. [一起读源码]走进C#并发队列ConcurrentQueue的内部世界 — .NET Core篇
  8. C# Linq to Entity Lamda方式分组并求和求平均值
  9. Ant学习---第一节:Ant安装和简单使用
  10. 在Java中使用标准输入输出设备进行字符串,整数浮点数等 的输入输出操作
  11. 阶段3 3.SpringMVC·_05.文件上传_5 文件上传之跨服务器上传分析和搭建环境
  12. Python - 装机系列24 消息工具 RabbitMQ详细了解
  13. 免费模板 | 高颜值超实用,这套财务分析模版自带BUFF加成
  14. vue-pdf分页预览
  15. ROS中使用A星算法进行路径规划
  16. CAN总线协议学习笔记
  17. 【山大会议】注册页的编写
  18. Linux Shell操作json工具jq
  19. drill apache_Apache Spark与Apache Drill
  20. 石油管道巡线案例:SABER无人机高原2500米轻松作业

热门文章

  1. J2EE搭建maven工程(选择使用jdk和增加资源文件夹)
  2. 回归素材(part4)--python机器学习基础教程
  3. python观察日志(part8)--文件名和路径
  4. 《复杂》读书笔记(part3)--熵
  5. 怎么把mysql表里的时间往后推移_Mysql实战45讲笔记:2、更新语句的执行以及日志...
  6. 京东8.27算法笔试-滚雪球(动态规划python)
  7. SAP UI5 框架是如何执行 batch 请求的单步调试
  8. docker run hello-world 遇到错误消息 - error during connect
  9. SAP Spartacus ConfigInitializerService里的isStable属性
  10. SAP Hybris和Netweaver的租户隔离(Tenant isolation)机制设计