2014-04-30 28 views
2

如何使用VF或APEX获取相关列表,当我们通过URL传递ID和对象时,Ex假设我发送Account对象和ID,我应该只获取与Account对象相关的列表,但不能获取Account details 。如果我使用APEx:详细信息我将获得帐户和它的相关列表,但我只需要相关列表。仅在salesforce中使用的相关列表

@Ivan这里的代码

控制器

Public Class CustomRelatedList{ 


public String objectType {get; set;} 

public Set<String> chsobject1 {get;set;} 
public sobjecttype chsobject {get;set;} 

public sObject[] data {get; set;} 


public CustomRelatedList() { 
chsobject1 = new Set<String>(); 
} 


public void CustomRelatedList1() { 
    //get URL parameters 

//的objectType = ApexPages.currentPage()getParameters()得到( 'urlparm')。;

objectType = ‘Account’; //for testing purpose will get object type & Id from URL 

Map<String , Schema.SObjectType> globalDescription =  Schema.getGlobalDescribe(); 

    Schema.sObjectType sObjType = globalDescription.get(objectType); 
    Schema.DescribeSObjectResult r1 = sObjType.getDescribe(); 

    List<Schema.ChildRelationship> C = r1.getChildRelationships(); 

for (Schema.ChildRelationship C1:C) { 
     chsobject = C1.getChildSObject(); 
    chsobject1.add(String.valueof(chsobject)); 
} 

    } 
} 

VF page 
<apex:page controller="CustomRelatedList" > 
<apex:repeat value="{!chsobject1}" var="a" > 
<apex:relatedList list="{!a}" subject="{!$CurrentPage.parameters.id}" /> 
</apex:repeat> 
</apex:page> 

我想显示的ID(不只是名称)的所有相关的清单,但参数列表中只需要文字

回答

2

我会欺骗和隐藏页面块,我不想用CSS;)这不是一个聪明的Apex'y解决方案,但它需要照顾很多东西(用户不应该看到的对象和列表,页面布局他的个人资料一致,选择记录类型等)

开始页面是这样的:

<apex:page id="page" showHeader="false" readonly="true"> 
    <apex:pageMessage severity="error" strength="2" rendered="{!ISBLANK($CurrentPage.parameters.id)}" 
     summary="Id not passed" /> 
    <apex:detail id="detail" subject="{!$CurrentPage.parameters.id}" 
     title="false" showChatter="false" relatedListHover="false"/> 
</apex:page> 

检查创建的HTML,你应该会看到类似这样的:

enter image description here

我只想去隐藏div负责“细节”部分。我已经决定由元素的ID来做到这一点:

<apex:page id="page" showHeader="false" readonly="true"> 
    <style> 
    div#ep_page_detail{ 
     display:none; 
    } 
    </style> 

    <apex:pageMessage severity="error" strength="2" summary="Id not passed" rendered="{!ISBLANK($CurrentPage.parameters.id)}" /> 

    <apex:detail id="detail" subject="{!$CurrentPage.parameters.id}" 
     title="false" showChatter="false" relatedListHover="false"/> 
</apex:page> 

你可能想通过类的所有孩子的div是DIV也许类来做到这一点...这两种方法都可以打破,如果SF更改类名/ id生成的方法。这不太可能,但请牢记这一点。

更安全的方法是确保我们知道,生成将使用$Component全局变量的标识,但是当我用{!$Component.detail}它不产生正确的结果......

+0

谢谢它的工作:-) – user3589895

+0

酷:)请考虑在几天的时间接受答案。这样,你可以给予其他人几天更多的聪明才智,但最终这些问题很有可能会被“忽略”。 – eyescream

1

我认为你正在寻找<apex:relatedList> VF标签。看到它的文档here

+0

感谢伊万..suppose我发送任何通用对象(它可以是自定义或标准对象)和Id通过URL,它应该只显示相关的列表 – user3589895

+0

您可以在控制器中使用DescribeSObjectResult.getChildRelationships()来生成可用关系列表和然后在页面上使用'' – IvanR

+0

迭代它,我能够获得子关系,但是当试图通过使用 它给出下面的错误错误:文字值是属性列表中必需的,有什么方法可以显示这些相关列表 – user3589895

相关问题