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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.10.2003, 10:37   #1  
puz is offline
puz
Участник
 
37 / 11 (1) +
Регистрация: 01.09.2003
Адрес: Новосибирск
? как запретить редактирование всей строки DataSource?
Добрый день!

Кто-нибудь может сказать как программно осуществить $subj ? Нужно запретить для редактирования строки DataSource с определенным значением одного из полей. Смотрел там http://www.axforum.info/forums/showt...&threadid=2659, но мне нужен запрет на уровне именно DataSource, а не Grid, т.к. часть полей отображается не на Grid.

Заранее благодарен.
Старый 21.05.2010, 13:47   #2  
andriy_s is offline
andriy_s
Участник
 
54 / 13 (1) ++
Регистрация: 28.08.2009
А ести ли возможность запретить редактирование почти все строки (без припустим одного поля)???

Проблема слудующая:
- Добавили 1 кастом-поле в таблицу (таблица большая и со сложной AllowEdit логикой на уровне полей)
- После постинга вся строка датасорса имеет AllowEdit = false
- Но добавленое поле должно всегда быть активно

Как можно с минимальными усилиями это обойти?
Старый 21.05.2010, 13:52   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от andriy_s Посмотреть сообщение
А ести ли возможность запретить редактирование почти все строки (без припустим одного поля)???

Проблема слудующая:
- Добавили 1 кастом-поле в таблицу (таблица большая и со сложной AllowEdit логикой на уровне полей)
- После постинга вся строка датасорса имеет AllowEdit = false
- Но добавленое поле должно всегда быть активно

Как можно с минимальными усилиями это обойти?
Вижу на основной форме кнопку сбоку и взлетающую после клика на кнопке маленькую форму только с этим одним полем. Если с Аксессом работали, то примерно как то, что вылетает там по Shift+F2.
Старый 21.05.2010, 14:02   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от andriy_s Посмотреть сообщение
А ести ли возможность запретить редактирование почти все строки (без припустим одного поля)???
Global::allowEditFieldsOnFormDS_W
За это сообщение автора поблагодарили: NataLee (1), NeveB (1), siram (0), andriy_s (1).
Старый 21.05.2010, 14:33   #5  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
885 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от andriy_s Посмотреть сообщение
А ести ли возможность запретить редактирование почти все строки (без припустим одного поля)???
Если не боитесь, то можно такое безобразие устроить:
1) Закомментировать изменение AllowEdit на источнике, оставив всегда в true
2) В том же месте добавить вызов функции, в которой будет происходить перебор полей (через DictTable и DictField) источника данных и установка их AllowEdit, кроме избранных, в false

Но лучше так не рисковать


2S.Kuskov
Я так понимаю, что это с версий выше 3-ки в Global появилось ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 21.05.2010 в 14:36.
Старый 21.05.2010, 16:18   #6  
andriy_s is offline
andriy_s
Участник
 
54 / 13 (1) ++
Регистрация: 28.08.2009
Все прекрасно работает с помощью Global::allowEditFieldsOnFormDS_W.

КРОМЕ 1 поля, editContactPersonName - которое формируется edit методом.
X++:
client server edit ContactPersonName  editContactPersonName(boolean _set, ContactPersonName _name)
Поле editContactPersonName остается активным. Кто нибуть знает причину???
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 22.06.2011, 12:00   #7  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Post
Понимаю, что вопрос уже закрыли:
Цитата:
Сообщение от andriy_s Посмотреть сообщение
А ести ли возможность запретить редактирование почти все строки (без припустим одного поля)???

Проблема слудующая:
- Добавили 1 кастом-поле в таблицу (таблица большая и со сложной AllowEdit логикой на уровне полей)
- После постинга вся строка датасорса имеет AllowEdit = false
- Но добавленое поле должно всегда быть активно

Как можно с минимальными усилиями это обойти?
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Global::allowEditFieldsOnFormDS_W
добавлю, может кому пригодится:

Методы Dynamics Ax 2009 Sp1 Ru7:
\Classes\Global\allowEditFieldsOnFormDS_W
\Classes\Global\dsSetFieldAllowEdit_RU //тоже самое что и код ниже
\Classes\Global\dsSetFieldGroupAllowEdit_RU
\Classes\Global\dsSetFieldsAllowEdit_RU

или пример в \Forms\BankAccountTrans\Methods\initDesign_LV
X++:
void initDesign_LV()
{
    DictTable       dictTable = new DictTable(bankAccountTrans_ds.table());
    ;

    bankAccountTrans_DS.allowEdit(true);

    //Disable editability of all fields for datasource
    allowEditFieldsOnFormDS_W(bankAccountTrans_DS, false);

    //Enable editability of Notification fields.
    bankAccountTrans_ds.object(fieldnum(BankAccountTrans, CorrespondentCountry_LV)).allowEdit(true);
    bankAccountTrans_ds.object(fieldnum(BankAccountTrans, CentralBankPurposeText_LV)).allowEdit(true);
    bankAccountTrans_ds.object(fieldnum(BankAccountTrans, CentralBankPurposeCode_LV)).allowEdit(true);
    bankAccountTrans_ds.object(fieldnum(BankAccountTrans, BankPaymentRegistrationNum_LV)).allowEdit(true);
}
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
За это сообщение автора поблагодарили: NataLee (1), S.Kuskov (1), SuperStar88 (1).
Старый 21.05.2010, 16:48   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А ведь точно. Про edit-методы то я и не подумал. И видимо не только я но и локализаторы.
Дело в том что доступность полей, основанных на edit-методах определяется свойствами самого DataSource.

Получается, для того чтобы гарантированно отключить все edit-методы, необходимо обойти все контролы на форме, проверить их на причастность к edit-методам, и выставить AllowEdit непосредственно на контролах

Обойти контролы можно при помощи итератора с поддержкой методов обратного вызова для обработки контролов на форме

Последний раз редактировалось S.Kuskov; 21.05.2010 в 16:52.
Старый 21.05.2010, 17:46   #9  
andriy_s is offline
andriy_s
Участник
 
54 / 13 (1) ++
Регистрация: 28.08.2009
Спасибо! Очень помогли
Старый 22.06.2011, 12:54   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Интересно, а метод \Classes\Global\dsSetFieldGroupAllowEdit_RU что-нибуть делает с edit-методами, содержаoщимися в блокируемой группе?
P.S.: К сожалению сам пока RU7 пощупать не могу.
Старый 04.07.2012, 13:12   #11  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Наступил только что на, акуратно разложенные самим же собой, грабли в виде свойства таблицы MaxAccessMode установленного в значение "View". Понадобилось мне к датасурсу с этой таблицей приджойнитье ещё одну таблицу и открыть в связанной таблице одно поле на редактироавние (в связанной таблице MaxAccessMode = Delete). Ситуация получилась аналогичная той где изменения блокировались на уровне источника данных. Т.е. также автоматически заблокировалось и поле из связанной таблицы .

Для исправления ситуации пришлось выставить в свойствах таблице значение MaxAccessMode = Edit, а уже у самих поле AllowEdit = No. Конечно, после такой "подмены" в случае добавления новых полей в таблицу придётся закрывать от редактирования и их.

Вообще, имхо, это неправильное поведение системы. Зачем принимать решение о блокировке подчинённых полей основываясь на свойствах главного датасурса/таблицы?

Последний раз редактировалось S.Kuskov; 04.07.2012 в 13:17.
Старый 04.07.2012, 15:33   #12  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Вообще, имхо, это неправильное поведение системы. Зачем принимать решение о блокировке подчинённых полей основываясь на свойствах главного датасурса/таблицы?
Это не совсем так. Решение принимается не на основе главного датасорса, а на основе датасорса, указанного для контейнера, в котором содержится контрол, связанный с полем.

Например, пусть у MainTable MaxAccessMode = View, а у DetailTable MaxAccessMode = Delete. Теперь добавим в форму два DataSource - MainTable и DetailTable - и свяжем их. Если создать Grid, привязанный к DataSource MainTable, то ничего в нём редактировать будет нельзя, так как система смотрит на уровень доступа к датасорсу контейнера (в данном случае, контейнер - это Grid). Но если поля из DetailTable привязать к контролам, не входящим в Grid (например, выводящимся под Grid), то их можно будет спокойно редактировать, даже несмотря на то, что у основной таблицы MaxAccessMode = View.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 04.07.2012, 16:01   #13  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,159 / 1289 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Еще нужно смотреть, не задан ли датасорс в контейнере более высокого уровня, например, вкладка формы или группа формы.
Старый 04.07.2012, 16:08   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Спасибо за уточнение. Действительно всё так, но от этого не легче. Если у таба или у группы источник можно не указывать, то свойство DataSource грида не заполнять нельзя.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задача: запретить удалять строки разнесённых журналов. jeky DAX: Программирование 12 28.01.2009 22:22
Запретить редактирование поля... V777 DAX: Программирование 13 28.01.2009 11:24
Как определить факт изменения текущей строки DataSource формы Владимир Максимов DAX: Программирование 6 20.11.2008 16:24
Запретить редактирование поля в датасорсе Eldar9x DAX: Программирование 3 10.07.2008 12:04
Заполнение DataSource из постоянной и временной таблиц m_ax DAX: Программирование 2 21.06.2007 13:08

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:29.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.