我正在尝试构建一个视觉力页面,您可以在其中选择一个机会,然后选择与该机会相关的阶段。机会保存在表 RecordTypes 中,阶段保存在表 OpportunityStage 中。
关系保存在哪个表中?
最佳答案
RecordTypes 不是表格,它们实际上是为特定对象定义的一组类型,因此该对象的任何记录(例如任何机会)都可以具有其中一种类型。它基本上是对象上的一个 super 特殊字段,用于驱动整个行为堆——您可以为每种记录类型设置不同的页面布局、不同的选择列表值,您可以自定义验证规则等。
阶段再次成为 Salesforce 配置的“特殊”部分,因为它们属于销售流程,我相信可用的值取决于记录类型(即它们就像一个选择列表)。
长话短说,您无需担心这些字段之间的任何关系,在数据库术语中它们是机会表中的列,在 SFDC 术语中它们是机会对象中的字段。
编辑 澄清要求后,即需要两个机会的可用阶段名称。
无需任何描述信息即可轻松使用 Visualforce。
确保您的销售流程已定义并链接到机会的适当记录类型(听起来这已经完成了)。接下来,只需使用自定义 Controller (或 Controller 扩展)加载所需的机会——您可以通过页面参数指定它们,如下所示,尽管这是一个人为的示例,不包括任何错误处理等(或机会选择):
public with sharing class DualOpptyController
{
public Opportunity oppty1 {get; set;}
public Opportunity oppty2 {get; set;}
public DualOpptyController()
{
oppty1 = [select Id, StageName from Opportunity where id = : ApexPages.currentPage().getParameters().get('o1')];
oppty2 = [select Id, StageName from Opportunity where id = : ApexPages.currentPage().getParameters().get('o2')];
}
}
然后简单地使用<apex:inputField>
把 StageName
页面上的字段:
<apex:page controller="DualOpptyController">
<apex:form >
<apex:inputField value="{!oppty1.StageName}"/>
<apex:inputField value="{!oppty2.StageName}"/>
</apex:form>
</apex:page>
当您想搜索帐户时,您可以使用 StageName
两个领域 oppty
和 oppty2
在你的 Controller 中。查询将类似于以下内容(未经测试):
[Select Id, Name, (select Id, Name from Opportunities where StageName in : liStageNames) from Account]
当然,这个问题是它会返回所有帐户,所以我认为你最好搜索 Opportunity
其中 StageName
等于oppty1
返回相关详细信息以及关联的帐户 ID。 然后 进行第二次查询以查找机会 StageName
等于oppty1
帐户 ID 位于第一个查询中的帐户 ID 集中。您仍然可能会遇到返回过多记录的问题,因此您可能会找到一种方法来改进此方法,或者您也可以指定其他参数(例如,本月结束的机会)。
关于database - Salesforce 记录类型和机会阶段关系数据库位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8560522/