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