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.

Заранее благодарен.
Старый 24.10.2003, 11:03   #2  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
PHP код:
PurchTable_ds.object(fieldNum(PurchTablePaymMode)).allowEdit(false); 
Старый 24.10.2003, 11:27   #3  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
Это для столбца:

Цитата:
Изначально опубликовано raz
PHP код:
PurchTable_ds.object(fieldNum(PurchTablePaymMode)).allowEdit(false); 
А это для строки:

перекрываем cursorNotify у датасорса:

PHP код:
public void cursorNotify(int _event)
{
    
super(_event);

    
this.allowEdit(PurchTable.InvoiceAccount == 'Вася Пупкин');

__________________
С уважением, Игорь Ласийчук.
За это сообщение автора поблагодарили: konopello (1), Corel (1).
Старый 24.10.2003, 11:31   #4  
puz is offline
puz
Участник
 
37 / 11 (1) +
Регистрация: 01.09.2003
Адрес: Новосибирск
спасибо!
Чертовски изящно, однако...
Старый 27.10.2003, 14:55   #5  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Оставьте в покое cursorNotify() !!!!!!!!!!!!!
для этих целей предназначен active() на датасорсе.
cursorNotify() нужен совсем для другого!!!
За это сообщение автора поблагодарили: Hans (1).
Старый 27.10.2003, 19:38   #6  
RVS is offline
RVS
Сенбернар
Аватар для RVS
Злыдни
 
696 / 130 (6) +++++
Регистрация: 27.02.2003
Адрес: Королев МО
громко А пояснить, для тупых (меня)?
__________________
Best Regards,
Roman
Старый 28.10.2003, 06:41   #7  
puz is offline
puz
Участник
 
37 / 11 (1) +
Регистрация: 01.09.2003
Адрес: Новосибирск
попробовал active(). разницы пока не заметил.
А в самом деле, в чем она заключается? И почему "совсем для другого"?
За это сообщение автора поблагодарили: Hans (1).
Старый 28.10.2003, 09:27   #8  
parovoz is offline
parovoz
Участник
 
18 / 12 (1) ++
Регистрация: 28.08.2003
Re: Оставьте в покое cursorNotify() !!!!!!!!!!!!!
Цитата:
Изначально опубликовано ta_and
для этих целей предназначен active() на датасорсе.
cursorNotify() нужен совсем для другого!!!
Позвольте поинтересоваться, в целях повышения образованности, для чего нужен метод cursorNotify()?
Старый 28.10.2003, 11:15   #9  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
Да, для этих целей надо использовать active. cursorNotify я использую по привычке.

Посмотрел внимательней на работу cursorNotify
Судя по всему он работает так:
cursorNotify(int event):

event = 0 - подчитываются данные из существующего курсора
event = 1 - (не совсем понятно) был создан курсор с фильтрацией
event = 2 - курсор закрылся и открылся новый
event = 3 - аналогичен методу active
__________________
С уважением, Игорь Ласийчук.
Старый 21.05.2010, 13:47   #10  
andriy_s is offline
andriy_s
Участник
 
54 / 13 (1) ++
Регистрация: 28.08.2009
А ести ли возможность запретить редактирование почти все строки (без припустим одного поля)???

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

Как можно с минимальными усилиями это обойти?
Старый 21.05.2010, 13:52   #11  
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   #12  
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   #13  
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   #14  
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).
Старый 21.05.2010, 16:48   #15  
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   #16  
andriy_s is offline
andriy_s
Участник
 
54 / 13 (1) ++
Регистрация: 28.08.2009
Спасибо! Очень помогли
Старый 22.06.2011, 12:00   #17  
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).
Старый 22.06.2011, 12:54   #18  
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   #19  
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   #20  
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
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задача: запретить удалять строки разнесённых журналов. 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, время: 02:23.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.