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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2001, 01:40   #6  
sguryev is offline
sguryev
Участник
 
24 / 13 (1) ++
Регистрация: 07.12.2001
Адрес: Сергиев Посад
Lightbulb
Цитата:
Иногда требуется, чтобы значение, какого либо поля увеличивалось автоматически, например поле индекса, при вставке новой записи в таблицу, например в Grid control нажатием Ctrl+N. Так вот как это сделать…

Необходимо переопределить метод InitValue у таблицы, к которой хотелось бы добавить эту функциональность, следующим образом:

public void initValue()
{
HB_Tutorial_Company company;

super();

select maxof(ID) from company;
this.ID = company.ID + 1;
this.insert();
}
В данном случае эта функциональность добавляется к таблице 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 относящегося к данной таблице.

X++:
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();
}
В таком виде все отлично работает, но не является функциональностью таблицы, а лишь функциональностью формы.
__________________
Гурьев Сергей
Теги
номерная серия

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как формируется в Axapta название табличного индекса для СУБД? dn DAX: База знаний и проекты 4 09.10.2007 16:21
Автоматическое резервирование: на тропе войны aevi82 DAX: Функционал 11 29.08.2007 16:35
Волшебное превращение неуникального индекса... IPv6 DAX: База знаний и проекты 4 10.01.2007 16:46
Автоматическое увеличение значения поля при создании новой записи. sguryev DAX: Программирование 3 06.02.2003 14:00
Отображение связных таблиц. Сплиттер. Автоувеличение индекса. Delete Action. sguryev DAX: База знаний и проекты 0 14.12.2001 06:15

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

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

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