Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

OnBeforeIBlockElementUpdate - перехватить значение свойства

00 голосов
4
Доброго времени суток.
Возникла небольшая проблемка.
Заказчик формирует пути по #ELEMENT_CODE# , выгрзузка из 1С недает возможность заполнить поле CODE у элемента ИБ (так мне сказал человек который обращался в ТП битрикса), разработчики битрикса посоветовали ему значение запихать в пользовательское свойство, а функцией OnBeforeIBlockElementUpdate(OnBeforeIBlockElementAdd) загнать(обновить) значение из свойства уже в поле CODE.
На словах все легко и просто. собсвенно до того момента как загнать значение все сделали.
Единсвенное! как получить значение этого самого пользовательского свойства в этой функции?
как ни пробовал выводить массив $arFields - с которым оперирует данная фунция значения пользовательских свойств вывести не смог.
Разработчики! как его заполучить то?

Жду ответа, спасибо.
P.S. в саппорт можете не посылать, тикет напишу, в документацию на описание фунции тоже, читал ее не раз.
спросил 31 Янв, 14 от Grimmi (2,560 баллов)

4 Ответы

00 голосов
Ответ нужен.. тему вверх подниму.
ответил 05 Июнь, 14 от Grimmi (2,560 баллов)
00 голосов
Попробуйте массив вывести в файл -
Код
$handle=fopen ("/folder/file","w");
foreach ($arFields as $k=>$v)
fwrite ($handle, $k."=".$v."\n");
endforeach;
fclose ($handle);

и анализируйте массив в файле
ответил 03 Окт, 14 от Yago (360 баллов)
00 голосов
В том и загвозка.
Код
$handle=fopen ($_SERVER["DOCUMENT_ROOT"].'/log.txt',"w"); 
foreach ($arFields as $k=>$v){
fwrite ($handle, $k."=".$v."\n"); 
}
fclose ($handle);

Выдает вполне вменяемые значения, а нужное мне находится в поле:
PROPERTY_VALUES , которое при таком выводе выдает значение равное Array.
если сделать print_r() вернет 1, если сделать impolode(), вернет 18 знач. = Array (18- в данном случаи кол-во моих свойств.)

Еще варианты?
ответил 04 Фев, 15 от Grimmi (2,560 баллов)
00 голосов
Итог:
.. решение - жутко негуманное.
Если вам необходимо в момент создания/обновления элемента ИБ поменять какое либо из его значений вы используете функции OnBeforeIBlockElementAdd/OnBeforeIBlockElementUpdate. Которую распологаете (следуя документации) в файле bitrix/php_interface/init.php
1. Шаг 1-й в фунцию передается массив $arFields с которым вы в дальнейшем вы и будете работать. Вывести который вы можете вышеприведенным циклом.
2. Из выведенного массива вы узнаете что свойства элемента хронятся в поле с ключем : PROPERTY_VALUES - значение которого равно массиву свойств.
Если вам необходимо подкорректировать свойство или наоборот получить из него значение значит вам предстоит работать с этим массивом.
3.Если немного помучится то можно дойти до того, что свойсто можно достать вот такой конструкцией:
$arFields["PROPERTY_VALUES"]["id вашего свйства"]
,а вот дальше все зависит от типа вашего свойства. В моем случаи это была строка, на даже эта конструкция вывела мне значение = Array, а не строку которая в этом поле хранилась. Ну это уже не так важно, главное добрался до свойства.

Тема закрыта
ответил 18 Май, 15 от Grimmi (2,560 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
3 ответов
0 голосов
3 ответов
спросил 14 Фев, 14 от Hall (100 баллов)
0 голосов
6 ответов