我正在尝试打印 Salesforce 自定义对象数据库并有一个过滤器。过滤器工作正常,但默认情况下或当我从另一个过滤器中单击“全部”时,“全部”过滤器不会显示完整表格。我怎样才能做到这一点?
以下是相关的 Apex 代码:
public string itemPickValue{get; set;}
public List<QC_Issue__c> issuesList{get; set;}
public List<QC_Issue__c> results;
public List<QC_Issue__c> getIssues() {
results = Database.query(
'SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c Order By Component_Category__c, Issue_Name__c'
);
return results;
}
public void getIssuesList() {
if(itemPickValue.equals('All')) issuesList = Database.query('SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c');
issuesList = Database.query('SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c WHERE Component_Category__c =: itemPickValue');
}
这是相关的 Visualforce 代码:
<apex:pageBlock title="QC Glossary" id="qc_issues_list">
<h3>Filter by Component Category:</h3>
<br></br>
<!-->Start Filter and List<-->
<apex:selectList size="1" value="{!itemPickValue}">
<apex:actionSupport event="onchange" action="{!getIssuesList}" rerender="table"/>
<apex:selectOption itemLabel="All" itemValue="All"></apex:selectOption>
<apex:selectOption itemLabel="Animation/VFX" itemValue="Animation/VFX"></apex:selectOption>
</apex:selectList>
<br></br>
<br></br>
<apex:pageBlockTable id="table" value="{!issuesList}" var="qc" columnsWidth="10%, 5%, 50%, 10%, 10%, 10%, 10%">
<apex:column value="{!qc.Component_Category__c }"/>
<apex:column value="{!qc.Issue_Name__c }"/>
<apex:column value="{!qc.Issue_Description__c}"/>
<apex:column value="{!qc.Severity_1_Criteria__c}"/>
<apex:column value="{!qc.Severity_2_Criteria__c}"/>
<apex:column value="{!qc.Severity_3_Criteria__c}"/>
<apex:column value="{!qc.File__c}"/>
</apex:pageBlockTable>
最佳答案
我做了以下更改
- 使用 getIssues 方法消除了代码重复,而不是复制 SOQL 语句。
- 添加了 if/else 子句;您的主要问题是在
getIssuesList
中,您有一个 if 语句,如果 true 会将完整结果存储在issuesList
中,然后立即在下一行中使用过滤列表尝试覆盖它使用类别名称“全部”
这里还有其他一些事情需要指出;但我暂时先不谈这个。
结果:
public String itemPickValue{get; set;}
public List<QC_Issue__c> issuesList{get; set;}
public List<QC_Issue__c> results;
public List<QC_Issue__c> getIssues() {
results = Database.query(
'SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c Order By Component_Category__c, Issue_Name__c'
);
return results;
}
public void getIssuesList() {
if(itemPickValue.equals('All')) {
issuesList = getIssues();
} else {
issuesList = Database.query('SELECT Component_Category__c, Issue_Name__c, Issue_Description__c, Severity_1_Criteria__c, Severity_2_Criteria__c, Severity_3_Criteria__c, File__c FROM QC_Issue__c WHERE Component_Category__c =: itemPickValue');
}
}
关于java - 通过 Apex 和 Visualforce(Salesforce Web)过滤报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51757248/