AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.12.2006, 19:53   #1  
yauhen is offline
yauhen
Участник
 
28 / 10 (1) +
Регистрация: 20.11.2006
Почему не реботают тригеры OnInsert, OnModify когда програмно вставляется/модифицируется запись? И можно ли заставить из сработать? Есть ли аналог функции Validate, только для всей записи, а не для конкретного поля?
Старый 27.12.2006, 20:13   #2  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Всё рабоатет
Код:
Item.Description:='New '+Item.Description;  //Тригер не сработает(лучше так не писать)
Item.VALIDATE(Item.Description,'New '+Item.Description); 

Item.INSERT;
Item.INSERT(TRUE);

Item.MODIFY;
Item.MODIFY(TRUE);
Item.MODIFY(FALSE);

Item.DELETE(FALSE);
Item.DELETE(TRUE);
Старый 28.12.2006, 13:04   #3  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
2Автор : Триггера Validate для всей записи в навижене нет. Если вы на минуту задумаетесь как должен был бы отрабатывать данный триггер, то поймете, что он внес бы лишь сумятицу в работу.
Старый 28.12.2006, 13:26   #4  
yauhen is offline
yauhen
Участник
 
28 / 10 (1) +
Регистрация: 20.11.2006
2romeo: Про тригер OnValidate для записи никакой речи не идёт. Если прочитать вопрос, то там присутствует слово "функция", а не тригер. Но уж если на то пошло, аналогом Validate для записи можно было бы сделать например функцию Validate, которая бы вызывала тригеры OnValidate для всех полей в записи.

Storkich дал правильный ответ на может быть не совсем правильно сформулированный вопрос. Спасибо ему за это.

P.S. понимаю, надо внимательнее читать документацию.
Старый 28.12.2006, 13:50   #5  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от yauhen Посмотреть сообщение
2romeo: Про тригер OnValidate для записи никакой речи не идёт. Если прочитать вопрос, то там присутствует слово "функция", а не тригер.
Не привязывайтесь к словам )

Цитата:
Сообщение от yauhen Посмотреть сообщение
Но уж если на то пошло, аналогом Validate для записи можно было бы сделать например функцию Validate, которая бы вызывала тригеры OnValidate для всех полей в записи.
Сделать можно, только нафиг она нужна будет. Слабоиспользуемая и маловключеннаявдело та таблица, где зовутся все время одни и те же валидейты -)) По опыту знаю, что в одном случае надо валидейтить, а в другом, к несчастию, присваивать. Селяви. -))
Старый 28.12.2006, 13:58   #6  
yauhen is offline
yauhen
Участник
 
28 / 10 (1) +
Регистрация: 20.11.2006
Понимаю, что можно и без такой функции обойтись. Вопрос вообще не про Validate был, так что закрываем топик и не будет тут разводить дискуссии ни о чём.
Старый 28.12.2006, 15:11   #7  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Не забывай про временные таблицы, там лучше тригеры не вызывать.

И поосторожней с DELETEALL можно потерять целостность, и засорить базу.
DELETEALL(TRUE);
Старый 28.12.2006, 16:27   #8  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Storkich Посмотреть сообщение
И поосторожней с DELETEALL можно потерять целостность, и засорить базу.
DELETEALL(TRUE);
Ну раз такая пьянка ... Автор, если используешь DELETEALL(TRUE) имей ввиду, что в этом случае действие происходит в какой-то другой копии реки. Поясню. Если в триггере таблицы OnDelete что-то положено под условие (булева переменная НеУдалять) и это условие устанавливается извне функцией в этой таблице (SetНеУдалять), то написав вот так:
Таблица.SetНеУдалять(TRUE);
Таблица.DELETEALL(TRUE);
ты будешь удивлен, увидев, что удалилось ВСЁ. Так что осторожнее. То же касается и MODIFYALL.
Старый 28.12.2006, 17:50   #9  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Storkich Посмотреть сообщение
Не забывай про временные таблицы, там лучше тригеры не вызывать.
И валидейты тоже.
Старый 29.12.2006, 06:57   #10  
Greggy_imported is offline
Greggy_imported
Участник
Аватар для Greggy_imported
 
291 / 10 (1) +
Регистрация: 24.09.2004
Цитата:
Сообщение от romeo Посмотреть сообщение
Цитата:
Сообщение от Storkich Посмотреть сообщение
Не забывай про временные таблицы, там лучше тригеры не вызывать.
И валидейты тоже.
а что валидейт перестал быть тригером?
Старый 29.12.2006, 11:13   #11  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от Greggy Посмотреть сообщение
Цитата:
Сообщение от romeo Посмотреть сообщение
Цитата:
Сообщение от Storkich Посмотреть сообщение
Не забывай про временные таблицы, там лучше тригеры не вызывать.
И валидейты тоже.
а что валидейт перестал быть тригером?
Что-то беседа с филологическим уклоном пошла...
Ладно, отвечает доктор филологических наук, Ромео.
Да, безусловно валидейт является триггером в понятиях Нави. Написав "и валидейты тоже" я лишь хотел подчеркнуть, что топ был создан для обсуждения таких триггеров как OnInsert, OnModify. Затем обсуждение сползло и на триггер OnDelete таблиц. Далее мне было строгим тоном указано автором, что беседа и вовсе вываливается на обсуждение OnValidate ... Я осознал свою вину и написал фразу "и валидейты тоже" потому, что собственно OnValidate уже не воспринимался как триггер в контексте обсуждения. Этой фразой я ввернул его на место.
С уважением.
Старый 29.12.2006, 12:20   #12  
Yoil is offline
Yoil
NavAx
NavAx Club
Лучший по профессии 2017
Лучший по профессии 2009
 
1,574 / 70 (6) ++++
Регистрация: 20.11.2002
Адрес: Msk
Отличный план, доктор!
__________________
"Моей лошадке ядрышком полмордочки снесло..."
А.В.Суворов, письма к дочери
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:27.