Вероятно, это связано с тем, что некоторые из ваших лидов, которые только что были вставлены, не имеют связанных с ними типов записей. Это нормально. Вы можете сделать так, чтобы выбор типа записи был обязательным с помощью конфигурации, если это то, что вы ищете.
[РЕДАКТИРОВАТЬ]
Теперь я думаю, что понимаю проблему (из вашего комментария). Причина в том, что, поскольку вы находитесь в триггере, связанный объект RecordType ссылка недоступен. RecordTypeId всегда будет доступен, поскольку он буквально является частью объекта триггера в качестве идентификатора. Однако дочерние объекты (объекты, на которые ссылаются) не будут доступны для простой ссылки из триггера. Для этого вам необходимо создать карту рассматриваемого объекта, на который ссылаются, выполнив дополнительный вызов SOQL WHERE Id IN: theIdList.
Из Apex, а не из триггера, вам нужно специально вызвать это поле из вашего SOQL следующим образом:
List<Lead> leads = [SELECT Id, RecordType.Name FROM Lead];
Только что произошло то, что дочерний объект, в данном случае RecordType, был включен в запрос и, следовательно, доступен для вас. По умолчанию в триггере не будут предварительно выбраны все ваши дочерние объекты, и поэтому их необходимо будет выбрать впоследствии из триггера или класса, вызываемого триггером:
List<Id> recIds = new List<Id>();
for(Lead l : leads)
{
recIds.add(l.RecordTypeId);
}
List<RecordType> rt = [SELECT Id, Name FROM RecordType WHERE Id IN :recIds];
Map <Id, String> idRecNameMap = new Map<Id, String>();
for(RecordType r : rt)
{
idRecNameMap.put(r.Id, r.Name);
}
// And finally...
for(Lead l : Trigger.new)
{
String tmpRecordTypeName = idRecNameMap.get(l.RecordTypeId);
}
Я не тестировал этот код, но думаю, что он выглядит нормально. Надеюсь, это имеет смысл.
person
Adam
schedule
10.12.2011