2013-10-31 49 views
0

我有以下visualforce页面,需要通过case.recortype或case.recordtype.id字段过滤相关列表或页面阻止列表。任何人都可以指导我找出如何做到这一点?由于在Salesforce.com上,您可以通过RecordType过滤apex:pageBlockTable吗?

<apex:page standardController="Account" > 
<apex:pageblock title="Cases" > 
    <apex:pageblockSection > 
    <apex:relatedList title="Support Cases" list="Cases"/> 
    </apex:pageblockSection> 
    <apex:pageblockSection > 
    <apex:relatedList title="Training Cases" list="Cases"/> 
    </apex:pageblockSection> 
</apex:pageblock> 
<apex:pageBlock title="Support Cases" > 
    <apex:pageBlockTable value="{!Account.Cases}" var="c"> 
     <apex:column headervalue="Case"><apex:outputLink value="/{!c.id}">{!c.CaseNumber}</apex:outputLink></apex:column> 
     <apex:column value="{!c.Contact.Name}"/> 
     <apex:column value="{!c.Subject}"/> 
     <apex:column value="{!c.Priority}"/> 
     <apex:column value="{!c.CreatedDate}"/> 
     <apex:column value="{!c.status}"/>  
     <apex:column value="{!c.createdbyId}"/> 
</apex:pageBlockTable> 
</apex:pageBlock> 
    <apex:pageBlock title="Training Cases" > 
    <apex:pageBlockTable value="{!Account.Cases}" var="c"> 
     <apex:column headervalue="Case"><apex:outputLink value="/{!c.id}">{!c.CaseNumber}</apex:outputLink></apex:column> 
     <apex:column value="{!c.Contact.Name}"/> 
     <apex:column value="{!c.Subject}"/> 
     <apex:column value="{!c.Priority}"/> 
     <apex:column value="{!c.CreatedDate}"/> 
     <apex:column value="{!c.status}"/>  
     <apex:column value="{!c.createdbyId}"/> 
</apex:pageBlockTable> 
</apex:pageBlock> 

</apex:page> 

更新:这是我居然落得这样做:

页:

<apex:page standardController="account" extensions="SupportCasefilter,TrainingCasefilter"> 
<apex:form > 
    <apex:pageBlock title="Support Cases">  
      <apex:pageBlockTable value="{!SupportCases}" var="s"> 
        <apex:column headervalue="Case"><apex:outputLink value="/{!s.id}">{!s.CaseNumber}</apex:outputLink></apex:column> 
        <apex:column value="{!s.Contact.Name}"/> 
        <apex:column value="{!s.Subject}"/> 
        <apex:column value="{!s.Priority}"/> 
        <apex:column value="{!s.CreatedDate}"/> 
        <apex:column value="{!s.status}"/>  
        <apex:column value="{!s.createdbyId}"/> 
      </apex:pageBlockTable> 
    </apex:pageBlock> 
    <apex:pageBlock title="Training Cases"> 
      <apex:pageBlockTable value="{!TrainingCases}" var="t"> 
        <apex:column headervalue="Case"><apex:outputLink value="/{!t.id}">{!t.CaseNumber}</apex:outputLink></apex:column> 
        <apex:column value="{!t.Contact.Name}"/> 
        <apex:column value="{!t.Subject}"/> 
        <apex:column value="{!t.Priority}"/> 
        <apex:column value="{!t.CreatedDate}"/> 
        <apex:column value="{!t.status}"/>  
        <apex:column value="{!t.createdbyId}"/> 
        <apex:column value="{!t.recordtype.id}"/> 
     </apex:pageBlockTable> 
    </apex:pageBlock> 
</apex:form> 

控制器1:

public with sharing class SupportCasefilter { 

    public id accRecId; 

    public SupportCasefilter(ApexPages.StandardController controller) { 

    accRecId = [select id from account where id = :ApexPages.currentPage().getParameters().get('id')].id; 

    } 

    List<case> supportCases; 

    public List<case> getSupportCases() { 
     if(accRecId != null) { 
     supportCases= [SELECT Id, Contact.name, recordtype.id, casenumber, subject, priority, createddate, status, createdbyid 
         FROM Case 
         WHERE Record_Type__c='Support' AND account.id=:accRecId]; 
     } 
    return supportCases; 
    }  

} 

控制器2:

public with sharing class TrainingCasefilter { 

    public id accRecId; 

    public TrainingCasefilter(ApexPages.StandardController controller) { 

    accRecId = [select id from account where id = :ApexPages.currentPage().getParameters().get('id')].id; 

    } 

    List<case> trainingCases; 

    public List<case> getTrainingCases() { 
     if(accRecId != null) { 
     trainingCases= [SELECT Id, Contact.name, recordtype.id, casenumber, subject, priority, createddate, status, createdbyid 
         FROM Case 
         WHERE Record_Type__c='Training' AND account.id=:accRecId]; 
     } 
    return trainingCases; 
    }  

} 

回答

0

这是我在过去所做的那样:

1 - 创建List<RecordType> validRecordTypes包含在控制器

2有效RecordTypeIds - 使用控制器上的列表validRecordTypes过滤你的对象Account.Cases

3 - 当您尝试访问Account.Cases在VisualForce页,对象应该是滤波处理后的对象

+0

你能提供一个如何做到这一点的例子吗?我仍然想弄清楚如何在apex中使用控制器。 – Ballistix

0

我建议在将结果传递到pageBlockTable之前,使用SOQL查询在控制器本身内应用记录类型过滤器。

+0

谢谢,我需要做的是,在一个自定义的控制?我是与Apex和Visualforce合作的新人。 – Ballistix

+0

是的,但是如果你是Apex的新手,你可以创建一个标准的控制器扩展,这可能会让你的生活更轻松。 –

相关问题