4

我试图弄清楚如何测试字段(包含在 apex:repeat 中)以查看它们是空白还是空,如果是,则在表中显示一些替代文本(例如:没有要显示的记录)而不是空白桌子。现有代码片段如下:

<apex:repeat var="auditList" value="{!relatedTo.Site_Audit__r}">
   <tr>
    <td>
    <apex:outputField value="{!auditList.Audit_Type__c}" />
    </td>
    <td>
        <apex:outputField value="{!auditList.Delivery_Date__c}" />
    </td>
    <td>
    <apex:outputField value="{!auditList.Review_Date__c}" />
    </td>
   </tr>
</apex:repeat>

所以在伪代码中我正在寻找一个测试,例如:

IF RELATED RECORDS FOUND FOR APEX:REPEAT PERFORM FOLLOWING:

<apex:repeat var="auditList" value="{!relatedTo.Site_Audit__r}">
   <tr>
    <td>
    <apex:outputField value="{!auditList.Audit_Type__c}" />
    </td>
    <td>
        <apex:outputField value="{!auditList.Delivery_Date__c}" />
    </td>
    <td>
    <apex:outputField value="{!auditList.Review_Date__c}" />
    </td>
   </tr>
</apex:repeat>

ELSE IF NO RELATED RECORDS PERFORM FOLLOWING:

<tr>
    <td>
    No records to display.

    </td>
</tr>

在此先感谢您的帮助!


更新以响应“eyescream”的第一个答案


试了一下 apex:pageBlock 方法,但在尝试保存/部署时遇到以下错误:

结果:失败问题:<messaging:emailTemplate> cannot contain <apex:pageBlock>.

现在这是一个生成附加 PDF 的电子邮件模板(请参阅下面的代码概要)。那么是不是这种情况... pageBlock 在电子邮件模板中是不允许的?谢谢您的帮助!

<messaging:emailTemplate subject="Your requested quote #{!relatedTo.Name}" 
recipientType="Contact"
relatedToType="X360_Contract_Cycle__c">

<messaging:plainTextEmailBody >
.
.
.
</messaging:plainTextEmailBody>

<messaging:attachment renderAs="pdf" filename="{!relatedTo.name}">
.
.
.
<apex:pageBlock rendered="{!AND(NOT(ISNULL(auditList)),auditList.size>0)}">

    <apex:repeat var="auditList" value="{!relatedTo.Site_Audit__r}">
       <tr>
        <td>
            <apex:outputField value="{!auditList.Audit_Type__c}" />
        </td>
        <td>
            <apex:outputField value="{!auditList.Delivery_Date__c}" />
        </td>
        <td>
            <apex:outputField value="{!auditList.Review_Date__c}" />
        </td>
       </tr>
   </apex:repeat>

</apex:pageBlock>

<apex:pageBlock rendered="{!OR(ISNULL(auditList),auditList.size=0)}">
    <i>No records to display.</i>
</apex:pageBlock>
.
.
.
</messaging:attachment>
</messaging:emailTemplate>
4

3 回答 3

4

一般来说-将您的代码包装在较高的页面元素(如<apex:pageBlock>)中,然后使用属性rendered。它是可选的并且在大多数页面元素上都可用,组件参考应该为您提供每个标签支持的属性的完整列表。

在你的情况下,我想这样的事情应该可以解决问题:

<apex:pageBlock rendered="{!AND(NOT(ISNULL(auditList)),auditList.size>0)}">
    Stuff is in, put "repeat" tag here.
</apex:pageBlock>
<apex:pageBlock rendered="{!OR(ISNULL(auditList),auditList.size=0)}">
    No records to display.
</apex:pageBlock>

随意尝试语法。我在公式编辑器中使用了函数名称(用于公式字段、验证规则等),但使用了普通的逻辑运算符,如 &&、|| 也应该可用。

于 2010-09-15T19:06:17.540 回答
1

使用包装器(是我个人最喜欢的),并使用一个公式来检查渲染属性的列表大小。

<apex:outputPanel rendered="{!relatedTo.Site_Audit__r.size = 0}">
  No Records
</apex:outputPanel>
<apex:outputPanel rendered="{!relatedTo.Site_Audit__r.size != 0}">
  <apex:repeat var="auditList" value="{!relatedTo.Site_Audit__r}">
    ...
  </apex:repeat>
</apex:outputPanel>
于 2010-10-14T02:17:39.483 回答
0

坚持使用包装器(使用 apex:outputPanel 或 apex:variable)并创建一个返回列表大小的方法,即

public Integer listSize{get {
 if(auditList != null)
  return auditList.size();
else
  return 0;}}

在确定可见性的条件中使用它。

于 2010-09-24T11:55:47.660 回答