html - Visualforce:从商机对象访问价格计算
问题描述
我强迫我必须基于 Opportunity 对象构建一个自动发票生成器的问题。
我的代码如下:
<apex:page standardController="Opportunity" showHeader="false" Language="de" renderAs="pdf" >
<!-- Reference to Style Sheet, saved under Static Resources in Salesforce. -->
<apex:stylesheet value="{!$Resource.InvoiceCSS}" />
<div>
<!-- Below the optional text paragraph we put the table with all the products selected as Opportunity Line Items. -->
<table class="products" width="100%">
<tr>
<td width="100%" style="vertical-align:top;">
<apex:dataTable width="100%" value="{!Opportunity.OpportunityLineItems}" var="oli">
<apex:column width="200px" headerClass="tableheaderleft" footerClass="tablefooterleft" styleClass="tablebodyleft">
<apex:facet name="header">Description</apex:facet>
<apex:OutputField value="{!oli.Name}"/>
</apex:column>
<apex:column width="{!If(oli.Discount!=null,If((oli.Discount>0),"25px","15px"),"15px")}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
<apex:facet name="header">Quantity</apex:facet>
<apex:OutputField value="{!oli.Quantity}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
<apex:column width="95px" headerClass="tableheaderright" footerClass="tablefooterright" styleClass="tablebodyright">
<apex:facet name="header">Amount</apex:facet>
<apex:OutputField value="{!oli.UnitPrice}"/>
<apex:facet name="footer"></apex:facet>
</apex:column>
</apex:dataTable>
</td>
</tr>
<tr><td width="50%" headerClass="tableheaderright" footerClass="tablefooterright" styleClass="tablebodyright">Subamount</td><td width="50%">EUR XXXX,XX</td></tr>
<tr><td>VAT</td><td>EUR XXXX,XX</td></tr>
<tr><td>Total amount</td><td>XXXX,XX</td></tr>
</table>
</div>
由于到目前为止产品列表运行良好,现在我需要添加增值税、小计金额和金额字段,我不知道该怎么做。
我的想法是创建引用 Pricebook 或 Opportunity Products 对象的自定义公式字段,但我无法在公式生成器中访问这些字段。这正是我的问题所在:我不知道这些对象之间的关系是如何工作的,以及我需要参考哪些字段来完成这个计算。是否有可能访问金额、增值税和子金额的标准字段?如果是,我该如何访问它?
非常感谢!!
解决方案
实体关系图可以提供帮助:https ://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_erd_products.htm 。不过有点蹩脚。
如果您有自定义位,请尝试使用 Setup -> Schema Builder。
机会通过 OpportunityLineItem 与 Product 存在多对多关系。您在 ERD 上看不到它,但绝对有一个OpportunityLineItem.Product2Id
查找(外键)。
与 Pricebook 的关系有点混乱。机会 -> 到行项目 -> 到价格手册条目 -> 到价格手册。
对,那么您可以做什么...您可以在商机上创建汇总汇总字段,将总税作为行项目的税总和?然后,您将在 PDF 中显示{!Opportunity.Amount}
和/或某些内容。{!Opportunity.TotalTax__c}
我不知道你是怎么计算税的,它是 OppLineItem 上的自定义字段吗?谁决定费率?产品?帐户所在的国家/地区?价格手册条目和您有差异条目/产品?还是您只关心 1 个国家/地区,因此您按 1 个统一费率支付并完成工作?如果它是总数的 20%,那么你已经有了Opportunity.Amount
,再制定一个关于机会和工作的公式吗?
如果您不想创建一个字段 - 您可以添加一块 Apex 作为控制器扩展,查询数据,在那里进行计算并显示您的值。这可能……不太好。当我制作与会计相关的 PDF 时,我尽量让它们变得简单。没有计算,只是尽职尽责地获取由其他东西计算的值并按原样显示它们,也许还有一些格式。用户在测试期间可能不会总是发现 PDF 中的错误。如果它是一个真实的领域,那么可以报告的东西更有可能被抓住。因此,即使对于公式和汇总而言,税收计算过于混乱,我也可能会使用流/触发器来完成;将值保存到辅助字段,而不是将其隐藏在 PDF 后面。
(也有办法在纯 Visualforce 中做到这一点,没有自定义代码,巧妙地滥用apex:repeat
和apex:variable tags
......但我再次建议不要这样做。在表示层中有舍入错误等太重要了)
推荐阅读
- jenkins - Jenkins 中的图像触发 K8 部署
- javascript - 尝试在Vue中延迟加载组件文件时找不到模块
- c# - 如何将谷歌地图添加到 blazorwasm 应用程序
- dc.js - DC.js 现在是否提供分组条形图
- javascript - 无法加载 Nodemon,因为在此系统上禁用了运行脚本
- php - 在 Smarty 模板的 jQuery 语句中包含 PHP 文件
- bash - 在 git-bash 上按 enter 会跳转到新行 - 而不是要求输入密码
- javascript - 计算一段时间内的最高入住率
- python - 如何将泊松分布应用于 Python 中的单个值?
- .net - EF Core ChangeTracker:仅在 db 中设置 CreatedAt 字段