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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.12.2001, 03:24   #1  
sguryev is offline
sguryev
Участник
 
24 / 13 (1) ++
Регистрация: 07.12.2001
Адрес: Сергиев Посад
Автоматическое увеличение значения поля при создании новой записи.
Автоматическое увеличение значения поля при создании новой записи.

Иногда требуется, чтобы значение, какого либо поля увеличивалось автоматически, например поле индекса, при вставке новой записи в таблицу, например в Grid control нажатием Ctrl+N. Так вот как это сделать…

Необходимо переопределить метод InitValue у таблицы, к которой хотелось бы добавить эту функциональность, следующим образом:<pre>public void initValue()
{
HB_Tutorial_Company company;

super();

select maxof(ID) from company;
this.ID = company.ID + 1;
this.insert();
}
</pre>
&nbsp;
В данном случае эта функциональность добавляется к таблице HB_Tutorial_Company. Новый индекс будет равен максимальному существующему индексу в таблице, увеличенному на единицу. В принципе можно ставить и другие более сложные условия создания нового индекса. Если не добавлять в конце this.insert(), то при многократном создании записи, например при нажатии Ctrl+N несколько раз подряд, будут создаваться идентичные записи и индекс не будет увеличиваться.

Все бы хорошо, но при работе с другой таблицей HB_Tutorial_Employee, одно поле которой (CompanyID) связано (by relation) с полем HB_Tutorial_Company.ID, возникла следующая проблема. Была создана форма для отображения компаний и их сотрудников, при выборе в одном Grid control компании во втором выводились ее сотрудники, т.е. два Data Source и у того который относится к HB_Tutorial_Employee стоит joint source:HB_Tutorial_Company. К HB_Tutorial_Employee также была добавлена функция автоматического увеличения индекса. Так вот в чем проблема при вставке нескольких записей подряд проблем не возникает, но при вставке одной и тут же ее редактировании, даже просто понажимав enter, CompanyID правильно заполненный автоматом (ID текущей компании) сбрасывается в 0 или любое другое значение, если это поле проинициализировать в InitValue до инсерта. К счастью этого можно избежать, перенеся insert в метод InitValue Data Source’a относящегося к данной таблице.<pre>public void initValue()
{
HB_Tutorial_Employee employeeCurrent = this.cursor();
HB_Tutorial_Employee employee;

super();

select maxof(EmployeeID) from employee;
employeeCurrent.EmployeeCurrent = employee.EmployeeID + 1;
employeeCurrent.insert();
}
</pre>
&nbsp;

В таком виде все отлично работает, но не является функциональностью таблицы, а лишь функциональностью формы.
__________________
Гурьев Сергей
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Присвоение значения полю активной записи по его имени HorrR DAX: Программирование 9 06.06.2008 12:13
Wizard для создания новой записи kitty DAX: Программирование 4 20.05.2008 01:15
Как при вводе новой записи установить значение поля по умолчанию Zman DAX: Программирование 3 17.01.2005 10:23
При создании новой записи не устанавливается курсор.. I don't understand DAX: Программирование 3 30.08.2004 12:44
Автоподстановка номенклатуры при создании новой аналитики JohNick DAX: Функционал 0 02.06.2004 13:49

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

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

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