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的原创技术文章,请关注公众号”汪子熙”或者扫描下面二维码:
CRM WebClient UI的浏览器打印实现相关推荐
- 如何证明CRM WebClient UI上的应用是有状态(Stateful)的
随便找一个在CRM WebClient UI里会被频繁调用到的函数,在函数里创建一个隐式增强,打印当前的会话ID. 不关闭浏览器,在浏览器里不断做操作,可以观察到不管做任何操作,每次断点出发后,打印出 ...
- Jerry答网友提问:SAP CRM WebClient UI里的EXT,STRUCT等含义
2020年,Jerry会做一个新的尝试,选择部分朋友向我提出的问题,在公众号,知识星球或者微信圈子这些平台上公开回答,这样或许能帮助到更多的朋友. 具体说明参见我前一篇文章:2020年关于SAP知识问 ...
- SAP CRM WebClient UI Technical profile里timeout 设置
Created by Jerry Wang, last modified on May 15, 2014 SPRO里能够对technical profile设定超时相关的参数: End session ...
- CRM WebClient UI和Hybris里工作中心跳转的url生成逻辑
CRM WebClient UI 把Work center的navigation target在client side不可见:在Chrome development tool里看不到,而是点击了Wor ...
- SAP CRM WebClient UI交互式报表的Gross Value工作原理
SAP CRM WebClient UI交互式报表(Interactive Report)的Gross Value工作原理 the selection fields passed to backend ...
- Angular的scope. apply和CRM WebClient UI的modify方法
标题的两个方法作用相同. Angular 在每一次Javascript代码执行序列执行结束后,Angular都去检查绑定的数据是否发生改变,通过调用scope.apply完成.scope. apply ...
- SAP CRM WebClient UI和Hybris Commerce里的跨组件跳转
CRM WebClient UI How to debug cross component navigation framework https://wiki.scn.sap.com/wiki/dis ...
- 在C4C UI里嵌入CRM WebClient UI
效果如图:在SAP Cloud for Customer里能看见SAP CRM WebClient UI的登录界面. 实际使用的技术叫SAP HTML mashup,在我这篇文章里有详细实现步骤: S ...
- 为什么CRM WebClient UI每次点了回车都会触发到后台的roundtrip
答案是这个modify的调用: 同样,在C4C的ESF里也有类似CRM WebClient UI的处理. 比如这个error message的抛出, 虽然是在Sales Order BO item n ...
最新文章
- android 在一个Activity(A)中结束另一个Activity(B)
- PostgreSQL和Excel的数据合并
- ZOJ 1610 Count the Colors 【线段树】
- hibernate3.2多表关联查询常见问题
- Spring 框架中有哪些不同类型的事件?
- 【arc101】比赛记录
- [一起读源码]走进C#并发队列ConcurrentQueue的内部世界 — .NET Core篇
- C# Linq to Entity Lamda方式分组并求和求平均值
- Ant学习---第一节:Ant安装和简单使用
- 在Java中使用标准输入输出设备进行字符串,整数浮点数等 的输入输出操作
- 阶段3 3.SpringMVC·_05.文件上传_5 文件上传之跨服务器上传分析和搭建环境
- Python - 装机系列24 消息工具 RabbitMQ详细了解
- 免费模板 | 高颜值超实用,这套财务分析模版自带BUFF加成
- vue-pdf分页预览
- ROS中使用A星算法进行路径规划
- CAN总线协议学习笔记
- 【山大会议】注册页的编写
- Linux Shell操作json工具jq
- drill apache_Apache Spark与Apache Drill
- 石油管道巡线案例:SABER无人机高原2500米轻松作业
热门文章
- J2EE搭建maven工程(选择使用jdk和增加资源文件夹)
- 回归素材(part4)--python机器学习基础教程
- python观察日志(part8)--文件名和路径
- 《复杂》读书笔记(part3)--熵
- 怎么把mysql表里的时间往后推移_Mysql实战45讲笔记:2、更新语句的执行以及日志...
- 京东8.27算法笔试-滚雪球(动态规划python)
- SAP UI5 框架是如何执行 batch 请求的单步调试
- docker run hello-world 遇到错误消息 - error during connect
- SAP Spartacus ConfigInitializerService里的isStable属性
- SAP Hybris和Netweaver的租户隔离(Tenant isolation)机制设计