|
29.08.2017, 11:49 | #1 |
Участник
|
Цитата:
Что позволяет предположить. а не перепутал ли ты с чем-то? Ок. Расскажи свое видение картины. Только чтобы в нем обязательно был SysOperationSandbox. Просто потому что тема ветки SysOperationSandbox. |
|
29.08.2017, 13:01 | #2 |
Участник
|
Цитата:
Судя по тому, что ты сказал "* класс обработка (в стандарте) не занимается своим состоянием, инициализацией и восстановлением параметров, не имеет доступа к UI. В частности, не может отображать прогресс и не может информировать пользователя о своем состоянии." Для тебя ускользнула разница между SysOperationProgress и RunBaseProgress - то есть ты прочитал использованные термины неаккуратно и додумал их значение. Цитата:
/// <summary> /// The <c>SysOperationSandbox</c> class is an internal class for running synchronous operations /// on client side async sessions /// </summary> См., например, SysOperationServiceController X++: public final void runOperation() { if (executionMode == SysOperationExecutionMode::Synchronous) { SysOperationSandbox::startOperation(this); } else { // route through the base class to call run or // enqueue in batch super(); } } Давай я пофикшу твое утверждение как я его понимаю: Итак, старый добрый RunBase (SysOperationProgress): * одна операция один класс * в одном классе замешаны хранилище данных, маршаллинг данных, диалог, собственно обработка * допускается наследование классов-обработок * предоставляется фреймворк, от которого надо унаследовать свой класс и встроиться в фреймворк * отлаживать надо один класс * класс полностью управляет своим состоянием, инициализацией и восстановлением параметров, отображенем себя в UI. В частности, сам занимается отображением своего прогресса и прочим информированием пользователя о своем состоянии. Новый SysOperation (уже обсужался неоднократно): * несколько формально и синтаксически независимых, но при этом очень сильно семантически связанных классов сервис зависит от контракта, контракт может засисеть от UI билдера, билдер засисит от контракта, контроллер зависит от сервиса - это все декларировано * наследовать от базовых классов не нужно (нет базовых классов) (кроме сервиса и UI builder) * встраивание во фреймворк происходит через атрибуты (и соответственно, через рефлекшн) (кроме сервиса и UI builder) * создание классов-наследников от собственного происходит с трудом (потому что атрибуты не наследуются) Атрибуты наследуются и перекрываются. * [класс обработка (в стандарте) не занимается своим состоянием, инициализацией и восстановлением параметров, не имеет доступа к UI. В частности, не может отображать прогресс и не может информировать пользователя о своем состоянии. Может отображать прогресс (см примеры использования SysOperationProgress). У обработки нет состояния а есть только параметры (контракт), параметры могут перекрыть SysPackable и управлять своей серилизации по сути изменений два: 1. (атрибуты наследуются) вместо наследования - не наследуемые атрибуты 2. вместо все-в-одном - группа очень тесно связанных классов 3. (сервис это обычный класс со статическими методами) вместо обычного класса - обязательно сервис К сожалению, в Ax7 не доделали стандартную обработку прогресса и единственный UI что для RunBase, что для SysOP FW - это бегущие точки. Почему не доделали, вопрос сложный, надо понять над чем client team работала вместо этого и рыться в багтрекере. |
|
|
За это сообщение автора поблагодарили: Logger (3), mazzy (2). |
29.08.2017, 13:45 | #3 |
Участник
|
Макс, спасибо.
Цитата:
Цитата:
И SysOperationSandbox отсутствовал раньше, ТО значит ли это, что раньше синхронные запросов на клиентской стороне нельзя было выполнить? ЕСЛИ синхронные запросов на клиентской стороне без SysOperationSandbox можно было выполнить ТО почему это SysOperationSandbox часть фреймворка, а не надстройка над ним? Цитата:
и судя по статье, ссылку на которую я привел в самом начале, класс предназначен для работы с ним напрямую. собственно в этом и вопрос - почему за информирование пользователя в данном классе отвечает ВЫЗЫВАЮЩАЯ сторона, а не сам класс, как было в старые добрые времена. Да, Спасибо. Не буду придираться к деталям. Спрошу про одно - ты просто перевернул мое восприятие: Цитата:
Давай уточню вопрос. Пусть есть два класса. Bar - потомок Foo. Foo помечен атрибутом. X++: class MyClassAttibute extends Attribute { } class MyMethodAttibute extends Attribute { } [MyClassAttribute] Class Foo { [MyMethodAttribute] void myMethod(); } Class Bar extends Foo { void myMethod(); } Значит ли это что в Аксапте метод класса Bar тоже помечен атрибутом? |
|
29.08.2017, 14:24 | #4 |
Участник
|
Цитата:
В принципе, как анализировать атрибуты оставлено на усмотрение фреймворка и я не вижу в SysOP специальных усилий чтобы их наследовать. Наверное мне пока не попадалась задача перекрыть параметр но при этом не меняя метку. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
29.08.2017, 15:02 | #5 |
Участник
|
Цитата:
Сообщение от mazzy
ЕСЛИ SysOperationSandbox - это часть SysOperation FW для выполнения синхронных запросов на клиентской стороне И SysOperationSandbox отсутствовал раньше, ТО значит ли это, что раньше синхронные запросов на клиентской стороне нельзя было выполнить? ЕСЛИ синхронные запросов на клиентской стороне без SysOperationSandbox можно было выполнить ТО почему это SysOperationSandbox часть фреймворка, а не надстройка над ним? эта часть была не оформлена. В Ax7 ее выделили в статический метод (extract method) и стали использовать снаружи недокументировав. То есть эта штука используется самим sysop fw И предоставляет возможность снаружи вызывает один частный случай (не оборачивая старый способ вызова а наоборот, выделив его). |
|
29.08.2017, 14:42 | #6 |
Участник
|
А могу я все-таки еще один вопрос по твоему тексту?
Цитата:
но почему ты говоришь "выполнять синхронные запросы на клиентской стороне"? ведь сейчас любой, абсолютно любой код X++ выполняется на сервере. что ты имеешь в виду? |
|
29.08.2017, 15:53 | #7 |
Участник
|
Цитата:
Есть еще одна гипотеза, что в связи с тем, что сейчас аксапта считает что если операция выполнялась дольше какого-то времени, она зависла и паникует, то пришлось делать некий Sandbox чтобы делать синхронно с точки зрения вызова, но асинхронно с точки зрения движка. В-общем, надо посмотреть что там внутри. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
29.08.2017, 16:15 | #8 |
Участник
|
вооот.
и возвращаемся к началу темы |
|