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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.06.2015, 07:42   #1  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Можно ли из кода изменить свойства Field в таблице, не в DS?
Можно ли из кода изменить свойства Field в таблице, не в DS? Например, изменить возможность редактирования. Спасибо!
Старый 09.06.2015, 07:55   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Я правильно вас понял. Вы хотите программно изменить приложение? Тогда вам нужны методы для работы с AOT.

Но вы точно этого хотите? Зачем? Это что-то разовое, связанное с обновлением системы?
Старый 09.06.2015, 08:02   #3  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Я правильно вас понял. Вы хотите программно изменить приложение? Тогда вам нужны методы для работы с AOT.

Но вы точно этого хотите? Зачем? Это что-то разовое, связанное с обновлением системы?
Нет, речь идет о возможности редактирования определенного поля, при наличие определенных условий. И правило должно работать не на одной форме а всегда. Поэтому и задумался о реализации правила не в DataSource
Старый 09.06.2015, 08:35   #4  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
при наличие
:facepalm:
За это сообщение автора поблагодарили: DSPIC (0).
Старый 09.06.2015, 08:13   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Логику определения доступности поля можете реализовать в методе таблицы, но применять свойство доступности поля придётся на каждой форме. Либо заморачиваться и внедрять свой код в базовые классы работающие с формами, типа SysSetupFormRun, но имхо это того не стоит.

На уровне таблицы можно использовать методы ValidateField или ValidateWrite, чтобы запретить редактирование, В этом случае пользователь увидит сообщение об ошибке при попытке сохранить значение.
Старый 09.06.2015, 08:36   #6  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Логику определения доступности поля можете реализовать в методе таблицы, но применять свойство доступности поля придётся на каждой форме. Либо заморачиваться и внедрять свой код в базовые классы работающие с формами, типа SysSetupFormRun, но имхо это того не стоит.

На уровне таблицы можно использовать методы ValidateField или ValidateWrite, чтобы запретить редактирование, В этом случае пользователь увидит сообщение об ошибке при попытке сохранить значение.
Это я понимаю. Я не понимаю как добраться из кода в свойства field? this.field1.ичтодальше?
Старый 09.06.2015, 08:46   #7  
axm2013
Гость
 
n/a
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
Это я понимаю. Я не понимаю как добраться из кода в свойства field? this.field1.ичтодальше?
Если к примеру вам хочется ограничить доступность, то проще указанное сделать на fds.
Если хотите при этом общий метод на табличке то получится нечто типа

метод таблички

FormDataSource fds;
...
if (this.datasource())
{
fds = this.datasource();
fds.object(fieldId).allowEdit(...)
}

Последний раз редактировалось axm2013; 09.06.2015 в 08:49.
Старый 09.06.2015, 08:59   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
Это я понимаю. Я не понимаю как добраться из кода в свойства field? this.field1.ичтодальше?
Основная проблема здесь не как добраться до свойств датасорса в табличном методе (про это уже правильно всё подсказали), а как в таблице поймать событие при котором следует менять эти самые свойства. Нужные события они все на уровне датасорса а не на уровне таблиц (.

Последний раз редактировалось S.Kuskov; 09.06.2015 в 09:02.
Старый 09.06.2015, 12:53   #9  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от АртемМелихов Посмотреть сообщение
Это я понимаю. Я не понимаю как добраться из кода в свойства field? this.field1.ичтодальше?
Вы бы всё-таки чуть поподробнее про саму задачу рассказали. Я вот за 10 лет работы с аксаптой ни разу не сталкивался с необходимостью такого хардкода.
__________________
С уважением,
Вячеслав
Старый 09.06.2015, 08:38   #10  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
нельзя сделать то, что вы хотите.
да и не должны вы этого хотеть
опять смахивает на сагу о X, Y и Z
За это сообщение автора поблагодарили: gl00mie (0).
Старый 09.06.2015, 09:08   #11  
AlexeyS is offline
AlexeyS
Участник
 
404 / 339 (12) ++++++
Регистрация: 15.06.2004
Адрес: москва
если есть сложная логика, лучше сделать Edit метод и вывести его на формы, а редактирование исходного поля запретить
Старый 09.06.2015, 09:10   #12  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Что только мОлодежь не придумает, лишь не работать

Задача какова - единым инструментом в любой форме рулить доступностью редактирования определенных полей определенной таблицы на основании определенных правил. Руление это необходимо в двух случаях - при переходе на новую запись и при редактировании текущей.

Есть какой-нибудь общий системный класс, позволяющий глобально из одного места добраться до источников данных любой формы ? Есть, SysSetupFormRun, упомянутый S.Kuskov. Позволяет этот класс отслеживать смену позиции в источнике данных управляемой формы и идентифицировать сам источник, в котором произошли изменения? Нет, он больше для элементов управления, контролов то бишь, заточен. Более подходящим бы класс FormDataSource, но он системный и скрытый, в его active() не залезешь. Это первая птичка обломинго ...

Есть какой нибудь класс, общий для всех таблиц, позволяющий отслеживать изменения полей в табличной переменной ? Есть, xRecord - но он системный и скрытый. Влезть в его modifiedField() не выйдет. Это птичка обломинго номер два...

Глобально эту задачу доступными средствами не решить - просто смиритесь с этим и делайте как все, класс-обработчик доступа в каждую форму.

P.S. Можно, конечно, проявить профессиональную Йаркость™, хакнув приложение,сняв атрибут скрытости с FormDataSource и xRecord.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 09.06.2015, 10:23   #13  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Есть какой-нибудь общий системный класс, позволяющий глобально из одного места добраться до источников данных любой формы ? Есть, SysSetupFormRun, упомянутый S.Kuskov. Позволяет этот класс отслеживать смену позиции в источнике данных управляемой формы и идентифицировать сам источник, в котором произошли изменения? Нет, он больше для элементов управления, контролов то бишь, заточен. Более подходящим бы класс FormDataSource, но он системный и скрытый, в его active() не залезешь. Это первая птичка обломинго ...
Ну не такая уже и прям обломинго. Сходу могу назвать целых два способа руления событием active на любой форме:
1. info.formNotify и, например, основанный на нем в 2009 FormRunListener_RU
2. Рисование наследника FormObjectSetNotify и использование addNotifyHandler на датасорсе. Позволяет отслеживать несколько событий датасорса, в т.ч. и active. Правда у меня в итоге не прижился, ибо при его использовании если на форме в гриде потащить за скроллбар мышью, то при отпускании мыши клиент заворачивал ласты. Что-то в ядре там перемудрили. Это на 2009, в 2012 может поправили.
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Есть какой нибудь класс, общий для всех таблиц, позволяющий отслеживать изменения полей в табличной переменной ? Есть, xRecord - но он системный и скрытый. Влезть в его modifiedField() не выйдет. Это птичка обломинго номер два...

Глобально эту задачу доступными средствами не решить - просто смиритесь с этим и делайте как все, класс-обработчик доступа в каждую форму.
Ну, в 2009 наверное да, но в 2012 - почему бы и нет?
X++:
fds.object(fieldnum(...)).registerOverrideMethod(...)
И - вперед
PS: сам тоже не пробовал, но ведь уже есть куда копать...
За это сообщение автора поблагодарили: АртемМелихов (1).
Старый 09.06.2015, 11:20   #14  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от makbeth Посмотреть сообщение
1. info.formNotify и, например, основанный на нем в 2009 FormRunListener_RU
2. Рисование наследника FormObjectSetNotify и использование addNotifyHandler на датасорсе.
...
X++:
fds.object(fieldnum(...)).registerOverrideMethod(...)
Максим, а вообще без допрограммирования на форме/датасорсе всяких регистраторов извещений ?
Чтоб создать форму в АОТ с нуля, кинуть ей датасорс, грид, в грид поля, открыть форму и наслаждаться изменениями доступности полей при навигации и редактировании по предопределенным где-то правилам...
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 09.06.2015 в 11:23.
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 09.06.2015, 11:40   #15  
axm2013
Гость
 
n/a
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
...
Чтоб создать форму в АОТ с нуля, кинуть ей датасорс, грид, в грид поля, открыть форму и наслаждаться изменениями доступности полей при навигации и редактировании по предопределенным где-то правилам...
Чуть ранее
Цитата:
Сообщение от TasmanianDevil
Есть, SysSetupFormRun,
Старый 09.06.2015, 11:56   #16  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Максим, а вообще без допрограммирования на форме/датасорсе всяких регистраторов извещений ?
"А вообще без программирования" нам кушать станет не на что

А так - все верно. Определенные изменения в SysSetupFormRun придется сделать.
Хотя мне больше нравится подход, когда определенный движок уже реализован в сторонке, но чтобы добавить поддержку это движка на форму, стоит внести изменения только в эту форму (например, написав что-то типа myMegaEngine.activateFor(element) в init), а не проверять нужна ли поддержка для каждой формы при ее открытии. Тем более для чего может пригодится такая вот необходимость влезать в каждую форму я даже не представляю.
Старый 09.06.2015, 12:52   #17  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от makbeth Посмотреть сообщение
"А вообще без программирования" нам кушать станет не на что
Фундаментальный продукт. позволяющий избавиться от мелкого программерства стоит дороже и правильное его позиционирование не даст умереть с голоду.

Цитата:
Сообщение от makbeth Посмотреть сообщение
А так - все верно. Определенные изменения в SysSetupFormRun придется сделать.
Хорошо, по навигации все отловится через SysSetupFormRun - а при редактированиии записи ? Спозиционировались, механизм отработал, начинаем редактировать и по результату редактирования доступ должен измениться. Чегой-то мне кажется, что без доступа к xRecord.modifiedField() вряд ли получится
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Теги
field, код, свойства

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kashperuk Ivan: Tutorial: AX 2012 - Invalid field access or Accessing unretrieved fields Blog bot DAX Blogs 0 29.10.2011 05:18
DynamicsAxSCM: The InventTrans table. Explore various field usages. Blog bot DAX Blogs 0 09.11.2010 19:10
Как можно управлять элементом Grid из кода? vitk DAX: Программирование 4 26.08.2004 16:02
DS по временной таблице странно обновлляется ArturK DAX: Программирование 2 29.07.2004 19:27
Что и как можно резать? George Nordic DAX: Администрирование 1 11.05.2004 18:44

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

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

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