Вероятно, это связано с тем, что некоторые из только что вставленных вами лидов не имеют типов записей, связанных с ними.Это нормально.Вы можете принудительно установить, что выбор типа записи является обязательным, с помощью конфигурации, если это то, что вы ищете.
[EDIT]
Теперь я думаю, что понимаю проблему (из вашего комментария).Причина в том, что, поскольку вы находитесь в триггере, связанный объект 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);
}
Я не тестировал этот код, но ядумаю, это выглядит хорошо.Надеюсь, что это имеет смысл.