Как анализировать столбец SOQL AggregateResult без значения? - PullRequest
1 голос
/ 18 июня 2011

Допустим, вы запустили агрегированный запрос SOQL , который выглядит следующим образом:

select OwnerId, sum(ExpectedRevenue)val from Opportunity GROUP BY ROLLUP(OwnerId)

По какой-то причине нет никаких Полей с заполненными полями ExpectedRevenue.

Вы получаете таблицу, которая выглядит следующим образом:

val ___ | OwnerId

     |Id1
     |Id2
     |Id3

4/4 записи.

(sidenote: как поместить табличные данные, чтобы они не выглядели ужасно?)

Обратите внимание, что все столбцы "val" равны нулю, а последний столбец OwnerId также равен нулю.

Имеется 4 строки, потому что SOQL возвращает также "итоговую" строку для сверток.

При циклическом возврате возвращаемого AggregateResult [] код взрывается в строке, которая выглядит следующим образом: AggregateResult[0] .get ( 'Val');с «System.NullPointerException: попытка де-ссылки на нулевой объект»

Однако, если только у одного из этих пользователей есть какие-то данные, то все это работает.Так что я предполагаю, что если в каком-либо столбце нет строк с данными, этот столбец вообще не существует, и вызовы для его извлечения всплывают.

Поэтому мой вопрос: как определить, существует ли столбец?чтобы избежать ошибки нулевой ссылки?

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Вы сказали, что столбец ownerid и столбцы val все равны NULL, поэтому AggregateResult [0] является указателем на нулевой объект, и любая попытка получить alue из этого объекта выдает вашу ошибку.

Я ожидаю, что вы хотите сделать, прежде чем запустить

AggregateResult[0].get('val');

вы хотите, чтобы в операторе if говорилось

if(AggregateResult.size() > 0)

или, возможно,

if(AggregateResult[0] != null)

, чтобы убедиться, что вы не пытаетесь получить доступ к пустому объекту.

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

Пол

0 голосов
/ 12 июля 2011

Если нет данных для суммирования по фильтрам, указанным в предложении where, вы получите пустой список AggregateResult. Вы можете проверить это, используя список isEmpty() в Apex.

...