Регистрация  |  Вход

Условный рендеринг панели: не могу "создать" условие

Привет всем!

ситуация проста:

страница со стандартным контроллером. Нужно словить момент, когда связанных записей нет, и вывести сообщение об этом:

<apex:outputPanel rendered="{! IF( Record__c.Relation_with_many_records__r = null, true, false)}">

Проблема в том, что даже если у текущей записи нет связанных, дочерних записей, то Relation_with_many_records__r все равно не равно нул.

если попробовать так:

Record__c.Relation_with_many_records__r[0] = null

то код падает.

надо подумать.

Привет всем!

ситуация проста:
страница со стандартным контроллером. Нужно словить момент, когда связанных записей нет, и вывести сообщение об этом:

<apex:outputPanel rendered="{! IF( Record__c.Relation_with_many_records__r = null, true, false)}">

Проблема в том, что даже если у текущей записи нет связанных, дочерних записей, то Relation_with_many_records__r все равно [b]не равно[/b] нул.

если попробовать так:
Record__c.Relation_with_many_records__r[0] = null
то код падает.

надо подумать.

Den Brown
Привет всем!

ситуация проста:
страница со стандартным контроллером. Нужно словить момент, когда связанных записей нет, и вывести сообщение об этом:

<apex:outputPanel rendered="{! IF( Record__c.Relation_with_many_records__r = null, true, false)}">

Проблема в том, что даже если у текущей записи нет связанных, дочерних записей, то Relation_with_many_records__r все равно не равно нул.

если попробовать так:
Record__c.Relation_with_many_records__r[0] = null
то код падает.

надо подумать.

<apex:outputPanel rendered="{!Record__c.Relation_with_many_records__r.size ==0}"> пробуй :)

[quote="Den Brown"]Привет всем!

ситуация проста:
страница со стандартным контроллером. Нужно словить момент, когда связанных записей нет, и вывести сообщение об этом:

<apex:outputPanel rendered="{! IF( Record__c.Relation_with_many_records__r = null, true, false)}">

Проблема в том, что даже если у текущей записи нет связанных, дочерних записей, то Relation_with_many_records__r все равно [b]не равно[/b] нул.

если попробовать так:
Record__c.Relation_with_many_records__r[0] = null
то код падает.

надо подумать.[/quote]

<apex:outputPanel rendered="{!Record__c.Relation_with_many_records__r.size ==0}"> пробуй :)

wilder
<apex:outputPanel rendered="{!Record__c.Relation_with_many_records__r.size ==0}"> пробуй :)

удивительно, но не получается!

Error: Invalid field 'size' for SObject 'Child_Record__c'.

('Child_Record__c' образуют связь 'Relation_with_many_records__r' с 'Record__c' в данном примере).

.empty тоже воспринимается как поле :(

[quote="wilder"]


<apex:outputPanel rendered="{!Record__c.Relation_with_many_records__r.size ==0}"> пробуй :)[/quote]

[b]удивительно, но не получается![/b]

	[i]Error: Invalid field 'size' for SObject 'Child_Record__c'.[/i]

('Child_Record__c' образуют связь 'Relation_with_many_records__r'  с 'Record__c' в данном примере).

.empty тоже воспринимается как поле   :(

Den Brown
wilder
<apex:outputPanel rendered="{!Record__c.Relation_with_many_records__r.size ==0}"> пробуй :)

удивительно, но не получается!

Error: Invalid field 'size' for SObject 'Child_Record__c'.

('Child_Record__c' образуют связь 'Relation_with_many_records__r' с 'Record__c' в данном примере).

.empty тоже воспринимается как поле :(


Посмотри в IDE должно быть название связи иногда они отличаются от стандартных.

[quote="Den Brown"][quote="wilder"]


<apex:outputPanel rendered="{!Record__c.Relation_with_many_records__r.size ==0}"> пробуй :)[/quote]

[b]удивительно, но не получается![/b]

	[i]Error: Invalid field 'size' for SObject 'Child_Record__c'.[/i]

('Child_Record__c' образуют связь 'Relation_with_many_records__r'  с 'Record__c' в данном примере).

.empty тоже воспринимается как поле   :([/quote]
Посмотри в IDE должно быть название связи иногда они отличаются от стандартных.

Sergey Prichepo
Посмотри в IDE должно быть название связи иногда они отличаются от стандартных.

оба объекта кастомные. название правильное - обратившись вот так:

Record__c.Relation_with_many_records__r

я вывожу <apex:repeat>ом все эти связанные записи (и это на станд контроллере - удобно).

но size воспринимется как поле

PS: сделал так, на странице есть ВФ переменая которая считает кол-во итераций <apex:repeat>, и просто в конце всего я поставил секцию которая рендерится если ВФ переменная не изменилась.

[quote="Sergey Prichepo"]
Посмотри в IDE должно быть название связи иногда они отличаются от стандартных.[/quote]

оба объекта кастомные. название правильное - обратившись вот так:

Record__c.Relation_with_many_records__r 

я вывожу <apex:repeat>ом все эти связанные записи (и это на станд контроллере - удобно).

но size  воспринимется как поле

PS: сделал так, на странице есть ВФ переменая которая считает кол-во итераций <apex:repeat>, и просто в конце всего я поставил  секцию которая рендерится если ВФ переменная не изменилась.

Подожди, какие итерации считать? Первый раз в своей практике такое слышу. Чем. SIZE для List не устраивает?
!ВАЖНО .SIZE именно большими буквами и без скобок в конце. Это прекрасно поможет для Related Objects.

Подожди, какие итерации считать? Первый раз в своей практике такое слышу. Чем. SIZE для List не устраивает? 
!ВАЖНО .SIZE именно большими буквами и без скобок в конце. Это прекрасно поможет для Related Objects.

Dmitry Shnyrev
Подожди, какие итерации считать? Первый раз в своей практике такое слышу. Чем. SIZE для List не устраивает?
!ВАЖНО .SIZE именно большими буквами и без скобок в конце. Это прекрасно поможет для Related Objects.

вот фрагмент:

<apex:pageBlock rendered="{!Record__c.Childs__r.SIZE=0}" >

и снова пишет, что нет там такого поля как size

а итерации я считаю для других целей - правильно рубить пдф-страницы.
просто решил использовать ту переменную

[quote="Dmitry Shnyrev"]Подожди, какие итерации считать? Первый раз в своей практике такое слышу. Чем. SIZE для List не устраивает? 
!ВАЖНО .SIZE именно большими буквами и без скобок в конце. Это прекрасно поможет для Related Objects.[/quote]

вот фрагмент:

      <apex:pageBlock rendered="{!Record__c.Childs__r.SIZE=0}" > 

и снова пишет, что нет там такого поля как size

а итерации я считаю для других целей - правильно рубить пдф-страницы.
просто решил использовать ту переменную

Попробуй ==

<apex:pageBlock rendered="{!Record__c.Childs__r.SIZE==0}" >

Попробуй ==

<apex:pageBlock rendered="{!Record__c.Childs__r.SIZE==0}" >

Не работает. Вы сами попробуйте, друзья.
просто создайте страницу на станд контроллере кастомного объекта у которого есть дочерний кастомный объект, пройдите по связи и добавьте .SIZE==

Не работает. Вы сами попробуйте, друзья.
просто создайте страницу на станд контроллере кастомного  объекта у которого есть дочерний кастомный объект, пройдите по связи и добавьте .SIZE==

Даже ради любопытства попробовал:

Тестовый контроллер

public class testRelatedSizeCtrl {
public List<Account> getAccounts() {
return [SELECT Id, Name, (SELECT Id, Name FROM Contacts) FROM Account];
}
}

Тестовая страница

<apex:page controller="testRelatedSizeCtrl">
<apex:repeat value="{!accounts}" var="a">
<apex:outputField value="{!a.Name}"/>
-
<apex:outputPanel rendered="{!a.Contacts.SIZE == 1}" style="color: #0000FF;">{!a.Contacts.SIZE} contact</apex:outputPanel>
<apex:outputPanel rendered="{!a.Contacts.SIZE > 1}" style="color: #0000FF;">{!a.Contacts.SIZE} contacts</apex:outputPanel>
<apex:outputPanel rendered="{!a.Contacts.SIZE == 0}" style="color: #FF0000;">No contacts</apex:outputPanel>
<br />
</apex:repeat>>
</apex:page>

Вот результат:

GenePoint -1 contact 
United Oil & Gas, UK -1 contact
United Oil & Gas, Singapore -2 contacts
Edge Communications -2 contacts
Burlington Textiles Corp of America -1 contact
Pyramid Construction Inc. -1 contact
Dickenson plc -1 contact
Grand Hotels & Resorts Ltd -2 contacts
Express Logistics and Transport -2 contacts
University of Arizona -1 contact
United Oil & Gas Corp. -4 contacts
sForce -2 contacts
ZontLaw Portal -No contacts
Community Account -5 contacts

Даже ради любопытства попробовал:

Тестовый контроллер
[code]public class testRelatedSizeCtrl {
    public List<Account> getAccounts() {
        return [SELECT Id, Name, (SELECT Id, Name FROM Contacts) FROM Account];
    }
}[/code]

Тестовая страница
[code]<apex:page controller="testRelatedSizeCtrl">
    <apex:repeat value="{!accounts}" var="a">
        <apex:outputField value="{!a.Name}"/>
        - 
        <apex:outputPanel rendered="{!a.Contacts.SIZE == 1}" style="color: #0000FF;">{!a.Contacts.SIZE} contact</apex:outputPanel>
        <apex:outputPanel rendered="{!a.Contacts.SIZE > 1}" style="color: #0000FF;">{!a.Contacts.SIZE} contacts</apex:outputPanel>
        <apex:outputPanel rendered="{!a.Contacts.SIZE == 0}" style="color: #FF0000;">No contacts</apex:outputPanel>
        <br />
    </apex:repeat>>
</apex:page>[/code]

Вот результат:
[code]
GenePoint -1 contact 
United Oil & Gas, UK -1 contact 
United Oil & Gas, Singapore -2 contacts 
Edge Communications -2 contacts 
Burlington Textiles Corp of America -1 contact 
Pyramid Construction Inc. -1 contact 
Dickenson plc -1 contact 
Grand Hotels & Resorts Ltd -2 contacts 
Express Logistics and Transport -2 contacts 
University of Arizona -1 contact 
United Oil & Gas Corp. -4 contacts 
sForce -2 contacts 
ZontLaw Portal -No contacts 
Community Account -5 contacts 
[/code]

Два отличия:

- страница на только стандартном контроллера (т.е. нет "рукописного" контроллера) (кстати - удобно, что по связи пройти можно и ничего не писать).

- оба объекта - полностью кастомные.

Два отличия:

- страница на только стандартном контроллера (т.е. нет "рукописного" контроллера) (кстати - удобно, что по связи пройти можно и ничего не писать).

- оба объекта - полностью кастомные.

Den Brown
- страница на только стандартном контроллера (т.е. нет "рукописного" контроллера) (кстати - удобно, что по связи пройти можно и ничего не писать).

хм, интересно. У меня тогда подозрение на lazy load данных. Т.е. ты говоришь что вывести подчиненных в repeat ты можешь, а когда ставишь .SIZE ругается? Будет минута проверю.

Но мой совет, не надейся на стандартный функционал. Если делаешь страницу на стандард контроллере например чтобы вставить в layout, то прикручивай extension и работай с данными из него. В своей многолетней практике у меня не было ни одной страницы без контроллера или extension

[quote="Den Brown"]- страница на только стандартном контроллера (т.е. нет "рукописного" контроллера) (кстати - удобно, что по связи пройти можно и ничего не писать).
[/quote]

хм, интересно. У меня тогда подозрение на lazy load данных. Т.е. ты говоришь что вывести подчиненных в repeat ты можешь, а когда ставишь .SIZE ругается? Будет минута проверю.

Но мой совет, не надейся на стандартный функционал. Если делаешь страницу на стандард контроллере например чтобы вставить в layout, то прикручивай extension и работай с данными из него. В своей многолетней практике у меня не было ни одной страницы без контроллера или extension

Dmitry Shnyrev
Den Brown
- страница на только стандартном контроллера (т.е. нет "рукописного" контроллера) (кстати - удобно, что по связи пройти можно и ничего не писать).

хм, интересно. У меня тогда подозрение на lazy load данных. Т.е. ты говоришь что вывести подчиненных в repeat ты можешь, а когда ставишь .SIZE ругается? Будет минута проверю.

Но мой совет, не надейся на стандартный функционал. Если делаешь страницу на стандард контроллере например чтобы вставить в layout, то прикручивай extension и работай с данными из него. В своей многолетней практике у меня не было ни одной страницы без контроллера или extension

И очень зря Очень удобно использовать стандартный контроллер на странице без дополнительного кодирования.

[quote="Dmitry Shnyrev"][quote="Den Brown"]- страница на только стандартном контроллера (т.е. нет "рукописного" контроллера) (кстати - удобно, что по связи пройти можно и ничего не писать).
[/quote]

хм, интересно. У меня тогда подозрение на lazy load данных. Т.е. ты говоришь что вывести подчиненных в repeat ты можешь, а когда ставишь .SIZE ругается? Будет минута проверю.

Но мой совет, не надейся на стандартный функционал. Если делаешь страницу на стандард контроллере например чтобы вставить в layout, то прикручивай extension и работай с данными из него. В своей многолетней практике у меня не было ни одной страницы без контроллера или extension[/quote]

И очень зря :) Очень удобно использовать стандартный контроллер на странице без дополнительного кодирования.

И очень зря Очень удобно использовать стандартный контроллер на странице без дополнительного кодирования.

Понимаю :). Но душа не лежит - не люблю "магию".
Предпочитаю все контролировать, Запрос->контроллер->страница

[quote]И очень зря :) Очень удобно использовать стандартный контроллер на странице без дополнительного кодирования.[/quote]
Понимаю :). Но душа не лежит - не люблю "магию". 
Предпочитаю все контролировать, Запрос->контроллер->страница