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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.01.2003, 20:55   #1  
AKIS is offline
AKIS
Учаснег
Аватар для AKIS
 
392 / 19 (1) ++
Регистрация: 18.08.2002
Адрес: За морями, за океанами
НОВЫЙ КОНКУРС
Здравствуйте все!

У меня возникло желание повторить "игру"

На этот раз вопрос будет из области программирования - но такой же хитрый-прехитрый

Так как на прошлый вопрос ответ был дан очень быстро - теперь мы играем в несколько раундов, в ПЯТЬ. По итогам каждого раунда участникам будут начисляться очки от 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  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
а можно все-таки посмотреть код метода ClassDeclaration,
в честности то что относится к перечислению переменных для "упаковки и распаковки". И еще хотелось бы знать чего там хранится в таблице SysLastValue для строки с типом recordType = Class и elementName = имя_Класса в поле Value?
__________________
С уважением, Вячеслав.
Старый 15.01.2003, 10:09   #3  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Ошибок можно наваять сколько угодно - все зависит от фантазии
Есть подозрение, что boolean переменная называется canSweepBetweenCS, а при обработки для выбора ветви вместо переменной используется вызов метода canSweepBetweenCS()... хотя я таких ошибок еще не встречал
Старый 15.01.2003, 18:47   #4  
Vladislav Yushakov is offline
Vladislav Yushakov
Участник
 
47 / 10 (1) +
Регистрация: 10.01.2003
А значение-то чек-бокса считывается в значение переменной? И в каком месте ветвление происходит и как (в классе или дочерней форме) и, главное когда?

А какие могут быть ошибки...
Я знаю несколько видов ошибок:
1. забыл написать
2. написал, но не то
3. написал но не там
4 написал лишнее

Перемножте это на 12 методов в классе и получите возможные варианты ошибок
Старый 16.01.2003, 15:58   #5  
AKIS is offline
AKIS
Учаснег
Аватар для AKIS
 
392 / 19 (1) ++
Регистрация: 18.08.2002
Адрес: За морями, за океанами
Здравствуйте все!

Очень рад, что Вы так активно участвуете Еще более рад, что есть "новые лица"

Отвечаю всем по порядку.
Vladislav,
Значение чек-бокса - считывается в переменную! Если б все было так просто, я бы и вопрос не стал задавать .
Ветвление происходит в методе run этого класса. Буквально, run НАЧИНАЕТСЯ с условия if(BooleanValue)...

wamr,
Вариант с CanSweep интересный - но фишка в том, напомню, что неправильно обрабатывается ТОЛЬКО переменная BooleanValue. А в если б дело было в вызове CanSweep, я полагаю, обе бы переменные считались не так (впрочем, это лишь моя версия...). К тому же, как отмечено, CanSweep возвращает всегда тру, то есть это просто заглушка

slava,
Вот код:
PHP код:
/* class MyClass   extends RunBase
{
    Real       RealValue;

    DialogRunbase   dialog;
    DialogField     dialogRealValue;
    DialogField     dialogBooleanValue; 
    
    Boolean         BooleanValue; 

    #DEFINE.CurrentVersion(1)

    #LOCALMACRO.CurrentList
        RealValue
    #ENDMACRO
}*/ 
В таблице SysLastValue для строки с типом recordType = Class и elementName = MyClass в поле Value пусто.

Жду дальнейших вопросов!
__________________
Strictly IMHO & nothing personal
Старый 16.01.2003, 16:32   #6  
Vladislav Yushakov is offline
Vladislav Yushakov
Участник
 
47 / 10 (1) +
Регистрация: 10.01.2003
Ты забыл внести в паковку твой Boolean, и похоже разрешив "протягивание между клиентом - сервером" данных canSweepBetweenCS ты теряешь полученное значение. Данная фишка будет только на 3-х уровневой Аксапте в 2-х должно работать все нормально
Старый 16.01.2003, 17:49   #7  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
остается только порадываться, что своим вопросом я подтолкнул ответ
Слава, привет !
__________________
С уважением, Вячеслав.
Старый 16.01.2003, 19:38   #8  
AKIS is offline
AKIS
Учаснег
Аватар для AKIS
 
392 / 19 (1) ++
Регистрация: 18.08.2002
Адрес: За морями, за океанами
Правильные ответы будут опубликованы завтра, 17 января
__________________
Strictly IMHO & nothing personal
Старый 17.01.2003, 16:25   #9  
AKIS is offline
AKIS
Учаснег
Аватар для AKIS
 
392 / 19 (1) ++
Регистрация: 18.08.2002
Адрес: За морями, за океанами
РЕЗУЛЬТАТЫ ПЕРВОГО ТУРА
Итак,

Как я ни запутывал, как я ни старался - правильный ответ был дан Ну конечно же, Vladislav Yushakov был абсолютно прав! Именно "невключение" переменной в pack и привело к тому, что она "терялась". Можно лишь добавить, что кроме того для исправления ошибки крайне желательно увеличить значение CurrentVersion - иначе Аксапта будет пытаться искать "старое" значение в SysLastValue.

Однако, Vladislav не был первым правильно ответившим! Ибо до него эту идею начал первым развивать slava! (У меня, кстати, зародились поначалу подозрения, что это один и тот же человек - так что вы уж выбирайте пожалуйста ники "поотличительней" )

Таким образом, после длительного совещания жюри в моем лице постановило: Очки распределить так
- Slava - 9
- Vladislav - 8

Еще раз поздравляю!
На этом первый тур считаем закрытым. Вопросы второго размещу в понедельник. Кстати, если у кого-то появились свои вопросы - еще раз МИЛОСТИ ПРОСИМ!!!!

Всем привет!
__________________
Strictly IMHO & nothing personal
Старый 17.01.2003, 16:54   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
:)
Вопрос - ответы вида "Согласен с предыдущим оратором" засчитываются?
Старый 17.01.2003, 17:58   #11  
AKIS is offline
AKIS
Учаснег
Аватар для AKIS
 
392 / 19 (1) ++
Регистрация: 18.08.2002
Адрес: За морями, за океанами
Засчитываются, но очки за них не начисляются

Очки начисляются, только если были высказаны СВОИ мысли - хотя бы и в дополнение к правильному ответу.
__________________
Strictly IMHO & nothing personal
Старый 20.01.2003, 14:10   #12  
Andrew Besedin is offline
Andrew Besedin
Участник
 
119 / 15 (1) ++
Регистрация: 25.01.2002
Уважаемые Господа!
Внесу и я свои 5 центов...

Ошибка УЖ ТОЧНО не в том, что realValue пакуется, а booleanValue - нет. В этом случае просто не будет сохраняться последнне значение - и все. Ошибка могла возникнуть в кривой компилляции класса. В таких случаях обычно помогает инкрементарная компилляция.
Ради хохмы смоделировал ситуацию. Объект создается на сервере, а сама проверка условия - на клиенте. Налицо "протягивание кода сервер -> клиент". Пакуется одно realValue. Однако, все значения возвращаются корректно.

Уважаемый AKIS: дай более детальное описание ошибки.
__________________
Успехов!
Андрей Беседин
Старый 20.01.2003, 14:43   #13  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Пять центов не котируются, ошибка именно во взаимодействии клиент-сервер для наследников RunBase. В соответствии с шаблоном удаленных вызовов Axapta создает два экземпляра - один на клиенте и один на сервере. Пользователь работает с диалоговым окном на клиентской машине. После отработки prompt() для передачи всех параметров класс сериализуется методами pack() и unpack() (должны запаковываться все переменные, определяющие состяние объекта) и полученный контейнер передается серверному представителю RunBase.
Старый 31.01.2003, 13:16   #14  
PlasticinE is offline
PlasticinE
Смотрящий поверх деревьев (Варварский отморозок)
 
243 / 10 (1) +
Регистрация: 06.12.2001
Вот еще про протаскивание данных между клиентом и сервером
<Зохавано мудератором>
за неуплату
__________________
It's a dirty job, but someone's got to do it. So?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как правильно создать в коде X++ новый planned order (ReqPO, ReqTrans) rkorchagin DAX: Программирование 5 02.06.2016 18:00
Как можно инсталировать новый Фонт для Ахапты ? AndrianG DAX: Администрирование 2 18.03.2009 19:33
Новый тип приказа в кадрах TasmanianDevil DAX: Функционал 4 16.12.2005 13:55
Как сделать, чтобы в отчете каждый новый документ печатался с новой страницы? Николай DAX: Функционал 2 09.08.2004 13:22
Новый язык для Аксапта 2.5 Andrew Besedin DAX: Администрирование 3 18.04.2002 19:37

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

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

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