Хорошим тоном при разработке приложения Axapta считается предоставление пользователю возможности обработки нескольких выбранных записей нажатием одной кнопки.
Проблема
Пользователь выбрал несколько записей в Grid'е и Вы хотите, чтобы созданная Вами обработка учитывала этот выбор. Обычно в случае, если выбранных записей нет, обрабатывается только текущая запись.
Решение
Объект класса FormDataSource содержит метод для распознавания ситуации множественного выбора: boolean anyMarked(). Этот метод возвращает true, если пользователь выбрал несколько записей в FormDataSource, используя Shift или Ctrl.
Для перебора выбранных записей в классе FormDataSource есть методы Common getFirst([int _mark = 0, boolean _fetchAhead = true]) и Common getNext(). В случае, если первый аргумент в getFirst не равен 0, этот метод и метод getNext будут последовательно возвращать выбранные записи (иначе будут возвращены все записи в Data Source).
Используя имеющиеся методы, можно организовать цикл с помощью оператора for.
Пример
В форме, в которой имеется Data Source с именем CustTable, имеет смысл следующая часть кода (наиболее вероятно ее появление в методе clicked какой-либо кнопки).
<div class='XPPtop'>X++</div><div class='XPP'>CustTable CustTableEdit;
[color=:green]// ...
[/color][color=:blue]for[/color] (CustTableEdit = CustTable_ds.getFirst(1) [color=:blue]?[/color] [color=:green]// есть ли помеченные записи -
[/color] CustTable_ds.getFirst(1) : [color=:green]// если есть, взять первую
[/color] CustTable; [color=:green]// иначе взять текущую
[/color] CustTableEdit; [color=:green]// продолжать до тех пор, пока есть записи для обработки
[/color] CustTableEdit = CustTable_ds.getNext()) [color=:green]// взять потенциальную следующую запись
[/color]{
[color=:green]// обработка CustTableEdit
[/color] [color=:green]// ...
[/color]}</div>
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
|