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

Как пройти по связи при обращении к записи как к sObject?

есть метод, который работает с разными кастомными объектами как с sObject-ами, так у них у всех одни и те же названия полей и операции.

вот так получаю записи:

List <sObject> listTickets = Database.query('SELECT ID, Duration__c, Owner.Name, Owner.Email FROM Ticket__c');

вот так добираюсь до кастомного поля:

rec.get('Duration__c');

а вот так уже не могу (а так хотелось):

rec.get('Owner.Name');

получаю
System.SObjectException: Invalid field Owner.Name for Ticket__c

вот так выцепить весь связанный объект тоже не получается:

rec.get('Owner');

есть идеи? как правильно получить связанный объект\его поля у sObject-а?

спасибо

PS: кажется нашел здесь:
http://salesforce.stackexchange.com/questions/24801/using-sobject-get-to-fetch-a-field-value-from-a-related-parent-object

сейчас буду пробовать

есть метод, который работает с разными кастомными объектами как с sObject-ами, так у них у всех одни и те же названия полей и операции.

вот так получаю записи:
[code]
List <sObject> listTickets = Database.query('SELECT ID, Duration__c, Owner.Name, Owner.Email FROM Ticket__c');
[/code]

вот так добираюсь до кастомного поля:

[code]
rec.get('Duration__c');
[/code]

а вот так уже не могу (а так хотелось):

[code]
rec.get('Owner.Name');
[/code]

получаю
[i]System.SObjectException: Invalid field Owner.Name for Ticket__c[/i]

вот так выцепить весь связанный объект тоже не получается:
[code]
rec.get('Owner');
[/code]

есть идеи? как правильно получить связанный объект\его поля у sObject-а?

спасибо

PS: кажется нашел здесь:
http://salesforce.stackexchange.com/questions/24801/using-sobject-get-to-fetch-a-field-value-from-a-related-parent-object

сейчас буду пробовать

getSobject должен работать

getSobject должен работать

да, работает

да, работает

А если тебе надо достать child записи, которые кверишь inner soql
то используй getSobjects (s наконце).

А если тебе надо достать child записи, которые кверишь inner soql
то используй getSobjects (s наконце). :D 

Кстати, вопрос на засыпку - чем отличается обращение вида accountRecord.Contacts от accountRecord.getSObjects('Contacts')?

Кстати, вопрос на засыпку - чем отличается обращение вида [i]accountRecord.Contacts[/i] от [i]accountRecord.getSObjects('Contacts')[/i]?

[/quote]

ilya leshchuk
Кстати, вопрос на засыпку - чем отличается обращение вида accountRecord.Contacts от accountRecord.getSObjects('Contacts')?

у меня есть только самый очевидный ответ: если объявили объект как account, то используем accountRecord.Contacts, а если как sObject - то accountRecord.getSObjects('Contacts')...

[/quote][quote="ilya leshchuk"]Кстати, вопрос на засыпку - чем отличается обращение вида [i]accountRecord.Contacts[/i] от [i]accountRecord.getSObjects('Contacts')[/i]?[/quote]

у меня есть только самый очевидный ответ: если объявили объект как account, то используем [i]accountRecord.Contacts[/i], а если как sObject - то [i]accountRecord.getSObjects('Contacts')[/i]...


ilya leshchuk
Кстати, вопрос на засыпку - чем отличается обращение вида accountRecord.Contacts от accountRecord.getSObjects('Contacts')?

Даже не побоюсь написать что не знаю
Жду ответ

[quote="ilya leshchuk"]Кстати, вопрос на засыпку - чем отличается обращение вида [i]accountRecord.Contacts[/i] от [i]accountRecord.getSObjects('Contacts')[/i]?[/quote]
Даже не побоюсь написать что не знаю :)
Жду ответ :D 

Обращение вида accountRecord.Contacts всегда вернёт list, даже если соответствующий related list пустой, а вот accountRecord.getSObjects('Contacts') в таком случае вернёт null.

Обращение вида [i]accountRecord.Contacts[/i] всегда вернёт list, даже если соответствующий related list пустой, а вот [i]accountRecord.getSObjects('Contacts')[/i] в таком случае вернёт null.

О, слушай! Как совпало! Буквально недавно фиксил один баг в проложении которое построенно чисто не динамических запросах. И было такое место где результат getSObjects() передавался в for. B валился естестенно на null. Я не придал тогда этому значения, чисто поставил проверку на null перед for. А вот оно что оказывается :D. Спасибо, теперь запомню

О, слушай! Как совпало! Буквально недавно фиксил один баг в проложении которое построенно чисто не динамических запросах. И было такое место где результат getSObjects() передавался в for. B валился естестенно на null. Я не придал тогда этому значения, чисто поставил проверку на null перед for. А вот оно что оказывается :D. Спасибо, теперь запомню :D