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

Зомби Id

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

Например, такие невыполнимые условия, вполне могут вытянуть записи:

SELECT ... FROM ... WHERE Account__c != null AND Account__r.Name = null

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

Например, такие невыполнимые условия, вполне могут вытянуть записи:

[code]SELECT ... FROM ... WHERE Account__c != null AND Account__r.Name = null[/code]

как такое возможно, догадайтесь сами
Постоянно с этим сталкиваюсь. По работе имею дело с кучей клиентских сандбоксов которые надо синкать. И постоянно сталкиваюсь с такими записями зомби. Все дело в том что когда создаются partial copy (возможно и full copy) salesforce почему-то копирует только первые 10к записей объекта и получается такая ситуация:
на проде есть 20к контактов которые ссылаются на 20к аккаунтов. Сандбокс будет содержать 10к контактов и 10к аккантов. При этом будут существовать контакты которые ссылаются на акканты которые не были скопированы. И получается что вроде ссылка в контакте на аккаунт есть! но этот аккаунт ид не существует в данном сандбоксе.

На счет такого магического SOQL запроса не знал! Надо попробовать.

Я делаю проверку в лоб - тупо достают все ИД существующих аккаунтов и потом делаю запрос

SELECT Id FROM Contact WHERE AccountID NOT IN :existingAccountIDs

Только в моем случае все немного сложнее. Мне надо проверить где-то 50 объектов, у которых по несколько лукапов .

Крайне странно что сам Salesforce ничего с этим не делает.
Постоянно с этим сталкиваюсь. По работе имею дело с кучей клиентских сандбоксов которые надо синкать. И постоянно сталкиваюсь с такими записями зомби. Все дело в том что когда создаются partial copy (возможно и full copy) salesforce почему-то копирует только первые 10к записей объекта и получается такая ситуация:
на проде есть 20к контактов которые ссылаются на 20к аккаунтов. Сандбокс будет содержать 10к контактов и 10к аккантов. При этом будут существовать контакты которые ссылаются на акканты которые не были скопированы. И получается что вроде ссылка в контакте на аккаунт есть! но этот аккаунт ид не существует в данном сандбоксе.

На счет такого магического SOQL запроса не знал! Надо попробовать.

Я делаю проверку в лоб - тупо достают все ИД существующих аккаунтов и потом делаю запрос

[code]
SELECT Id FROM Contact WHERE AccountID NOT IN :existingAccountIDs
[/code]

Только в моем случае все немного сложнее. Мне надо проверить где-то 50 объектов, у которых по несколько лукапов :sad:. 

Крайне странно что сам Salesforce ничего с этим не делает. 
такого не видал

видел баги с external unique id - вставляешь запись с экстернал ID, удаляешь, удаляешь из корзины - не факт что сможешь вставить снова. Может сможешь сразу, может сможешь через 30 дней, может не сможешь никогда (будет ругаться что exist и все). Чем больше чайлдов у такой записи в сэйлсфорсе - тем больше шанс что зависнет.
такого не видал

видел баги с external unique id - вставляешь запись с экстернал ID, удаляешь, удаляешь из корзины - не факт что сможешь вставить снова. Может сможешь сразу, может сможешь через 30 дней, может не сможешь никогда (будет ругаться что exist и все). Чем больше чайлдов у такой записи в сэйлсфорсе - тем больше шанс что зависнет.