4

フィールド(apex:repeat内に含まれる)をテストして、フィールドが空白かnullかを確認し、空白の代わりに代替テキスト(例:表示するレコードなし)をテーブルに表示する方法を理解しようとしています。テーブル。以下の既存のコードスニペット:

<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 に答える