14.01.2003, 20:55 | #1 |
Учаснег
|
НОВЫЙ КОНКУРС
Здравствуйте все!
У меня возникло желание повторить "игру" На этот раз вопрос будет из области программирования - но такой же хитрый-прехитрый Так как на прошлый вопрос ответ был дан очень быстро - теперь мы играем в несколько раундов, в ПЯТЬ. По итогам каждого раунда участникам будут начисляться очки от 1 до 10, в зависимости от степени "правильности", "глубины" и "скорости". Победит, соответственно, тот, кто наберет очков больше всех. Все оценки и все судейство - сугубо субъективное, так что не обессудьте Насчет приза пока идей никаких нету, но обещаю к пятому раунду че нибудь придумать Итак. Имеем некоторый класс, который вызывает простую форму: Редактируемое поле типа real, редактируемое поле типа boolean в виде чекбокса, кнопочка ОК. Все. Оба поля связаны с переменными, созданными в классе (не с базой данных). Пользователь вводит данные в редактируемое поле типа real, делает check либо uncheck поля boolean - нажимает кнопочку. В результате должны происходить некоторые действия (какие - не суть важно), причем если чекбокс "включен" - то логика будет одна, а если "выключен" - то другая. Как вы понимаете, в результате оно работает совсем не так, как задумывалось А именно: вне зависимости от положения чекбокса, всегда выбирается ветка "выключено". То-есть, попросту говоря, значения логической переменной прога не видит. НО! Что самое интересное! Вещественная переменная меж тем вполне доступна, и ее значение передается куда-надо! Описаны и используются обе переменные абсолютно одинаково - как кажется на первый взгляд. Вот список методов этого класса: - ClassDeclaration (здесь обе переменные описаны) - класс extends RunBase - dialog - описание формы, инициализация полей формы. - getFromdialog - инициализация переменных измененными значениями полей формы - canSweepBetweenCS - возвращает всегда true - pack - unpack - parmRealValue - parmBooleanValue - construct - main - new - description Вопрос - каковы возможные причины данного поведения? Что может быть не так? Чего в супе не хватает? Пока не привожу специально сам текст кода - это будет существенной подсказкой, приберегу ее на тот случай если никто не догадается P.S. Да, еще, ежели кто имеет еще какие вопросы на конкурс - тоже размещайте
__________________
Strictly IMHO & nothing personal |
|
15.01.2003, 07:27 | #2 |
сибиряк
|
а можно все-таки посмотреть код метода ClassDeclaration,
в честности то что относится к перечислению переменных для "упаковки и распаковки". И еще хотелось бы знать чего там хранится в таблице SysLastValue для строки с типом recordType = Class и elementName = имя_Класса в поле Value?
__________________
С уважением, Вячеслав. |
|
15.01.2003, 10:09 | #3 |
----------------
|
Ошибок можно наваять сколько угодно - все зависит от фантазии
Есть подозрение, что boolean переменная называется canSweepBetweenCS, а при обработки для выбора ветви вместо переменной используется вызов метода canSweepBetweenCS()... хотя я таких ошибок еще не встречал |
|
15.01.2003, 18:47 | #4 |
Участник
|
А значение-то чек-бокса считывается в значение переменной? И в каком месте ветвление происходит и как (в классе или дочерней форме) и, главное когда?
А какие могут быть ошибки... Я знаю несколько видов ошибок: 1. забыл написать 2. написал, но не то 3. написал но не там 4 написал лишнее Перемножте это на 12 методов в классе и получите возможные варианты ошибок |
|
16.01.2003, 15:58 | #5 |
Учаснег
|
Здравствуйте все!
Очень рад, что Вы так активно участвуете Еще более рад, что есть "новые лица" Отвечаю всем по порядку. Vladislav, Значение чек-бокса - считывается в переменную! Если б все было так просто, я бы и вопрос не стал задавать . Ветвление происходит в методе run этого класса. Буквально, run НАЧИНАЕТСЯ с условия if(BooleanValue)... wamr, Вариант с CanSweep интересный - но фишка в том, напомню, что неправильно обрабатывается ТОЛЬКО переменная BooleanValue. А в если б дело было в вызове CanSweep, я полагаю, обе бы переменные считались не так (впрочем, это лишь моя версия...). К тому же, как отмечено, CanSweep возвращает всегда тру, то есть это просто заглушка slava, Вот код: PHP код:
Жду дальнейших вопросов!
__________________
Strictly IMHO & nothing personal |
|
16.01.2003, 16:32 | #6 |
Участник
|
Ты забыл внести в паковку твой Boolean, и похоже разрешив "протягивание между клиентом - сервером" данных canSweepBetweenCS ты теряешь полученное значение. Данная фишка будет только на 3-х уровневой Аксапте в 2-х должно работать все нормально
|
|
16.01.2003, 17:49 | #7 |
сибиряк
|
остается только порадываться, что своим вопросом я подтолкнул ответ
Слава, привет !
__________________
С уважением, Вячеслав. |
|
16.01.2003, 19:38 | #8 |
Учаснег
|
Правильные ответы будут опубликованы завтра, 17 января
__________________
Strictly IMHO & nothing personal |
|
17.01.2003, 16:25 | #9 |
Учаснег
|
РЕЗУЛЬТАТЫ ПЕРВОГО ТУРА
Итак,
Как я ни запутывал, как я ни старался - правильный ответ был дан Ну конечно же, Vladislav Yushakov был абсолютно прав! Именно "невключение" переменной в pack и привело к тому, что она "терялась". Можно лишь добавить, что кроме того для исправления ошибки крайне желательно увеличить значение CurrentVersion - иначе Аксапта будет пытаться искать "старое" значение в SysLastValue. Однако, Vladislav не был первым правильно ответившим! Ибо до него эту идею начал первым развивать slava! (У меня, кстати, зародились поначалу подозрения, что это один и тот же человек - так что вы уж выбирайте пожалуйста ники "поотличительней" ) Таким образом, после длительного совещания жюри в моем лице постановило: Очки распределить так - Slava - 9 - Vladislav - 8 Еще раз поздравляю! На этом первый тур считаем закрытым. Вопросы второго размещу в понедельник. Кстати, если у кого-то появились свои вопросы - еще раз МИЛОСТИ ПРОСИМ!!!! Всем привет!
__________________
Strictly IMHO & nothing personal |
|
17.01.2003, 16:54 | #10 |
----------------
|
Вопрос - ответы вида "Согласен с предыдущим оратором" засчитываются?
|
|
17.01.2003, 17:58 | #11 |
Учаснег
|
Засчитываются, но очки за них не начисляются
Очки начисляются, только если были высказаны СВОИ мысли - хотя бы и в дополнение к правильному ответу.
__________________
Strictly IMHO & nothing personal |
|
20.01.2003, 14:10 | #12 |
Участник
|
Уважаемые Господа!
Внесу и я свои 5 центов... Ошибка УЖ ТОЧНО не в том, что realValue пакуется, а booleanValue - нет. В этом случае просто не будет сохраняться последнне значение - и все. Ошибка могла возникнуть в кривой компилляции класса. В таких случаях обычно помогает инкрементарная компилляция. Ради хохмы смоделировал ситуацию. Объект создается на сервере, а сама проверка условия - на клиенте. Налицо "протягивание кода сервер -> клиент". Пакуется одно realValue. Однако, все значения возвращаются корректно. Уважаемый AKIS: дай более детальное описание ошибки.
__________________
С уважением, Андрей Беседин |
|
20.01.2003, 14:43 | #13 |
Banned
|
Пять центов не котируются, ошибка именно во взаимодействии клиент-сервер для наследников RunBase. В соответствии с шаблоном удаленных вызовов Axapta создает два экземпляра - один на клиенте и один на сервере. Пользователь работает с диалоговым окном на клиентской машине. После отработки prompt() для передачи всех параметров класс сериализуется методами pack() и unpack() (должны запаковываться все переменные, определяющие состяние объекта) и полученный контейнер передается серверному представителю RunBase.
|
|
31.01.2003, 13:16 | #14 |
Смотрящий поверх деревьев (Варварский отморозок)
|
Вот еще про протаскивание данных между клиентом и сервером
<Зохавано мудератором>
за неуплату
__________________
It's a dirty job, but someone's got to do it. So? |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|