|
|
#1 |
|
Участник
|
Как отделить ручной ввод данных в поле от заполнения данными по лукапу
Приветствую всех.
Требуется научиться отличать тип ввода данных в поле: ввел ли пользователь значение в поле с клавиатуры или значение было подставлено из лукапа. Как это можно определить? ![]() Желательно как минимум на уровне датасорса(не отдельного контрола) |
|
|
|
|
#2 |
|
Участник
|
В качестве варианта можно перекрыть метод lookup на поле датасоурса и отслеживать в методе его вызов, например поставить флаг вызова лукапа, объявив его в ClassDeclaration:
X++: public void lookup(FormControl _formControl, str _filterStr) { super(_formControl, _filterStr); flag = true; } X++: public void modified() { super(); if (flag) { //какие-то дествия; } flag = false; }
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 22.03.2012 в 12:56. |
|
|
|
| За это сообщение автора поблагодарили: RomanK (1). | |
|
|
#3 |
|
Участник
|
Не знаю чем конкретно это может помочь, но почему-то вспомнился такой факт lookup не закрывается до завершения метода modified
Расскажите лучше зачем? Последний раз редактировалось S.Kuskov; 22.03.2012 в 12:55. |
|
|
|
|
#4 |
|
Участник
|
Цитата:
X++: public void lookup(FormControl _formControl, str _filterStr) { flag = true; super(_formControl, _filterStr); flag = false; } .
|
|
|
|
| За это сообщение автора поблагодарили: RomanK (1). | |
|
|
#5 |
|
северный Будда
|
Предположу, что лукап перекрыт и в него попадают не все значения
т.е. выбрать можно меньше, чем ввести рукамия в таком случае просто заводил новый EDT, на котором корректно вешал отношения. правда у меня случай это позволял. В общем случае лучше дописать validate на датасоурсе и вызывать его на сохранении курсора
__________________
С уважением, Вячеслав |
|
|
|
|
#6 |
|
Участник
|
лукап перекрыт и возвращает целую запись, потом запись дербанится и заполняются определенные поля в табличке(аля механим связки разных сущностей). Затем если пользователь вводит данные в конкретное поле вручную, а не из лукапа, связь надо разорвать(подчистить все поля которые заполнились в фоне).
Делать кнопку - "разорвать связь" в целом логично, но никто не будет делать 2 действия, сначала разрывать связь, потом еще и дату менять. Поэтому требовалось понимать вручную вводят или по лукапу значение пришло. Спасибо за советы всем, сейчас будем реализовывать )))) |
|
|
|
|
#7 |
|
Developer
|
|
|
|
|
|
#8 |
|
Developer
|
Цитата:
в стандартных лукапах не используется formRun.wait()
|
|
|
|
|
#9 |
|
Участник
|
Лукап на таблице использующий, как вы правильно пишете, SysTableLookup
{ formRun.wait(); if (formRun.closedOk()) { табличка ваша = formRun.dataSource(1).cursor(); } return табличка ваша; } |
|
|
|
|
#10 |
|
Участник
|
|
|
|
|
|
#11 |
|
Developer
|
Цитата:
1. в методе контрола modified() реализовать очистку "связанных полей" без всяких проверок, потому что: 2. метод контрола modified() вызывается ядром в рамках вызова formRun.wait() т.е. "связанные поля" будут очищаться всегда при изменении ключевого поля, а заполняться только при успешной отработке лукапа. З.Ы. Я так понимаю, что значение ключевого поля в лукапе НЕ уникально? |
|
|
|
|
#12 |
|
Участник
|
Цитата:
.Цитата:
Сообщение от vallys
Ну тогда вам не нужно знать откуда вы попали в modified()...
1. в методе контрола modified() реализовать очистку "связанных полей" без всяких проверок, потому что: 2. метод контрола modified() вызывается ядром в рамках вызова formRun.wait() т.е. "связанные поля" будут очищаться всегда при изменении ключевого поля, а заполняться только при успешной отработке лукапа. З.Ы. Я так понимаю, что значение ключевого поля в лукапе НЕ уникально? |
|
|
|
|
#13 |
|
Участник
|
И что, если юзер вместо выбора из лукапа сам напечатает в точности такое же значение, то поля затягивать уже не нужно? Какая-то странная логика...
|
|
|
|
|
#14 |
|
Участник
|
Именно так. Только по лукапу тянуться поля, ручной ввод означает разрыв связи
|
|
|
|
|
#15 |
|
Участник
|
Цитата:
Сообщение от vallys
Ну тогда вам не нужно знать откуда вы попали в modified()...
1. в методе контрола modified() реализовать очистку "связанных полей" без всяких проверок, потому что: 2. метод контрола modified() вызывается ядром в рамках вызова formRun.wait() т.е. "связанные поля" будут очищаться всегда при изменении ключевого поля, а заполняться только при успешной отработке лукапа. З.Ы. Я так понимаю, что значение ключевого поля в лукапе НЕ уникально? |
|
|
|
|
#16 |
|
Участник
|
Цитата:
Сообщение от RomanK
не, в момент когда мы вызывали лукап и заполнили значением нужное нам поле, из таблицы по которой мы сделали лукап надо в фоне затянуть еще другие значения, юзер этого не видит, но поля затягиваются. Поэтому я из лукапа возвращаю курсор и затем забираю нужные мне данные
.Не то чтобы не уникально, просто нужны еще данные из таблицы |
|
|
|
|
#17 |
|
Administrator
|
Цитата:
Цитата:
2RomanK: Вообще, я как-то делал объединенный лукап клиентами и поставщиками, а потом пытался "угадывать" - откуда была выбрана запись. По факту, ни к чему хорошему эта идея ни привела - т.к. было много глюков (в коде выбиралась не та запись) именно из-за ручного доввода или какого-нибудь кеша. Поэтому, я пришел к выводу - что надежнее (с т.з. прогнозируемости работы системы) смириться с тем, что выбор из лукапа и ручной ввод - суть есть неразделимые события и их невозможно в АХ отделить друг от друга.
__________________
Возможно сделать все. Вопрос времени |
|
|
|
|
#18 |
|
Участник
|
С чего бы это? Зачем вы пытаетесь искоренить в компании продвинутых пользователей, которые наизусть помнят нужные им 5-10 возможных значений поля и чихать хотели на ваши лукапы?А зачем вообще их отделять? Какая на фиг разница с точки зрения бизнес-логики, каким образом значение попало в поле? Если нужно подтягивать значения по умолчанию для других полей, то это нужно делать по-любому (и не факт, что тот же табличный modifiedField() окажется самым удобным решением). Потому что завтра пользователям надоест лазить по лукапам, и они захотят качать данные из Экселя - и что же, связанные поля при импорте уже не заполнять, "разрыв связи"?..
|
|
|
|
|
#19 |
|
Участник
|
"Страшно", что-то советовать после таких гуру
![]() Перекрыть метод textChange() - в котором сделать инциализацию признака "редактиров.ручками" lookup() - в котором ОБНУЛЯТЬ признак "редактиров.ручками" Идея из темы: Запрет редактирования поля Запрет на ввод данных не из lookup'а |
|
|
|
|
#20 |
|
Участник
|
Цитата:
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|