Visualforce: визуализировать, только если значение не равно null, вызывает исключение - PullRequest
1 голос
/ 07 августа 2020

Я создаю страницу visualforce, где у меня есть apex: datatable с несколькими столбцами.

Теперь я хочу, чтобы столбец «Скидка» отображался только тогда, когда его значения не равны нулю и> 0.

Мой код выглядит следующим образом:

<apex:dataTable width="100%" value="{!Opportunity.OpportunityLineItems}" var="oli">
                            <apex:column width="50%" headerClass="tableheaderleft"  styleClass="tablebodyleft">
                                <apex:facet name="header">Bezeichnung</apex:facet>
                                <apex:OutputField value="{!oli.Name}"/>
                             </apex:column>
                            <apex:column width="{!If(oli.Discount!=null,If((oli.Discount>0),"10%","10%"),"10%")}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
                                <apex:facet name="header">Anzahl</apex:facet>
                                <apex:OutputField value="{!oli.Quantity}"/>
                                <apex:facet name="footer"></apex:facet>
                            </apex:column>
                            <apex:column width="20%" headerClass="tableheaderright"  styleClass="tablebodyright">
                                <apex:facet name="header">Einzelbetrag</apex:facet>
                                <apex:OutputField value="{!oli.UnitPrice}"/>
                                <apex:facet name="footer"></apex:facet>
                            </apex:column>
                            
                         
                           <apex:column  rendered="{!If(oli.Discount!=null,(oli.Discount>0),false)}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
                                <apex:facet name="header">Rabatt</apex:facet>
                                <apex:OutputField value="{!oli.Discount}"/>
                                <apex:facet name="footer"></apex:facet>
                            </apex:column>  
                            
                            <apex:column width="20%" headerClass="tableheaderright"  styleClass="tablebodyright">
                                <apex:facet name="header">Gesamtbetrag</apex:facet>
                                <apex:OutputField value="{!oli.TotalPrice}"/>
                                <apex:facet name="footer"></apex:facet>
                            </apex:column>                                                                                            
                        </apex:dataTable>

Но я всегда получаю следующее исключение:

javax.faces.FacesException: core.apexpages.exceptions.ApexPagesDeveloperException: Неверный тип аргумента для оператора '>'.

Кто-нибудь знает, почему возникает это исключение? Может ли это произойти из-за того, что Discount возвращает процентное значение?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 08 августа 2020

Вы пояснили в комментариях: « Вы хотите отображать весь столбец, только если хотя бы одна строка имеет значение ».

Есть ли у вас связанная со скидкой сводная информация поле из позиции Opp в Opp? Вы можете сделать что-то вроде rendered="{!Opportunity.DiscountLinesCount__c > 0}" или {!Opportunity.TotalDiscount__c > 0}.

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

Неофициально. Вы можете oop использовать позиции перед своим dataTable, злоупотребляя тегом <apex:variable>. Это немного взломано, но работает без апекса. Проверьте мой ответ на этот вопрос: https://salesforce.stackexchange.com/q/193169/799

Примерно так. Не пытался запустить, но должно дать вам представление.

<apex:variable var="hasDiscountLines" value="{!false}" />
<apex:repeat value="{!Opportunity.OpportunityLineItems}" var="oli">
    <apex:variable var="hasDiscountLines" value="{!hasDiscountLines || oli.Discount != null}" />
</apex:repeat>

(...)
<apex:dataTable width="100%" value="{!Opportunity.OpportunityLineItems}" var="oli">
    <apex:column  rendered="{!hasDiscountLines}">
    (...)
</apex:dataTable>
0 голосов
/ 07 августа 2020

У вас есть двойные кавычки внутри двойных кавычек. Вместо них вы можете использовать одинарные.

Например,

<apex:column width="{!If(oli.Discount!=null,If((oli.Discount>0),'10%','10%'),'10%')}" headerClass="tableheadercenter" footerClass="tablefootercenter" styleClass="tablebodycenter">
    <apex:facet name="header">Anzahl</apex:facet>
    <apex:OutputField value="{!oli.Quantity}"/>
    <apex:facet name="footer"></apex:facet>
</apex:column>

Независимый пример -

<apex:page>    
<canvas id="myCanvas" width="{! if(true == true, '300%', '200%') }" height="300" style="border:1px solid">
Your browser does not support the HTML5 canvas tag.
</canvas>
</apex:page>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...