31.10.2008, 11:05 | #1 |
Участник
|
Вопрос про skipDeleteMethod
Привет!
Почему не работает следующий код? priceDiscTable.skipDeleteMethod(true); delete_from priceDiscTable where priceDiscTable.relation == PriceType::LineDiscSales && priceDiscTable.AccountCode == TableGroupAll::Table && priceDiscTable.AccountRelation == "4"; priceDiscTable.skipDeleteMethod(false); Отрабатывает delete() на таблице. |
|
31.10.2008, 11:19 | #2 |
Ищущий знания...
|
возможно нужно ещё skipDatabaseLog(true);
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
31.10.2008, 11:21 | #3 |
Боец
|
Из devGuide:
The delete_from statement enables you to delete multiple records from the database at the same time. This means that there is only one call required to the database from the Microsoft Dynamics AX client. as opposed to the multiple calls required if you use the delete statement. This reduction in the number of calls required speeds up system performance. It also enables you to specify multiple deleted items in a clearer, simpler manner. In situations where the delete method is overridden, the system transparently emulates the situation of selecting and deleting one record at a time so that the overridden delete method is executed. Не ленитесь сначала поискать самому ответ на вопрос. |
|
31.10.2008, 11:22 | #4 |
Axapta
|
Цитата:
What prevents fast SQL operations?
There are a number of situations where X++ recordset operations can fall back to record-by-record operations. The table below identifies these situations: DELETE_FROM UPDATE_RECORDSET INSERT_RECORDSET ARRAY_INSERT Use...to override Non-SQL tables Yes Yes Yes Yes not applicable Delete actions Yes No No No skipDeleteActions() Database log enabled Yes Yes Yes No skipDatabaseLog() Overloaded method Yes Yes Yes Yes skipDataMethods() |
|
31.10.2008, 17:20 | #5 |
Участник
|
|
|
31.10.2008, 17:49 | #6 |
Боец
|
2Hyper: не вводите людей в заблуждение, deleteAction и deleteMethod - "немного" разные вещи
|
|
31.10.2008, 18:04 | #7 |
MCITP
|
Цитата:
Более, того, для множественных вставок ещё существенным является наличие в таблице мемо или контейнерных полей. (это скорее оффтоп).
__________________
Zhirenkov Vitaly |
|
31.10.2008, 18:05 | #8 |
Участник
|
Версия Axapta ?
2 Kozerog:
Уточните версию Axapta. В Dynamics Ax 4.0 понижение оператора delete_from возможно еще по следующим причинам: 1. перекрыт метод aosValidateDelete() или aosValidateRead() таблицы (помимо метода delete() ) (вызов метода skipAosValidation(true) предотвращает проверки выполняемые методами aosValidateDelete() и aosValidateRead() ) 2. настроена отправка оповещений при удалении записей в таблице ( вызов метода skipEvents(true) предотвращает проверку ) |
|
19.11.2010, 12:13 | #9 |
Участник
|
Честно говоря я долго "тупил" сегодня, когда писал код с использование skipDeleteMethod (сегодня пятница - позволительно). Никак у меня не получалось запретить вызов метода delete(). Наткнулся на эту тему, а здесь всё тоже очень сумбурно. Попробую объеснить что меня завело в пятничный ступор.
А дело всё в том, что подошёл я к этому методу (skipDeleteMethod) немного не с правльной стороны, так сказать попытался использовать не по назначению. Задачу которую я с его помощью попытался решить можно сформулировать так: "Произвести удаление определённых записей из таблицы, так чтобы для них не отработала бизнесс-логика зашитая в методе delete." Причём для меня в данном случае было не важно, будет ли удаление выполняться при помощи групповой операции или преобразуется по каким-то ещё причинам в построчное удаление. Мне было важно обойти бизнес-логику метода delete. И вот я подумал и решил, что skipDeleteMethod - это то, что мне нужно. Я ошибался. На самом деле метод skipDeleteMethod можно рассматривать только в контексте групповой операций delete_from. Все мы знаем что delete_from будет целиком выполняться на сервере в том случае если в приложениии нет дополнительных припонов типа табличных медодов, deleteactions, настройки лога и оповещений, возможно ещё чего-то. Также мы знаем, что даже при наличии таких припонов, мы можем при помощи набора методов common.skip...() явно указать системе, что в данном конкретном случае нам на все эти действия плевать - для нас главное производительность, мы хотим что бы обработка прошла одним блоком на сервере. Ключевым моментом сдесь является, что плевать нам именно на ВСЕ припоны. Т.е. если на таблице скажем перекрыт метод delete, а также настроены deleteactions, то отказавшить только от DeleteMethod мы не изменим способ выполнения обработки, из-за наличия deleteАctions обработка будет вынуждена пройти "как обычно" - построчно. И тут, внимание, "как обычно" также означает, что будут выполненн стандартный вызов метода Delete! И это не смотря на как бы указанный запрет skipDeleteMethod(true). Вывод: запреты common.skip...(true) либо работают все вместе либо не работает не один из них. (проверено для сочитания skipDeleteMethod + skipDeleteActions, обощённый вывод требует дополнительной проверки). Мораль: нельзя, вызывая skipDeleteMethod(true) перед удалением, гарантированно предотвратить вызов метода delete(). Даже если сейчас обработка пройдёт на сервере и delete() не вызовется, завтра может появиться какой-нибудь DeleteActions и всё изменится. Т.е. skip - в данном случае означает не "ни в коем случае не делай это", а "если хочешь, то можешь это не делать" |
|
|
За это сообщение автора поблагодарили: sukhanchik (3), samolalex (1). |
19.11.2010, 12:25 | #10 |
Участник
|
В книге "Inside Microsoft Dynamics AX 2009" (и в переводной версии этой книги) именно такое поведение и описано.
А фразу: Цитата:
даже если сейчас обработка пройдёт на сервере и delete() не вызовется, завтра может появиться какой-нибудь DeleteActions и всё изменится
|
|
19.11.2010, 15:36 | #11 |
Ищущий знания...
|
Цитата:
про скипы верное замечание, тоже наступал на эти грабли
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
Теги |
удаление |
|
Похожие темы | ||||
Тема | Ответов | |||
Вопрос по созданию отчета | 6 | |||
Вопрос по Проектам | 35 | |||
Вопрос по финансам | 8 | |||
расчеты с персоналом. НДФЛ. вопрос чайника | 2 | |||
Вопрос по счетам на оплату поставщикам | 11 |
|