Страница 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>

person Allison Lins    schedule 15.06.2012    source источник


Ответы (1)


Главное понимать, что 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>

В коде я добавил несколько скриптов, которые пересчитают итоги, а также удалил область действия, которая казалась ненужной. Я не смог его протестировать (поскольку у меня нет этого объекта, настроенного в моей учетной записи), но я думаю, что он должен сработать для вас.

person zashu    schedule 15.06.2012