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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.07.2006, 16:50   #1  
Tony Green is offline
Tony Green
Участник
Аватар для Tony Green
 
184 / 25 (1) +++
Регистрация: 08.10.2002
Адрес: Москва
SkipDeleteAction
Появилась задача, в которой нужно удалить запись из таблицы таким образом, чтобы не выполнялись все навешанные на неё DeleteActions. Для этого существует специальный метод у таблиц, который называется SkipDeleteActions. Везде, где он используется в стандартной Аксе, перед его вызовом еще вызывается SkipDataMethods. В общем получается что-то типа такого кода:
PHP код:
PurchParmUpdate.skipDataMethods(true);
PurchParmUpdate.skipDeleteActions(true);
    
delete_from PurchParmUpdate
        where PurchParmUpdate
.ParmId == PurchParmTable.ParmId
Так вот: работает это чудо только на одной из баз. На остальных делит-экшенсы отлично выполняются. Аксапта одна и та же - рядом сложенные приложения, разные инстансы АОСов. Версия 3.0 SP3. Да и в двух уровнях ситуация такая же. В чем же секрет? Ваши предположения?
__________________
С уважением,
Tony Green
Старый 27.07.2006, 16:57   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Не могу предположить по этому поводу, но вы написали, что удалить нужно только одну запись- так почему бы не использовать doDelete()?

delete_from хорошо использовать для большого количества записей.
ttsbegin;
select firstonly PurchParmUpdate
where PurchParmUpdate.ParmId == PurchParmTable.ParmId;
PurchParmUpdate.doDelete();
ttscommit;
Старый 27.07.2006, 17:03   #3  
Tony Green is offline
Tony Green
Участник
Аватар для Tony Green
 
184 / 25 (1) +++
Регистрация: 08.10.2002
Адрес: Москва
По моим наблюдениям, конструкция SkipDeleteActions(true) не оказывает ровно никакого влияния, при использовании Delete и doDelete методов.

Мне нужно удалить неважно сколько записей, но так, чтобы делит-экшенсы не выполнялись.
__________________
С уважением,
Tony Green
Старый 27.07.2006, 17:07   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Поэтому и рекомендую использовать doDelete() - эта команда удалит запись без лишних вопросов и проверок, в том числе deleteActions
Старый 27.07.2006, 17:10   #5  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Как и было сказано выше:
delete_from myTable where ...
Старый 27.07.2006, 17:11   #6  
Tony Green is offline
Tony Green
Участник
Аватар для Tony Green
 
184 / 25 (1) +++
Регистрация: 08.10.2002
Адрес: Москва
При использовании Delete() и doDelete() делит-экшенсы выполняются. Например, можете попробовать удалить запись в InventTable.doDelete() и потом поискать связанные с ней ранее записи в InventTableModule...
__________________
С уважением,
Tony Green
Старый 28.07.2006, 15:01   #7  
Tony Green is offline
Tony Green
Участник
Аватар для Tony Green
 
184 / 25 (1) +++
Регистрация: 08.10.2002
Адрес: Москва
Выяснил, что SkipDeleteActions() хорошо работает, когда за таблицей НЕ следит журнал БД. А когда следит, нужно перед его вызовом написать SkipDatabaseLog(true) и тогда все будет отлично. Всем спасибо.
__________________
С уважением,
Tony Green
За это сообщение автора поблагодарили: Recoilme (2), Poleax (3), rkorchagin (1).
 


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

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

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