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

Странная ошибка с Invalid id

Сегодня словил крайне странный эксепшен из Apex.

Пишу такую строчку

String k = ppa.Timesheet_Line__c != null ? ppa.Timesheet_Line__c : ppa.Timesheet_Line_Name__c;
где
Timesheet_Line__c - лукап
Timesheet_Line_Name__c - стринга

при выполнении кода получаю Invalid id если ppa.Timesheet_Line__c = null и заполнено поле ppa.Timesheet_Line_Name__c.

причем вот такое работает
String k;
if (ppa.Timesheet_Line__c != null) {
   k = ppa.Timesheet_Line__c;
} else {
   k = ppa.Timesheet_Line_Name__c;
}

и даже вот такое отработало
String k = ppa.Timesheet_Line__c != null ? String.valueOf(ppa.Timesheet_Line__c) : ppa.Timesheet_Line_Name__c;

Странно, может я какой нюанс не знаю?
Сегодня словил крайне странный эксепшен из Apex.

Пишу такую строчку

[code]
String k = ppa.Timesheet_Line__c != null ? ppa.Timesheet_Line__c : ppa.Timesheet_Line_Name__c;
[/code]
где 
[b]Timesheet_Line__c[/b] - лукап
[b]Timesheet_Line_Name__c[/b] - стринга

при выполнении кода получаю [b]Invalid id[/b] если [b]ppa.Timesheet_Line__c = null[/b] и заполнено поле [b]ppa.Timesheet_Line_Name__c[/b].

причем вот такое работает
[code]
String k;
if (ppa.Timesheet_Line__c != null) {
   k = ppa.Timesheet_Line__c;
} else {
   k = ppa.Timesheet_Line_Name__c;
}
[/code]

и даже вот такое отработало
[code]
String k = ppa.Timesheet_Line__c != null ? String.valueOf(ppa.Timesheet_Line__c) : ppa.Timesheet_Line_Name__c;
[/code]

Странно, может я какой нюанс не знаю? :sad:
попробал, всё работает.

проверь что apex version is 56 и ID что ты получаешь 18 characters

Contact contact = [select Id,AccountID, Name from Contact limit 1];
system.debug('>>Contact : '+ contact);
String k1 = contact.AccountId != null ? contact.AccountId : contact.Name;
system.debug('>>Contact K1: '+ k1);
String k2 = contact.AccountId != null ? String.valueof(contact.AccountId) : contact.Name;
system.debug('>>Contact K2: '+ k2);
String k3 = contact.AccountId != null ? Id.valueof(contact.AccountId) : contact.Name;
system.debug('>>Contact K3: '+ k3);
попробал, всё работает.

проверь что apex version is 56 и ID что ты получаешь 18 characters

Contact contact = [select Id,AccountID, Name from Contact limit 1];
system.debug('>>Contact : '+ contact);
String k1 = contact.AccountId != null ? contact.AccountId : contact.Name;
system.debug('>>Contact K1: '+ k1);
String k2 = contact.AccountId != null ? String.valueof(contact.AccountId) : contact.Name;
system.debug('>>Contact K2: '+ k2);
String k3 = contact.AccountId != null ? [b]Id.valueof[/b](contact.AccountId) : contact.Name;
system.debug('>>Contact K3: '+ k3);
поменял местами условие (!== to ==) и работает без ошибки (Invalid Id)

Contact contact = [select Id,AccountID, Name from Contact where AccountID =null limit 1];
system.debug('>>Contact : '+ contact);
String k1 = contact.AccountId == null ? contact.Name : contact.AccountId ;
system.debug('>>Contact K1: '+ k1);
String k2 = contact.AccountId == null ? contact.Name : String.valueof(contact.AccountId);
system.debug('>>Contact K2: '+ k2);
String k3 = contact.AccountId == null ? contact.Name : Id.valueof(contact.AccountId);
system.debug('>>Contact K3: '+ k3);
поменял местами условие (!== to ==) и работает без ошибки (Invalid Id)

Contact contact = [select Id,AccountID, Name from Contact [b]where AccountID =null[/b] limit 1];
system.debug('>>Contact : '+ contact);
String k1 = contact.AccountId == null ? contact.Name : contact.AccountId ;
system.debug('>>Contact K1: '+ k1);
String k2 = contact.AccountId == null ? contact.Name : String.valueof(contact.AccountId);
system.debug('>>Contact K2: '+ k2);
String k3 = contact.AccountId == null ? contact.Name : Id.valueof(contact.AccountId);
system.debug('>>Contact K3: '+ k3);
С версией 56 не проканало - но у меня весь проект на 55 версии. Не знаю как версионность работает, но возможно толку менять версию на одном классе нет если он вызывается из других с меньшими версиями. Это догадки, но весь проект апдейтить на новую версию времени и желания нет.

А вот переставил местами части тернарной операции и ошибка пропала.
String k = ppa.Timesheet_Line__c == null ? ppa.Timesheet_Line_Name__c : ppa.Timesheet_Line__c;

Возможно проблема в самой тернарной операции и ее внутренней работе - типа части приводятся к типу первой части. Изначально у меня было
<String> = <Boolean> ? <Id> : <String> что валится если <Boolean> = false

Теперь стало <String> = <Boolean> ? <String> : <Id> и ошибки нет.

НО ХЗ почему у тебя Eric работает. Твои примеры выглядят также.

Это не проблема, просто интересно понять что за Мистика.
С версией 56 не проканало - но у меня весь проект на 55 версии. Не знаю как версионность работает, но возможно толку менять версию на одном классе нет если он вызывается из других с меньшими версиями. Это догадки, но весь проект апдейтить на новую версию времени и желания нет.

А вот переставил местами части тернарной операции и ошибка пропала.
[code]
String k = ppa.Timesheet_Line__c == null ? ppa.Timesheet_Line_Name__c : ppa.Timesheet_Line__c;
[/code]

Возможно проблема в самой тернарной операции и ее внутренней работе - типа части приводятся к типу первой части. Изначально у меня было 
<String> = <Boolean> ? [b]<Id>[/b] : <String> что валится если <Boolean> = false

Теперь стало <String> = <Boolean> ? [b]<String>[/b] : <Id> и ошибки нет.

НО ХЗ почему у тебя Eric работает. Твои примеры выглядят также.

Это не проблема, просто интересно понять что за [b]Мистика[/b]. :surprised:

ЗЫ: фигасе Eric как ты быстро отреагировал на сообщение. Тут новые сообщения уже не появляются неделями, а ты буквально через час ответил если не раньше. Колись как активность отслеживаешь , чет я сомневаюсь что просто случайно зашел
ЗЫ: фигасе Eric как ты быстро отреагировал на сообщение. Тут новые сообщения уже не появляются неделями, а ты буквально через час ответил если не раньше. Колись как активность отслеживаешь :smiley:, чет я сомневаюсь что просто случайно зашел :smiley:
а с форумом то что было два дня? тут уже сформировалась какая-то группа людей, без форума и без запасного варианта, связь может быть потеряна навсегда
а с форумом то что было два дня? тут уже сформировалась какая-то группа людей, без форума и без запасного варианта, связь может быть потеряна навсегда
Den Brown
а с форумом то что было два дня?
А что с ним было? Я сам не заходил уже наверное недели две. Все кодирую на автомате, а вот тут темка интересная подвернулась вот и зашел написать.
[quote="Den Brown"]а с форумом то что было два дня?[/quote]
А что с ним было? Я сам не заходил уже наверное недели две. Все кодирую на автомате, а вот тут темка интересная подвернулась вот и зашел написать.
Dmitry Shnyrev
Eric как ты быстро отреагировал на сообщение.

было немного свободного времени и проблемка показалось странной и непонятной.
в теории должно было работать
[quote="Dmitry Shnyrev"]Eric как ты быстро отреагировал на сообщение.[/quote]

было немного свободного времени и проблемка показалось странной и непонятной. :smile:
в теории должно было работать
no connection было у меня два дня
no connection было у меня два дня