命令按钮动作

时间:2012-07-31 02:50:50

标签: javascript salesforce visualforce

我有一个命令按钮,当我点击我希望它保存一个电话呼叫记录并重定向到记录页面之后,在新窗口中打开一个新页面,显示与该呼叫相关的新案例的编辑页面。

我这样做:

//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。

请帮忙。

由于

3 个答案:

答案 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()时请求。由于这是一个单独的请求   对于服务器,新页面不共享同一个控制器   背景/会话。即使这两个页面都使用相同的名称   控制器!这是因为这些是两个不同的事实   请求在浏览器级别。