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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.02.2013, 21:56   #41  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от LeonDerCom Посмотреть сообщение
Вообще, мне непонятна идея засовывания проверки на разрешение редактирования в валидацию поля...
Если необходимо определить разрешение на редактирование всей записи, то в метод active() - <имядатасерса>.allowEdit(FieldSetupTable::SetupFormDataSource2(salesQuotationLine_ds, this.formRun(), true));
Либо в modifiedField - если определенные поля... А валидацию оставить на решение ее конкретной задачи.
"если определенные поля... " что? Заблокировать от изменения? Тогда ни в коем случае не modifiedField, а опять же active() - <имядатасерса>.object(fieldid).allowEdit()
Но не всегда подходит жёсткая блокировка записи от всех изменений. Иногда нужно разрешить изменение но его ограничить - вот тогда как раз без методов validate не обойтись. Причём если ограничение значения поля не зависит от соседних полей, то тогда достаточно метода validateField(). А если для принятия решения необходима проверка комбинации полей, то тогда validateWrite().

modifiedField() используется для автоматизации заполнения связанных полей, когда на основании значения одного поля можно определить значение другого поля.
Старый 14.02.2013, 22:43   #42  
LeonDerCom is offline
LeonDerCom
Участник
 
45 / 20 (1) +++
Регистрация: 08.10.2012
Почему нельзя в modified ставить проверку?
Validate возвращает, что все ОК, Идет метод modified, перехватываем super и если остальной код для изменений - если условие не выполняется - то отменяем. Почему нет?
ПС: писал, что в Аксе не долго, поэтому уроки правильного коддинга приму с благодарностью.
ПСС: <имядатасерса>.object(fieldid).allowEdit() - спасибо, пригодится.
Старый 15.02.2013, 03:25   #43  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,245 / 980 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от LeonDerCom Посмотреть сообщение
Почему нельзя в modified ставить проверку?
Потому что программирование это форма общения между людьми. И писать код в месте, в котором никто не ожидает проверки на валидность записи, просто неприлично.
Представьте завод. Молодой слесарь, выточил болванку, положил фрезу в ящик с гайками и с чувством выполненого долга ушел домой. Приходит его сменщик и начинает искать фрезу нужного диаметра. Где он ее будет искать? Что он скажет/сделает когда поймет, что фреза лежит не в том ящике? Что скажет/сделает мастер участка когда поймет, что пришлось заказать новую фрезу и перекроить план производства, в то время как она спокойно лежала в метре от станка?
__________________
Isn't it nice when things just work?
За это сообщение автора поблагодарили: Pustik (2).
Старый 15.02.2013, 08:02   #44  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от LeonDerCom Посмотреть сообщение
Идет метод modified, перехватываем super и если остальной код для изменений - если условие не выполняется - то отменяем. Почему нет?
Как именно отменяем? Переприсваиваем старое значение? Такое поведение поля будет отличаться от стандарта.

Сигнатура метода validate:
Цитата:
boolean validate()
Сигнатура метода modified:
Цитата:
void modified()
Система(ядро аксапты) не ждёт от метода modified ответного результата. А от validate ждёт. И если проверка validate возвращает ложь, то система блокирует потерю фокуса контролом, тем самым принуждая пользователя выбрать другое значение. В случае же вашего решения через modified фокус ввода может быть смещён пользователем, значение поля конечно вернётся на старое, но вот пользователю прийдётся вручную возвращаться к полю чтобы повторно ввести новое значение, а фокус в это время может попасть даже на другую вкладку .

Можно конечно для запрета ввода определённого значения вызвать исключение из modified, так сказать аварийно завершить работу метода. Тогда это будет как-то похоже на поведение validate. Но это будет уже точно перебор. См пост от macklakov. Зачем делать похоже, если можно сделать как нужно

Последний раз редактировалось S.Kuskov; 15.02.2013 в 08:04.
Старый 15.02.2013, 09:01   #45  
LeonDerCom is offline
LeonDerCom
Участник
 
45 / 20 (1) +++
Регистрация: 08.10.2012
S.Kuskov
Имелось в виду modified конрола. В случае перехвата супера, он не тронет значение из базы и вернет его на место в случае ввода или изменения курсора на форме.
Единственное, что туда не стоит помещать сообщение об ошибке, поскольку в случае запрета на модификацию modified будет выполнен два раза, первый на саму замену, второе на возвращение обратного значения.
И кстати, можете объяснить одну интересную штуку с этим делом перехвата супер. Метод модификации контрола возвращает булево значение, так вот почему после запрета на супер для смены фокуса в случае возвращения true достаточно нажать ввод или переместить курсор, а в случае false - помогает выйти с редактирования только после жатаия пробела?

ПС: macklakov - уговорили. Хотя ограничивался просто запретом allowedit и валидацией, но экспериментирование с некоторыми методами нестандартным подходом дает интересные результаты для общего развития.
Старый 15.02.2013, 09:20   #46  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от LeonDerCom Посмотреть сообщение
Имелось в виду modified конрола.
Ууу... Не, это вообще не вариант. Контролы лучше вообще не трогать без лишней необходимости. Интерфейс в аксапте же может быть изменён пользователем в runtime. И вообще говоря пользователь может не только перемещать существующие контролы, но и создавать новые, связанные с теми же источниками данных.
Нажмите на изображение для увеличения
Название: Добавление контролов в runtime.png
Просмотров: 314
Размер:	86.1 Кб
ID:	8061
Так что программирование на уровне контролов и тем более программирование прав доступа в аксапте вообще не вариант.
Старый 15.02.2013, 09:25   #47  
LeonDerCom is offline
LeonDerCom
Участник
 
45 / 20 (1) +++
Регистрация: 08.10.2012
S.Kuskov
Не знал, спасибо за информацию.
Старый 15.02.2013, 14:02   #48  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
user_ax, лучше под новый вопрос создавать новую ветку.

Эту тему модераторы скорее всего порежут на несколько частей. Пожалуйста, создавайте отдельные ветки для обсуждения отдельных тем.
За это сообщение автора поблагодарили: Pustik (9).
Старый 15.02.2013, 14:28   #49  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
user_ax, лучше под новый вопрос создавать новую ветку.

Эту тему модераторы скорее всего порежут на несколько частей. Пожалуйста, создавайте отдельные ветки для обсуждения отдельных тем.
Хорошо, я понял, благодарю.
Старый 26.02.2013, 10:52   #50  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от belugin Посмотреть сообщение
У Microsoft есть своя корпоративная "аська" под названием Lync. Она интегрирована в продукты Microsoft - например, я сейчас, читая письмо в outlook, или смотря документы в sharepoint могу легко посмотреть, находятся ли люди онлайн в программе Lync и быстро написать им сообщение.
А вы какую версию Lync используете ? Я заметил что с Ax2009 у меня корректно работала только версия 2010, ну и ещё Microsoft Office Communicator отлично работал. А когда перешёл на Lync 2013, возникли проблемы. При открытии форм, на которых присутствуют контролы с кодами сотрудников (EmplId), и если для конкретно этих сотрудников настроен адрес для входа в коммуникатор, то форма зависала секунд на 30 и окошко Lync открывалось. Понятное дело, что все настройки адресов для входа в коммуникатор в аксапте пришлось убрать.
__________________
Дмитрий
Старый 26.02.2013, 11:00   #51  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Damn Посмотреть сообщение
А вы какую версию Lync используете?
Я сам этой функциональностью не пользуюсь, поэтому ничего не могу сказать.
Теги
datafield, datasource, presence, свойства полей

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
sumitsaxfactor: Presence Information in DAX Blog bot DAX Blogs 0 06.05.2011 02:19
jinx: Dynamics AX &ndash; Query-Ranges und Filtereinstellungen des Benutzers Blog bot DAX auf Deutsch 0 04.02.2010 00:05
jinx: Microsoft Dynamics AX &ndash; Den zuletzt ausgew&auml;hlten Datensatz ermitteln Blog bot DAX auf Deutsch 0 24.10.2009 23:05
jinx: Dynamics AX LookupForms &ndash; FindValue und Range auf gleichem Feld Blog bot DAX auf Deutsch 0 18.09.2009 03:13
C# and AX Development: Updating the caller Form/DataSource Blog bot DAX Blogs 0 18.07.2009 02:28

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

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

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