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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.03.2018, 21:37   #1  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
Обновить выделенные записи на форме
Задача - массово изменить несколько записей на форме.
То есть, пользователь выбирает несколько записей, нажимает кнопку, выбирает новое значение. Значение устанавливается во все записи

Задача, вроде, это очень простая и реализовано так:
Есть класс, он получает MultiSelectionHelper с формы и обновляет записи. В конце main, чтобы отразить изменения на форме, стоят в конце ds.reread() и ds.refreshEx(-2). Все хорошо работает

Но.....если происходит в коде исключение и откатывается транзакция обновления всех этих строк, то почему-то все записи, которым был сделан update до исключения, так и продолжают показываться на форме с присвоенными значениями. То есть, тот факт , что транзакция откатилась, никак визуально не отражается, пока не нажмешь F5
В коде исключения отлавливаются и тут же вызывается ds.reread() и ds.refreshEx(-2) при исключении тоже. Дебаггер доходит до этих строчек. Видно, что ds присвоен....
Пробовала refreshEx (1) - не помогло.
Research помогает, но использовать его не хочу, тк выделение на форме пропадет ....

В чем может быть проблема?
Старый 09.03.2018, 21:57   #2  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
Как-то связано с кэшем/где буфер находится
Если ставлю на классе RunOn = server , то только последняя запись обновляется , если нет исключения в коде
Если ставлю на классе RunOn = client, то все записи ообновляются , если нет исключения в коде. При этом достаточно вообще reread() refresh чтобы обновить все выделенные записи. То есть, refresh(-2) не принципиально писать.
Старый 12.03.2018, 12:44   #3  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
Помогите, пожалуйста, с букварем .....
Старый 12.03.2018, 16:52   #5  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
Как эта ссылка эта поможет для решения проблемы ?
Я не спрашиваю, что делают эти функции. В вышеприведенном моем описании все сделанно по "букварю" . Я сформулировала проблему, но, судя по данному ответу, Вы, уж простите, но ее даже не прочитали

Последний раз редактировалось kitty; 12.03.2018 в 17:57.
Старый 12.03.2018, 18:49   #6  
Stitch_MS is offline
Stitch_MS
Участник
Аватар для Stitch_MS
Соотечественники
 
397 / 478 (16) +++++++
Регистрация: 27.02.2006
Адрес: Дания
Извините, просто сложилось впечатление, что вы не на 100% понимаете, как все эти reread, refreshEx и т.п. методы работают, решил подбросить ссылку.
Если research работает, как насчет запомнить выделенные записи перед вызовом research, а потом выделить их из кода?
X++:
void clicked()
{
    Table1 table1Local;
    Table1 table1ForUpdate;
    MultiSelectionHelper helper = MultiSelectionHelper::construct();
    Set selectedRecords = new Set(Types::Record);    
    SetEnumerator selectedRecordEnumerator;
    
    helper.parmDatasource(Table1_ds);

    table1Local = helper.getFirst();

    while (table1Local.RecId != 0)
    {
        selectedRecords.add(table1Local.data());
        
        ttsBegin;

        select firstonly forUpdate table1ForUpdate
            where table1ForUpdate.RecId == table1Local.RecId;

        table1ForUpdate.Field1 = 'some value';
        table1ForUpdate.update();

        ttsCommit;

        table1Local = helper.getNext();
    }

    Table1_ds.research();
    
    selectedRecordEnumerator = selectedRecords.getEnumerator();
    while (selectedRecordEnumerator.moveNext())
    {
        table1Local = selectedRecordEnumerator.current();
        Table1_ds.findRecord(table1Local);
        Table1_ds.mark(true);
    }
}
Старый 12.03.2018, 19:11   #7  
kitty is offline
kitty
Участник
 
367 / 26 (1) +++
Регистрация: 24.05.2005
Спасибо.

Я только обновляю записи, не добавляю/удаляю, поэтому reread&refresh дожен быть достаточен. Но почему-то , если транзакция успешна, то благополучно все изменения отображаются, а если откатывается - то частично данные обновляются на форме... Если reread стоит после отката, то, по идее, он должен "подхватить" актуальные уже записи ... и дело даже не в refresh (-2) ( и (-1) иже с ним), тк они тоже не помогают
Кэширование на таблице уже даже поменяла, не помогло

Стандартное решение должно работать, это же стандартный сценарий. Значит, где-то проблема, раз не работает, и желательно ее найти .
Как вариант - да, промаркирую заново выбранные записи, но это все-таки будут костыли.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как мне обновить Grid расположенный на другой форме? Yuri Safronov DAX: Программирование 17 22.01.2013 14:18
Выделенные записи на форме в отчёт/форму Sada DAX: Программирование 32 12.02.2011 20:12
создать 2 связанные записи на форме IKA DAX: Программирование 2 08.04.2010 23:21
Как в форме CustTrans через query отобрать записи у которых AmountCur != 0 ( когда в QueryBuildRange ставишь value(strFmt('!0')); - не работает!) rkorchagin DAX: Программирование 12 02.04.2007 17:58
Как из формы Form2 обновить записи на форме Form1? Hidden DAX: Функционал 15 24.05.2005 11:53
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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