我们在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:用于展示一个按钮,点击此按钮弹出来一个子页面

 <apex:page standardController="Goods__c">
<script type="text/javascript">
function openChangeStatusWindow() {
var directURL = '/apex/GoodsDemoDirectPage?id={!Goods__c.Id}';
window.open(directURL,'newwindow','height=100,width=200,top=200, left=350,toolbar=no, menubar=no, scrollbars=no, resizable=yes, location=no, status=no');
} function refreshPagelayout() {
window.top.location.href = '/{!Goods__c.Id}';
}
</script>
<apex:form>
<input type="button" value="清空Status状态" onclick="openChangeStatusWindow();" />
</apex:form>
</apex:page>

GoodsDemoDirectPage.page:用于清空Goods中的Status的状态并且更新父层面的page layout.

 <apex:page  showHeader="false">
<script src="../../soap/ajax/42.0/connection.js" type="text/javascript"></script>
<script type="text/javascript">
sforce.connection.sessionId='{!GETSESSIONID()}';
function changeGoodsStatus() {
var goods = new sforce.SObject("Goods__c");
goods.Id = '{!$CurrentPage.parameters.Id}';
goods.Status__c = null;
result = sforce.connection.update([goods]);
console.log('result' + result);
if(result[0].getBoolean('success')) {
window.opener.refreshPagelayout();
window.close();
} else {
alert('error occured');
}
}
</script>
<apex:form>
<input type="button" value="清空" onclick="changeGoodsStatus();" />
</apex:form>
</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比较菜,如果有错误或者更好的方式欢迎指出,有不懂的欢迎留言。

salesforce零基础学习(九十四)classic下pagelayout引入的vf page弹出内容更新此page layout的更多相关文章

  1. salesforce 零基础学习(四十九)自定义列表分页之使用Pagination实现分页效果 ※※※

    上篇内容为Pagination基类的封装,此篇接上篇内容描述如何调用Pagination基类. 首先先创建一个sObject,起名Company info,此object字段信息如下: 为了国际化考虑 ...

  2. salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※

    我们知道,salesforce中系统标准列表页面提供了相应的分页功能,如果要使用其分页功能,可以访问http://www.cnblogs.com/zero-zyq/p/5343287.html查看相关 ...

  3. salesforce 零基础学习(四十五)Approval Lock & UnLock相关注意事项

    我们都知道,当一条记录进入审批流程以后会自动加锁,apex提供Approval类的lock和unlock方法可以让我们使用代码对记录进行加锁和解锁. 项目中遇到一个需求,需要当某种情况下对记录进行先解 ...

  4. salesforce 零基础学习(四十四)实现checkbox列表简单过滤功能

    现在做的项目代码是原来其他公司做的,要在原来基础上业务进行适当调整加上一些CR,其中有一个需要调整的需求如下: 原来使用apex:selectCheckboxes封装了一个checkbox列表,因为数 ...

  5. salesforce 零基础学习(四十一)Group

    salesforce中,有的时候我们需要将一组用户放进一个Group,用来实现以下主要功能: 1.通过sharing rule设置默认的共享访问; 2.将记录分享给其他用户; 3.指定同步的联系人,这 ...

  6. salesforce 零基础学习(四十)Custom Settings简单使用

    有时候,项目中我们需要设置类似白名单的功能,即某些用户或者某种Profile的用户不走一些校验或者走一些校验,这时,使用Custom Settings功能可以很好的解决这一需求. Custom Set ...

  7. salesforce 零基础学习(四十七) 数据加密简单介绍

    对于一个项目来说,除了稳定性以及健壮性以外,还需要有较好的安全性,此篇博客简单描述salesforce中关于安全性的一点小知识,特别感谢公司中的nate大神和鹏哥让我学到了新得知识. 项目简单背景: ...

  8. salesforce 零基础学习(四十六)动态美观显示列表中记录的审批状态

    项目中,申请者申请某些事项以后,常常需要在申请列表中查看当前申请的记录所在的审批状态,动态美观的显示状态可以使UI更符合客户要求,比如下面这样. 以Goods__c表为例,申请者申请的一些采购以前需要 ...

  9. salesforce 零基础学习(四十三)运算取余

    工作中遇到一个简单的小问题,判断两个数是否整除,如果不整除,获取相关的余数. 习惯java的我毫不犹豫的写下了代码 public Boolean isDivisibility(Integer divi ...

随机推荐

  1. XLM论文原理解析

    1. 前言 近一年来,NLP领域发展势头强劲,从ELMO到LSTM再到去年最牛叉的Google Bert,在今年年初,Facebook又推出了XLM模型,在跨语言预训练领域表现抢眼.实验结果显示XLM ...

  2. 2019CCPC 秦皇岛 E.Escape

    传送门 题意: 给出一个\(n*m\)的迷宫,有\(a\)个入口,\(b\)个出口. 现在有\(a\)个机器人都从入口出发,一开始方向默认为下,你可以选在在一些格子上面放置一个转向器,转向器有四种: ...

  3. Appium基础:appium相关API

    1.获取信息类: 1.1 获取当前界面的组件: driver.currentActivity(); //获取当前界面的activity,可用于断言是否跳转到预期的activity 1.2 获取当前页面 ...

  4. Flask框架入门(一)

    Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其他几乎所有的功能都 ...

  5. 201871010134-周英杰 《面向对象程序设计(java)》第十二周学习总结

    201871010134-周英杰 <面向对象程序设计(java)>第十二周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  6. Python运维中20个常用的库和模块

    1.psutil是一个跨平台库(https://github.com/giampaolo/psutil) 能够实现获取系统运行的进程和系统利用率(内存,CPU,磁盘,网络等),主要用于系统监控,分析和 ...

  7. JVM-卡表(Card Table)

    简介 现代JVM,堆空间通常被划分为新生代和老年代.由于新生代的垃圾收集通常很频繁,如果老年代对象引用了新生代的对象,那么,需要跟踪从老年代到新生代的所有引用,从而避免每次YGC时扫描整个老年代,减少 ...

  8. SLAM:

    十四讲: 传感器约束了外部环境 测到的通常都是一些间接的物理量而不是直接的位置数据 只能通过一些间接的手段,从这些数据推算自己的位置 好处是没有对环境提出任何要求 camera:单目.双目.深度 Mo ...

  9. vue系列--- 认识Flow(一)

    1. 什么是Flow? Flow 是javascript代码的静态类型检查工具.它是Facebook的开源项目(https://github.com/facebook/flow),Vue.js(v2. ...

  10. Autofac注册组件详解

    注册概念:我们通过创建 ContainerBuilder 来注册 组件 并且告诉容器哪些 组件 暴露了哪些 服务.组件 可以通过 反射 创建; 通过提供现成的 实例创建; 或者通过 lambda 表达 ...