命令按钮操作
commandbutton action
我有一个命令按钮,当单击时,我希望它保存电话呼叫记录并重定向到记录页面,然后在新窗口中打开一个新页面,显示与呼叫相关的新案例的编辑页面。
我是这样做的:
//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打开弹出窗口。我已经分别测试了电话记录和案件记录,并成功了。但当我把它们放在一个类中时,案例从未创建。以及在visualforce视图状态窗口中。我甚至找不到布尔createnewcase。
请帮忙。
感谢
使用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>
如果您想在编辑模式下打开新创建的案例,请使用以下代码。
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;
尽管这篇文章已经过时了,但如果你真的需要使用JavaScript和弹出窗口来完成这项工作(而不是简单地使用Visualforce页面并在url中传递参数,或者使用共享同一控制器的VF页面,从而维护相同的上下文、成员变量值等),我来看看这个教程:教程:Visualforce中使用Yahoo!用户界面库
关键的技巧是使"弹出窗口"实际上只是同一页面的一个隐藏方面,以避免在Visualforce中使用JavaScript传递值的相关问题。
来自教程:
构建一个链接或按钮来弹出一个新的Visualforce页面实际上是很简单,让这个弹出窗口位于当前页面上方也很容易。当您想收集时出现问题弹出窗口中的信息,并将该信息传回页面启动弹出窗口。
问题是新窗口是作为一个单独的浏览器启动的请求。由于这是一个单独的请求对于服务器,新页面不共享同一个控制器上下文/会话。即使两个页面都使用相同的名称控制器!这是因为这是两个不同的事实浏览器级别的请求。
- jQuery:暂停按钮可以暂停所有其他操作
- 将文本框中的值用于按钮窗体操作上的变量
- 有没有一种方法可以检测ios<>使用jquery和触发器操作形成导航按钮
- 根据当前用户启用“自定义操作”按钮
- 如何在用户到达iframe分区末尾时显示操作按钮
- 如何在chrome扩展中插入通知操作按钮
- 操作无法使用自定义控件上的呈现属性集,该控件包含操作按钮
- 每次点击网页操作按钮时,Chrome 扩展程序都不会运行
- 无法让Gmail一键确认操作按钮工作
- 如果在按 jqgrid 中的保存操作按钮返回错误,如何保持内联添加
- 单击“操作”按钮时,每次单击此按钮时显示一组字段
- 我如何制作一个外观和行为都像切换的浏览器操作按钮
- 通过id操作按钮
- 刷新和操作按钮Html
- 单击操作按钮刷新部分视图
- 在排序行上重新排序操作按钮
- 单击Chrome扩展浏览器操作按钮时不显示弹出窗口
- 如何将操作按钮添加到jqgrid中,如演示中所示
- 动态创建的DOM操作按钮未触发事件
- 在 Shiny 中单击操作按钮后,将光标聚焦在文本区域中