0

我对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>
4

1 回答 1

0

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

对于这个简单的计算,如果你想在保存记录之前计算 ti ,我会使用一些简单的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>

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

于 2012-06-15T19:13:32.180 回答