Доброго дня.
Есть задача изменять поле otvetstvenniy в зависимости от поля file_data (file_data изменяется периодически через интерфейс itop).
В класс добавляю метод :
<method id="OnUpdate">
<static>false</static>
<access>protected</access>
<type>Overload-DBObject</type>
<code><![CDATA[ protected function OnUpdate()
{ $name=$this->Get('name');
$file2 = DBSearch::FromOQL('SELECT file_data FROM documentbuhdoc JOIN document ON documentbuhdoc.id=document.id WHERE name=$name');
if (!empty($file2))
{
$this->Set('otvetstvenniy', '11');
$this->DBUpdate();
}
}]]></code>
</method>
Ввиду малого кол-ва информации не получается правильно выстроить $file2 = DBSearch::FromOQL(‘SELECT file_data FROM documentbuhdoc JOIN document ON documentbuhdoc.id=document.id WHERE name=$name’);
Кто подскажет ? Или может есть другой способ решить задачу ?
Отвечаю сам себе , может кому пригодится ,плюс общие полезные моменты опишу.
Моя первоначальная ошибка - полагал что OQL позволяет общаться с mysql напрямую , что не так , общение происходит посредством itop (через классы , OQL далее преобразует этот звпрос в запрос mysql) .
Разобраться помог этот инструмент :
стало понятно что нужное мне поле (file на скриншоте) непредставляется возможным(если кто знает как это сделать поделелитесь) выдернуть посредством OQL ( работает с классами , а не с sql напрямую) , тк на выходе идет blob сочетающий в себе 3 поля данных mysql( проверял используя
$file=$this->Get(‘file’);
if (!empty($file)) )
и результат был всегда присутствие данных , даже в случае когда файла не было загружено .
Мне нужно было проверять file на отсутствие данных , и в случае отсутствия менять поле файл загружен с Нет на Да .
В итоге воспользовался полем documenttype_name , оно текстовое , простое (1 столбец в mysql) , и пустое когда файла не загружено.
$oDevice = MetaModel::GetObject('DocumentBUHDOC', $this->Get('id'));
if (is_object($oDevice))
$is_file_loaded=$this->Get('documenttype_name');
{
if (!empty($is_file_loaded))
{
$this->Set('file_loaded', 'yes');
$this->DBUpdate();
}