Передавать ID элемента в метод ConvertToDB юзертайпов свойств инфоблоков

Рейтинг: 49.0606  
Внедрено
Предложил Sergey Leshchenko 30.08.2012 03:34:44

Передавать ID элемента в метод ConvertToDB юзертайпов свойств инфоблоков

Сейчас для пользовательских типов свойств элементов инфоблоков поддерживается метод ConvertToDB(), которому передается два параметра: один с метаданными свойства, а второй со значением свойства для элемента. Иногда задачей требуется в этом методе получить информацию об элементе, для которого задается значение свойства, но получить эти данные никак нельзя, т.к. ID изменяемого элемента неизвестен и нет универсального способа его определить.
Просьба добавить передачу ID элемента в ConvertToDB(), передача ID в метод ConvertFromDB() тоже не помешала бы.

P.S. уже очень давно прошу, сталкивался с такой необходимостью не раз.
Рейтинг: 0  
Ответил Жуков Евгений 30.10.2015 15:41:30
iblock 15.5.11

Рейтинг: 0  
Сербул Александр 06.09.2012 17:18:31
А можете привести конкретный пример, когда это необходимо при интеграции?
Рейтинг: 0  
Sergey Leshchenko 07.09.2012 19:58:05
Конкретный пример: имеется два больших связанных между собой инфоблока, назовем их master и slave. Master-инфоблок имеет свойство-связь типа E с третьим инфоблоком.
На некоторых страницах сайта требуются выборки из slave-инфоблока, но с фильтрацией по значениям данного свойства-связи master-инфоблока.
Т.к. в БУСе нельзя выполнить выборку элементов с фильтрацией по свойствам связанного инфоблока, то было принято решение сделать денормализацию slave-инфоблока и в него тоже добавить свойство для хранения связи с тем третьим инфоблоком.
Далее стоит проблема содержания в актуальном состоянии этой денормализованной связи в slave-инфоблоке. Проблема - потому что на изменения значений свойств нет событий, на 100% отследить факт изменения мы не можем. Единственный выход из ситуации - это для хранения E-связи в master-инфоблоке сделать пользовательский тип свойства, при изменении значений которого изменялись бы и значения свойств связанных элементов slave-инфоблока.
Факт изменения значения свойства отлично фиксируется в методе ConvertToDB(), но не зная ID изменяемого элемента master-инфоблока мы не можем восстановить связь с элементами slave-инфоблока.