`
JerryWang_SAP
  • 瀏覽: 564540 次
  • 性別: Icon_minigender_1
  • 來自: 西安
文章分類
社區版塊
存檔分類
最新評論

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的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:

?
?
0
0
分享到:
評論
2 樓 JerryWang_SAP 2018-04-30  
masuweng 寫道
這是java代碼嗎?


您好,都是JavaScript哈。
1 樓 masuweng 2018-04-19  
這是java代碼嗎?
Global site tag (gtag.js) - Google Analytics 开心农场种蔬菜赚钱 pc蛋蛋论坛 网上赚钱网 临汾期货配资 姚记娱乐棋牌 美女捕鱼的兑换码 信富配资 富贵乐园官方首页 捕鱼在线下载 福州掌心麻将官方版 怎样通过网络赚钱 锦盈多配资 三分彩平台 今日跌停股票名单 豪利下载 股票交易平台排行 北京股指期货配资