Показать сообщение отдельно
Старый 13.12.2016, 11:58   #4  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от mazzy Посмотреть сообщение
pack/unpack используется и при передаче объекта между клиентом/сервером.
видимо ради этого случая и было сказано про RunOn = Server. )))
Постановка задачи в данном случае достаточно простая - организовать обработку данных классом на сервере. Решение с изменением свойства класса было принято разработчиком. Решение это не совсем правильное, так как в данном случае pack/unpack для передачи данных класса между клиентом и сервером использоваться не будет, потому что этим значением свойства в принципе запрещается создание экземпляра класса на клиенте. Кому передавать то?
Для правильной работы такого вот механизма минимизации обменов между клиентской (диалоговой) частью и серверной (рабочей) частью RunBase нужно чтобы класс можно было создать как на клиенте, так и на сервере (т.е. CalledFrom = RunOn), а на главный экземпляр на сервере создавать либо в коде, либо, например, через MenuItem с соответствующим свойством.

Цитата:
Сообщение от DSPIC Посмотреть сообщение
Вариант 3: там где-то метод можно перекрыть, что-то вроде allowSaveLast (либо метод, либо переменная, объявленная на уровне RunBase). Но, если не ошибаюсь, это поломает передачу параметром клиент/серер. Стоит проверить.
Не поломает. Передача клиент-сервер использует promptPack/promptUnpack, а SysLastValue - свои saveLast и loadLast. Если уж совсем не хочется сохранять параметры класса, достаточно перекрыть RunBase.lastValueElementName и в нем возвратить пустую строку (по крайней мере в четверке так).

Цитата:
Сообщение от DSPIC Посмотреть сообщение
Вариант 4: я бы шел классическим путем:
- сохраняем вашу переменную в pack/unpak как положено.
- в диалоге аналогично, стандартно, чтобы инициализировалось переменной.
- в методе main, принудительно вызываем getLast(), после чего обнуляем переменную. Вы же написали parm метод?
- ну и все. getLast() второй раз не вызывается, так задумано. Будущему программисту вы этим явно покажете, что сделано это осознанно. Универсальность класса сохранится - овцы сыты, волки целы.
Ну, собственно, да - классика. Только getLast можно вызвать даже в new, чтобы не тащить эту особенность наружу (хоть и в main).
За это сообщение автора поблагодарили: Diman (1).