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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.09.2012, 01:28   #14  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
И хотя уважаемый S.Kuskov уже ответил на Ваш вопрос всё же приведу
пару дополнений, которые могут быть полезны новичку для понимания:
1.) Чтобы заполнить Set значениями Вам нужно будет в цикле перебрать все записи, которые на данный момент выбраны по активному запросу на форме, то есть, через актуальную на данный момент quеry. Вот так примерно будет выглядеть метод, заполняющий Set (для начала почитайте о том, как работать с Query и QueryRun, хотя бы на той же аксаптапедии)
X++:
    QueryRun  currentQueryRun;
    CustTable customer;
    ;

    currentQueryRun = CustTable_DS.queryRun();
    while (currentQueryRun.next())
    {
        if (currentQueryRun.changed(tablenum(CustTable)))
        {
            customer = currentQueryRun.get(tablenum(CustTable));
            selectedCustomers.add(customer.RecId);
        }
        
    }
Здесь вы сначала получаете ссылку на QueryRun объект главного(если их несколько) источника данных, потом в цикле перебираете все возвращаемые данным QueryRun записи. Метод queryRun.changed обеспечивает проверку того, что найдена новая уникальная запись именно интересующей Вас таблицы(в моем примере это CustTable), в случаях, когда у вас один источник данных её можно опустить, в случаях же со связанными источниками данных(join) она необходима, так как общее количество итераций цикла будет равняться сумме комбинаций записей из всех связанных таблиц для каждой записи главной таблицы. Например, если у нас в запросе формы имеем ещё и CustTrans(кастомерские проводки), объедененную join"ом с CustTable, то для одной и той же записи CustTable мы попадем в цикл столько раз, сколько проводок у кастомера, и если не реализовать выше указанную проверку добавим в Set один и тот же RecId кастомера столько раз, сколько у него проводок.

2.) Для всех отобранных по активному запросу на форме записей аксаптовский движок отрисовует записи на гриде, если контрол грида завязан на поле записи - его значение берется напрямую из записи, если на метод(через свойство dataMethod), то данный метод(display или edit) выполняется с значением записи(или точнее ссылкой на текущую, отобранную запись) в качестве параметра. Edit метод(в нашем случае) лезет в Set и проверяет, находится ли в нем RecId данной записи. И возвращает NoYes::No или NoYes::Yes, в зависимости от значения, которое вернул опрошенный движком edit метод, движок отображает чекбокс отмеченным(если метод вернул true) или нет. Так работает логика в случае отображения, то есть для edit метода в режиме отображения или для display метода, который предназначен исключительно для отображения(контролы, завязанные за display метод всегда read-only). Если посмотреть на сигнатуру edit метода, видно, что первый параметр логического типа и имеет название set, этот параметр дает понять для каких целей исполняется метод - для чтения или для изменения(записи). В случаях, когда система только отображает запись метод выполняется с значением set = false. В случаях, когда пользователь меняет значение в контроле, завязанном на edit метод(в Вашем случае - checkbox), движок аксапты исполняет данный метод с значением set = true и 3ьим параметром(в случае с edit-методами на уровне таблицы активная запись не передается и параметр значения - второй), который передает состояние контрола - то есть, введенное\установленное в нем значение(базовый тип этого параметра, равно как и тип возвращаемого значения метода, должен совпадать с типом допустимого контента связанного контрола, в нашем случае это чекбокс и возвращает он enum - NoYes). Так вот, в случае изменения значения контрола edit метод вызывается с set = true и значением NoYes типа, установленным в контроле. Edit метод проверяет, что он вызван на запись и добавляет в Set значение, если чекбокс был отмечен или убирает значение из Set, если галка на чекбоксе была снята(то есть, в зависимости от 3ьего параметра, параметра состояния NoYes типа). Ну и возвращает значение, чтобы отобразить состояние контрола.
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 22.09.2012 в 01:33.
За это сообщение автора поблагодарили: Nikit (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Помогите новичку: импорт Bars DAX: Администрирование 6 26.03.2005 09:14
помогите новичку ita DAX: Программирование 16 21.02.2005 18:12
Помогите новичку. bagyr DAX: Программирование 9 18.02.2005 08:33
Помогите новичку Security keys listener DAX: Администрирование 4 24.07.2003 16:28
Помогите новичку Trantor DAX: Администрирование 1 14.07.2003 10:48

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

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

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