19.03.2019, 16:21 | #1 |
Участник
|
Значение параметра в диалоге берётся из кэша
Есть класс, кастомный, наследник RunBaseBatch
Вызывается с формы, в зависимости от args.record() создаётся нужный наследник, наследнику присваивается значение номер документа (из args.record()), с которым надо работать, далее открывается диалог. Проблема: после того, как класс отработает в первый раз, в ините подставляется правильный номер документа (из args.record()), но в диалоге постоянно отображается номер документа с которым отработало в первый раз. Удаляешь данные из SysLastValue - опять один раз работает. Т.е. такое ощущение, что после первого запуска значение параметра кэшируется и далее в диалоге используется только оно, а из инита значение не передаётся. Что я делаю не так? Функция main выполняется на сервере. Dynamics 2012 R3 |
|
19.03.2019, 17:13 | #2 |
Участник
|
Так и должно быть
Методы pack/unpack именно для этого и предназначены. Это список значений, которые будут кешироваться. Точнее, эти методы выполняют 3 функции 1. Список значений, которые подставляются как значения по умолчанию при повторном запуске класса. Сохраняют значения, которые были использованы при последнем запуске 2. Список значений, используемый при выполнении пакетных заданий 3. Список значений, которые передаются между экземплярами класса на клиенте и на сервере. Если сам класс запускается на сервере, но использует диалог с пользователем, который работает на клиенте Ну, еще эти же методы можно использовать для вызова класса из-вне. Из других классов. Но этим, как правило, не пользуются для таких задач Именно потому, что использование этих методов такое неоднозначное и возникает ряд проблем В данном случае, чтобы подавить выполнение п.1 (кеширование ранее использованных значений) надо в методе main() после инициализации экземпляра класса, но до вызова методов, которые берут значения из args() сделать вызов метода MyClass.getLast(); "В никуда" сделать этот вызов. Этот метод, во-первых, прочитает данные из кеша, а, во-вторых, поставит признак, что данные уже прочитаны. Если после вызова этого метода Вы переопределите переменные, то повторный вызов этого же метода внутри prompt() уже не возьмет значение из кеша PS: Метод initParmDefault() вызывается только в том случае, если метод unpack() вернет false. Т.е. если нет данных в кеше. При первом вызове
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: NetBus (3), mikki_messer (1), YoungPadawan (1). |
19.03.2019, 17:42 | #3 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Так и должно быть
Методы pack/unpack именно для этого и предназначены. Это список значений, которые будут кешироваться. Точнее, эти методы выполняют 3 функции 1. Список значений, которые подставляются как значения по умолчанию при повторном запуске класса. Сохраняют значения, которые были использованы при последнем запуске 2. Список значений, используемый при выполнении пакетных заданий 3. Список значений, которые передаются между экземплярами класса на клиенте и на сервере. Если сам класс запускается на сервере, но использует диалог с пользователем, который работает на клиенте Ну, еще эти же методы можно использовать для вызова класса из-вне. Из других классов. Но этим, как правило, не пользуются для таких задач Именно потому, что использование этих методов такое неоднозначное и возникает ряд проблем В данном случае, чтобы подавить выполнение п.1 (кеширование ранее использованных значений) надо в методе main() после инициализации экземпляра класса, но до вызова методов, которые берут значения из args() сделать вызов метода MyClass.getLast(); "В никуда" сделать этот вызов. Этот метод, во-первых, прочитает данные из кеша, а, во-вторых, поставит признак, что данные уже прочитаны. Если после вызова этого метода Вы переопределите переменные, то повторный вызов этого же метода внутри prompt() уже не возьмет значение из кеша PS: Метод initParmDefault() вызывается только в том случае, если метод unpack() вернет false. Т.е. если нет данных в кеше. При первом вызове |
|
Теги |
кэширование |
|
|