salesforce零基礎學習(九十四)classic下pagelayout引入的vf page彈出內容更新此page layout


我們在classic環境中,有時針對page layout不能實現的地方,可以引入 一個vf page去增強標准的 page layout 功能,有時可能要求這個 vf page的部分修改需要更新此 page layout 或者當前這個vf page彈出的新的window的改動需要刷新這個整體的page layout,項目中遇見了這種需求,因為前端不好,費了一些時間去解決了他,mark一下后期有遇見同樣的場景,可以直接拿過來用了。

下面我們的demo根據 當前引入的vf page彈出新的窗口,窗口對當前 page layout的部分的變量進行重新賦值需要刷新自動此page layout達到預期效果。

 GoodsDemoPage.page:用於展示一個按鈕,點擊此按鈕彈出來一個子頁面

 1 <apex:page standardController="Goods__c">
 2     <script type="text/javascript">
 3         function openChangeStatusWindow() {
 4             var directURL = '/apex/GoodsDemoDirectPage?id={!Goods__c.Id}';
 5             window.open(directURL,'newwindow','height=100,width=200,top=200, left=350,toolbar=no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no');
 6         }
 7 
 8         function refreshPagelayout() {
 9             window.top.location.href = '/{!Goods__c.Id}';
10         }
11     </script>
12     <apex:form>
13         <input type="button" value="清空Status狀態" onclick="openChangeStatusWindow();" />
14     </apex:form>
15 </apex:page>

GoodsDemoDirectPage.page:用於清空Goods中的Status的狀態並且更新父層面的page layout.

 1 <apex:page  showHeader="false">
 2     <script src="../../soap/ajax/42.0/connection.js" type="text/javascript"></script>
 3     <script type="text/javascript">
 4         sforce.connection.sessionId='{!GETSESSIONID()}';
 5         function changeGoodsStatus() {
 6             var goods = new sforce.SObject("Goods__c");
 7             goods.Id = '{!$CurrentPage.parameters.Id}';
 8             goods.Status__c = null;
 9             result = sforce.connection.update([goods]);
10             console.log('result' + result);
11             if(result[0].getBoolean('success')) {
12                 window.opener.refreshPagelayout();
13                 window.close();
14             } else {
15                 alert('error occured');
16             }
17         }
18     </script>
19     <apex:form>
20         <input type="button" value="清空" onclick="changeGoodsStatus();" />
21     </apex:form>
22 </apex:page>

將GoodsDemoPage配置在Goods__c這個sObject的page layout即可。點擊‘清空Status狀態’按鈕以后,會彈出來一個頁面,點擊頁面中的‘清空’按鈕以后彈出的頁面會關閉並且當前的 page layout會自動刷新。

這里主要有兩個關鍵點:window.top以及window.opener。這兩個區別如下:

window.top用於返回頂層窗口,即瀏覽器的窗口。GoodsDemoPage嵌在了page layout中,則針對 GoodsDemoPage來說,其window.top指向的就是當前的 page layout對應的窗口。

window.opener用於返回打開此頁面的頁面。針對GoodsDemoDirectPage,其由GoodsDemoPage打開,所以針對GoodsDemoDirectPage來說,其window.opener指向的是GoodsDemoPage。所以針對這個demo中我們只需要通過window.opener調用GoodsDemoPage的refreshPageLayout方法,然后在方法中使用window.top指向到當前的URL刷新即可。

總結:篇中主要涉及到js的知識,因為本人js比較菜,如果有錯誤或者更好的方式歡迎指出,有不懂的歡迎留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM