Salesforce (VisualForce): как проверить, нет ли записей, возвращаемых в операторе «apex: repeat»? - PullRequest
4 голосов
/ 15 сентября 2010

Я пытаюсь выяснить, как проверить поля (включенные в 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>

Ответы [ 3 ]

4 голосов
/ 15 сентября 2010

В общем случае - оберните ваш код в элемент более высокой страницы (например, <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>

Не стесняйтесь экспериментировать с синтаксисом. Я использовал имена функций, как в редакторе формул (для полей формул, правил проверки и т. Д.), Но обычные логические операторы, такие как &&, || должен быть доступен тоже.

1 голос
/ 14 октября 2010

Используйте оболочку (это мой личный фаворит) и используйте формулу, которая проверяет размер списка для отображаемого атрибута.

<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>
0 голосов
/ 24 сентября 2010

Придерживайтесь оболочки (используйте apex: outputPanel или apex: variable) и создайте метод, который возвращает размер списка, т. Е.

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

Используйте это в условии, которое определяет видимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...