我有一个命令按钮,当我点击我希望它保存一个电话呼叫记录并重定向到记录页面之后,在新窗口中打开一个新页面,显示与该呼叫相关的新案例的编辑页面。
我这样做:
//Pseudocode
public PageReference saverecord(){
create a new phone call record;
insert record;
if(createnewcase)
create case;
insert case;
create editcaseURL;
return phonerecord page;
}
在客户端,在命令按钮中,我使用<apex:param name="newcase" value="true" assignTo="{!createNewCase}"/>
将createnewcase设置为true。和不完整的JavaScript打开弹出窗口。我已经单独测试了phonerecord和caserecord并成功了。但当我把它们放在一个班级时,案件从未被创造出来。并在visualforce视图状态窗口中。我甚至找不到布尔值createnewcase。
请帮忙。
由于
答案 0 :(得分:1)
使用Apex / JavaScript很容易实现:
顶点代码:
// Defining two variables for the both records (case and phone)
public String caseId { get; set; }
public String phoneId { get; set; }
// Defining a boolean to render the JavaScript panel after saving
punlic Boolean redirectNow { get; set; }
public PageReference saverecord(){
// Create a new phone call record;
insert record;
// Now reading a phone record id
phoneId = record.id;
if(createnewcase){
create case;
insert case;
// Now reading a case id
caseId = case.id;
}
// If case and phone are OK -> set this flag to true
redirectNow = true;
// We do not need to return a real page reference
// because we will redirecting with javascript
return null;
}
使用JavaScript的Visualforce页面:
<!-- A command button, that rerenders a panel with JavaScript -->
<apex:commandButton value="Save" action="{!saverecord}" reRender="doAfterSave"/>
<!-- This panel renders only after you will save the new records -->
<apex:outputPanel id="doAfterSave">
<apex:outputPanel rendered="{!redirectNow}">
<script>
// First reading the id's
var newCaseId = '{!caseId}';
var newPhoneId = '{!phoneId}';
if(newCaseId != '' && newPhoneId != '')
{
// Now opening a new window with case in edit mode
window.open('/' + newCaseId + '/e');
// And then redirecting the main page to the new phone record
window.location = '/' + phoneId;
}
</script>
</apex:outputPanel>
</apex:outputPanel>
答案 1 :(得分:0)
如果要在编辑模式下打开新创建的案例,请使用以下代码。
public PageReference saverecord(){
create a new phone call record;
insert record;
if(createnewcase)
{
create case;
insert case;
return new PageReference('/' + case.Id + '/e');
}
else
do other logic here
return null;
答案 2 :(得分:0)
虽然这篇文章已经过时了,但如果你真的需要使用JavaScript和弹出窗口来完成这项工作(而不是简单地使用Visualforce页面并在url中传递参数,或者使用共享同一个控制器的VF页面,从而保持相同的上下文,成员变量值等),我将看一下本教程:Tutorial: Modal Dialogs in Visualforce using the Yahoo! User Interface Library
基本技巧是使“弹出窗口”真正只是同一页面的隐藏方面,以避免与在Visualforce中使用JavaScript传递值相关的问题。
从教程:
实际上,构建链接或按钮以弹出新的Visualforce页面 很简单,让这个弹出窗口高于当前页面是 也很容易。当您想要收集时会出现问题 弹出窗口中的信息并将该信息传递回页面 推出了弹出窗口。
问题是新窗口是作为单独的浏览器启动的 使用window.open()时请求。由于这是一个单独的请求 对于服务器,新页面不共享同一个控制器 背景/会话。即使这两个页面都使用相同的名称 控制器!这是因为这些是两个不同的事实 请求在浏览器级别。