Javascript 命令按钮动作

Javascript 命令按钮动作,javascript,salesforce,visualforce,Javascript,Salesforce,Visualforce,我有一个commandbutton,当单击它时,我希望它保存电话通话记录并重定向到记录页面,然后在新窗口中打开一个新页面,其中显示与通话相关的新案例的编辑页面 我是这样做的: //Pseudocode public PageReference saverecord(){ create a new phone call record; insert record; if(createnewcase) create case; insert case;

我有一个commandbutton,当单击它时,我希望它保存电话通话记录并重定向到记录页面,然后在新窗口中打开一个新页面,其中显示与通话相关的新案例的编辑页面

我是这样做的:

//Pseudocode
public PageReference saverecord(){
   create a new phone call record;
   insert record;
   if(createnewcase)
      create case;
      insert case;
      create editcaseURL;
   return phonerecord page;
}
在客户端,在commandbutton中,我使用
将createnewcase设置为true。和oncomplete javascript打开弹出窗口。我已经分别测试了电话记录和案例记录并成功了。但当我把它们放在一个类中时,这个案例从未被创建过。在visualforce视图状态窗口中。我甚至找不到布尔createnewcase

请帮忙


谢谢

如果您想在编辑模式下打开新创建的案例,请使用以下代码

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中的JavaScript传递值相关的问题

在本教程中:

构建一个链接或按钮来弹出一个新的Visualforce页面实际上是 非常简单,将此弹出窗口设置在当前页面上方非常简单 也很容易。当您要收集时,会出现问题 弹出窗口中的信息,并将该信息传递回页面 它启动了弹出窗口

问题在于新窗口是作为单独的浏览器启动的 使用window.open()时请求。因为这是一个单独的请求 对于服务器,新页不共享同一控制器 上下文/会话。即使两页都使用相同的名称 控制器!这是因为这是两个不同的事实 浏览器级别的请求


使用Apex/JavaScript很容易实现:

<!-- 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>
apex代码:

//为两个记录(case和phone)定义两个变量
公共字符串caseId{get;set;}
公共字符串phoneId{get;set;}
//定义布尔值以在保存后呈现JavaScript面板
punlic布尔重定向现在{get;set;}
公共页面引用保存记录(){
//创建新的通话记录;
插入记录;
//现在正在读取电话记录id
phoneId=record.id;
如果(createnewcase){
创建案例;
插入案例;
//现在读一个案例id
caseId=case.id;
}
//如果机箱和手机正常->将此标志设置为true
重定向现在=真;
//我们不需要返回真正的页面引用
//因为我们将使用javascript重定向
返回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>

//第一次读身份证
var newCaseId='{!caseId}';
var newPhoneId='{!phoneId}';
if(newCaseId!=''&&newPhoneId!='')
{
//现在打开一个新窗口,案例处于编辑模式
window.open('/'+newCaseId+'/e');
//然后将主页重定向到新的电话记录
window.location='/'+phoneId;
}

我相信有很多方法可以做到这一点。commandbutton似乎不能调用两个操作,但我可以使用javascript调用两个操作。然而,我真的希望它被整齐地包装在一个方法中,问题是我希望从一个方法返回两个页面引用。我还需要返回电话记录页面。我不确定我是否能做到,这就是为什么我 仅创建URL并尝试使用javascript打开它。在你的代码中,“else do other logic here”部分,我可以在那里创建另一个页面引用吗?谢谢你的回复。但我并没有试图从弹出窗口传回任何东西。我只想能够点击一个按钮,然后有两个新的页面,一个是从当前页面重定向,另一个是在一个新的窗口。目前,我 可以做重定向或新窗口刚刚好。但我不能让它们都发生。还是谢谢你。你展示的创意太棒了,我以后一定会用到。谢谢。这也应该奏效。我最终创建了两个URL,并使用javascript重定向或弹出窗口。