Visualforce页面未执行操作

时间:2012-06-15 17:44:01

标签: salesforce visualforce

我对visualforce / salesforce非常陌生,我是一个可怕的初学者,所以请原谅我可能很容易的问题。

我正在创建一个页面来跟踪会议预算。基本上用户输入在一个字段中设置多少预算,在下一个实际成本中,然后在第三个字段SF / VF应该计算2个数字并显示差异。我设置了字段(正确的,我相信这很简单)并设置了一个页面。现在,当您在字段中输入信息并单击保存时,没有任何操作。

这一切都在我脑海之上,我试图在文献中找到答案,但没有太多运气。

以下是代码:

    <apex:page standardController="Conference__c" sidebar="true"> 
    <apex:sectionHeader title="Conference Budget" subtitle="{!Conference__c.name}"/> 
        <apex:form > 
          <apex:pageBlock title="Conference Budget" id="thePageBlock" mode="edit"> 
            <apex:pageBlockButtons > 
                    <apex:commandButton value="Save" action="{!save}"/> 
                    <apex:commandButton value="Cancel" action="{!cancel}"/>                 
            </apex:pageBlockButtons> 
             <apex:actionRegion >
 <apex:pageBlocksection title="Conference Budget"> 
            <apex:panelGrid columns="4" width="400px" cellspacing="5px">                

                <apex:outputText value="Item" id="Item"/>
                <apex:outputText value="Budgeted" id="Budgeted"/>
                <apex:outputText value="Actual" id="Actual"/>
                <apex:outputText value="Difference" id="Difference"/>

                <apex:outputText value="Advertising" id="advertising"/>
                <apex:inputField value="{!Conference__c.Advertising_b__c}"/>
                <apex:inputField value="{!Conference__c.Advertising_a__c}"/>
                <apex:inputField value="{!Conference__c.Advertising_d__c}"/> 
<apex:outputText value="Totals" id="totals"/>
                <apex:inputField value="{!Conference__c.Total_Cost_b__c}"/>
                <apex:inputField value="{!Conference__c.Total_Cost_a__c}"/>
                <apex:inputField value="{!Conference__c.Total_Cost_d__c}"/>


                <apex:actionStatus startText="applying value..." id="status"/>

                </apex:panelGrid>
              </apex:pageBlocksection> 
                              </apex:actionRegion>



      </apex:pageBlock> 
 </apex:form> 
 </apex:page>

1 个答案:

答案 0 :(得分:0)

要实现的主要事情是Salesforce(除非您设置了某种类型的工作流程)不会自动计算这些字段。此外,只需在操作区域内保存记录,就不会保存记录,重新加载记录并再次显示页面。据我所知,保存会将用户重定向到记录详细信息页面。

对于这个简单的计算,如果你想要计算之前来保存记录,我会使用一些简单的 javascript

<apex:page standardController="Conference__c" sidebar="true">
  <!-- I use JQUERY because Salesforce IDs are very difficult to utilize in standard JS -->
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
  <script type="text/javascript">
    var $j = jQuery.noConflict(); // SFDC uses $ so we need to assign jQuery to something else
    function recalcAd() {
      try{
        var budget =  parseFloat( $j("input[id$='ad-b']").val() );
        var actual =  parseFloat( $j("input[id$='ad-a']").val() );
        $j("input[id$='ad-d']").val(budget - actual);
      } catch (e) {
        $j("input[id$='ad-d']").val("");
      }
    }
    function recalcTot() {
      try{
        var budget =  parseFloat( $j("input[id$='tot-b']").val() );
        var actual =  parseFloat( $j("input[id$='tot-a']").val() );
        $j("input[id$='tot-d']").val(budget - actual);
      } catch (e) {
        $j("input[id$='tot-d']").val("");
      }
    }
  </script>
  <apex:sectionHeader title="Conference Budget" subtitle="{!Conference__c.name}"/> 
    <apex:form > 
      <apex:pageBlock title="Conference Budget" id="thePageBlock" mode="edit"> 
      <apex:pageBlockButtons > 
          <apex:commandButton value="Save" action="{!save}"/> 
          <apex:commandButton value="Cancel" action="{!cancel}"/>         
      </apex:pageBlockButtons> 
      <apex:pageBlocksection title="Conference Budget"> 
        <apex:panelGrid columns="4" width="400px" cellspacing="5px"> 
          <apex:outputText value="Item" id="Item"/>
          <apex:outputText value="Budgeted" id="Budgeted"/>
          <apex:outputText value="Actual" id="Actual"/>
          <apex:outputText value="Difference" id="Difference"/>
          <apex:outputText value="Advertising" id="advertising"/>
          <apex:inputField id="ad-b" value="{!Conference__c.Advertising_b__c}" onChange="recalcAd(); return true;"/>
          <apex:inputField id="ad-a" value="{!Conference__c.Advertising_a__c}" onChange="recalcAd(); return true;"/>
          <apex:inputField id="ad-d" value="{!Conference__c.Advertising_d__c}"/> 
          <apex:outputText value="Totals" id="totals"/>
          <apex:inputField id="tot-b" value="{!Conference__c.Total_Cost_b__c}" onChange="recalcTot(); return true;"/>
          <apex:inputField id="tot-a" value="{!Conference__c.Total_Cost_a__c}" onChange="recalcTot(); return true;"/>
          <apex:inputField id="tot-d" value="{!Conference__c.Total_Cost_d__c}"/>
        </apex:panelGrid>
      </apex:pageBlocksection> 
    </apex:pageBlock> 
 </apex:form> 
 </apex:page>

在代码中我添加了一些脚本,它将重新计算总数以及删除似乎不必要的动作区域。我无法测试它(因为我没有在我的帐户中设置该对象)但我认为它应该适合你。