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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.09.2011, 03:06   #1  
coolibin is offline
coolibin
Участник
 
264 / 68 (3) ++++
Регистрация: 07.04.2005
Набрел на похожую проблему, но forceWrite() почему-то не помогает.

Сценарий такой:

На форме две таблицы: t1 и t2.
t2 подцепленна по InnerJoin к t1. Связь - 1:1.
Навигация в форме идет по таблице t1.
В событии t1.create() идет вызов класса, где после диалога пишутся модификации в обе таблицы. При этом mandatory поле в t2 класс не заполняет. Заканчивается работа класса вызовом t1.reread(); t1.refresh();

В конце t1.create() делаю вызов t2_ds.forceWrite(true) - никаких эмоций, то есть, t2.validatewrite() не отрабатывает.

Если же вместо этого сделать любое присвоение любого поля в t2, то проверка отработает. Как заставить проверить mandatory поля в t2 без изменения полей?

AX2009
Старый 27.09.2011, 09:03   #2  
online
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,443 / 1781 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от coolibin Посмотреть сообщение
В конце t1.create() делаю вызов t2_ds.forceWrite(true) - никаких эмоций, то есть, t2.validatewrite() не отрабатывает.
По идее, если речь идёт не о изменении записи, а о её вставке (create же у вас создаёт новую запись?), то никакого forceWrite вообще не должно требоваться. Менялись ли значения или не менялись вставка даже пустых данных должна происходить в любом случае, а следовательно должнен вызываться и validatewrite.

У вас сама вставка записи в t2 происходит? Метод t2_ds.write() не перекрыт?
Старый 27.09.2011, 20:18   #3  
coolibin is offline
coolibin
Участник
 
264 / 68 (3) ++++
Регистрация: 07.04.2005
Navision
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
У вас сама вставка записи в t2 происходит? Метод t2_ds.write() не перекрыт?
Вставка записи происходит в коде, напрямую в таблицу без участия датасорса. Потом датасорс основной таблицы, t1 в форме рефрешится (дерганием метода формы из класса), так что новая запись t2 тоже перерисовывается. Но после завершения работы класса в create() курсор t2 уже не имеет признака модификации (что вполне логично).

X++:
public void create(boolean _append = false) //create a rec in t1
{
    super(_append);
 
    SomeRunBaseClass::DoWork(...);
 
    if (t2.RecId != 0)
    {
        t2_DS.forceWrite(true); // не вызывает валидации при последующем уходе с записи t1
        //t2.SoeField = "blablabla" ; // так валидация будет вызвана
    }
}
Я же хочу этот признак ему выставить принудительно, чтобы попытка уйти с текущей записи основной таблицы (t1) сопровождалась вызовом valildatewrite() для записи подцепленной (t2) таблицы. Не понятно, почему переприсвоение значения любого поля выставляет признак модификации, а forseWrite() - нет.
Теги
заполнение, проверка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обязательное поле фин.аналитика в жуналах ГК tolstjak DAX: Программирование 2 21.09.2009 13:48
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
Дублирование записи Axaptus DAX: Программирование 12 16.11.2007 12:33
вычисляемое поле ZhanR DAX: Программирование 8 28.09.2006 10:25
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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