|
06.06.2019, 08:50 | #1 |
Участник
|
Цитата:
разве не может быть некоего переключателя в этом нечто? тогда будет что-то вроде методов showQuery, canRunInBatch... разве не может быть несколько точек расширения? переопределил одну - будет одно, переопределил другую - другое. можно переопределить и обе. почему бы и нет? возвращаясь к исходному вопросу: если мы говорим о друх классах, то клиентский скорее всего нужно выполнить сразу, а серверный по расписанию. Но параметры расписания передаются в первый класс (в клиентский). Нужно еще как то передать расписание серверному классу. если мы говорим об одном классе (какой-то расширенный runBaseBatch), то как правильно расширить его функционал? |
|
06.06.2019, 11:35 | #2 |
Участник
|
Мда... Когда я читал вопрос, мне даже в голову не могло прийти, что речь идет именно о пакетной обработке на стороне клиента. Ну, RunBaseBacth, ну и что? Но пакетник на клиенте - глупо и бессмысленно.
Похоже, здесь ловушка "программизма", как ни странно. Чисто программистский подход без учета самой задачи, которую надо сделать. Если отвлечься от кода, то постановка задачи заключается в следующем 1. Организовать диалог с пользователем 2. Загрузить данные с одного конкретного клиента. Важно! Только один клиент из всех установленных! 3. Выполнить обработку полученных данных Основная проблема, как я понимаю, в п.2. И сам вопрос возник, видимо, по той причине, что эта загрузка выполнятся относительно длительное время. Вот исходя из этого и надо рассуждать Ну, само-то пакетное задание создается на клиенте. Этот самый диалог с пользователем. Но, вот мы его создали. А дальше? Запустили мы пакетную обработку на AOS. Нам надо запустить обработку на клиенте. Вопросы: - Как, каким образом, AOS узнает о том, на каком именно клиенте надо запустить обработку? - Как, каким образом, AOS может запустить обработку именно на нужном клиенте? Как он сможет передать управление этому самому клиенту? Вот если Вы сможете найти ответы на эти вопросы, тогда и станет понятно, как модифицировать RunBaseBacth и стоит ли это вообще делать Единственное, что мне приходит в голову, для передачи управления - это Buisness Connector. Но к модификации RunBaseBatch это отношения не имеет
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
06.06.2019, 11:56 | #3 |
Участник
|
Цитата:
согласен. но у нас действительно есть runsImpersonated. после небольшого копания с ним, я не думаю, что runsImpersonated это правильный способ. Цитата:
Цитата:
и для робота бессмысленно организовывать диалог в виде GUI-окна с кнопками Ok/Cancel и прочими GUI-контролами. если под "диалогом" понимается некий интерфейс и обмен данными без привязки к GUI - полностью согласен. Собственно поэтому в исходном вопросе нет ни пользователя, ни средств общения с ним. В данной задаче предполагается, что входящие параметры как-то получены на клиенте. Да, в данной ветке хотелось бы обсудить шаг 2,3 Цитата:
Цитата:
Да, скорее всего инициатором будет не AOS. (хотелось бы рассмотреть именно этот вариант) Но не вижу причин запрещать AOSу быть инициатором. (этот вариант готов пропустить в этой ветке обсуждения) Цитата:
Но раз появился runsImpersonated, то готов послушать про вариант "клиентские действия после запуска пакетной обработки на AOS". Мне этот способ не нравится, но вдруг я чего не понимаю. Цитата:
Эти вопросы появились после того, как ax_mct начал утверждать что runsImpersonated - правильный способ. В исходном вопросе таких требований не было. Цитата:
Если честно, то совершенно не планировал искать ответы на эти вопросы. Я думал, что можно остаться в существующей парадигме RunBaseBatch, и только добавить действия, которые должны быть выполнены на клиенте. собственно исходный вопрос так и составлен: Цитата:
Сообщение от mazzy
Предположим у нас есть RunBaseBatch.
Он делает что-то тяжелое. Мы конечно же хотим сделать так, чтобы он мог работать на пакетном сервере. Но этот класс забирает данные из какого-нибудь файла, который находится на клиенте. Как и куда правильно вставить действия, которые должны выполняться на клиенте? |
|
06.06.2019, 12:36 | #4 |
Участник
|
Цитата:
Если честно, я ожидал способ когда клиентские действия выполняются ДО создания пакетной обработки. Обращаю внимание, до СОЗДАНИЯ.
Например, начисления бонусов по кобрендинговой программе с применением ЭП:
|
|
06.06.2019, 13:08 | #5 |
Участник
|
Не, нету тут смеси.
процесс похож на одобрение закупок. причем случае совершенно не важно кто, как и где создает данные для проверки. если данные приняты в рамках какого-то импорта, а импорт ожидает call back, то при первом импорте неизбежно появится какой то тикет/идентификатор сессии. на последнем шаге этот тикет надо будет отдать обратно. процесс хорошо и логично разбивается на несколько классов, которые обрабатывают SQL-данные традиционным образом. ======== в исходном вопросе в этой ветке предполагалось, что идентификатор пакетного задания и будет таким тикетом. |
|
06.06.2019, 20:06 | #6 |
Banned
|
Цитата:
Цитата:
смесь клиент-серверной обработки
|
|
06.06.2019, 13:24 | #7 |
Участник
|
Цитата:
Может ли при такой организации клиент иметь доступ к серверному экземпляру задачи и управлять им? - Конечно может Должен ли сервер управлять действиями клиента? - Я считаю, что нет. Разные могут быть ситуации, но всегда инициатором клиент серверного взаимодействия должен быть клиент. Иначе это уже не клиент-серверное взаимодействие |
|
06.06.2019, 19:58 | #8 |
Banned
|
RunBaseBatch.runsImpersonated Method [AX 2012]
https://docs.microsoft.com/en-us/pre...822697(v=ax.60) Глянул в AX2012R3 class rPayBalanceSheetPrint extends OXMLExcelReport_RPay использует runsImpersonated и запускается на клиенте То есть способ как бы стандартный но как правильно отмечено выше несмотря на то что это RunBaseBatch о серверной пакетном исполнении речи быть здесь не может. Такие клиентские RunBaseBatch это либо прямой запуск без расписания либо как полагаю по расписанию на выделенной клиентской машине. Пакетный "сервер" c клиентcкой OS и клиентом AX имеет право быть. При этом этот же клиентский RunBaseBatch может без всяких хитростей запускать серверный код. Последний раз редактировалось ax_mct; 06.06.2019 в 20:01. |
|
07.06.2019, 08:51 | #9 |
Участник
|
Цитата:
Цитата:
Исходный вопрос повторить? Цитата:
Сообщение от mazzy
Предположим у нас есть RunBaseBatch.
Он делает что-то тяжелое. Мы конечно же хотим сделать так, чтобы он мог работать на пакетном сервере. Но этот класс забирает данные из какого-нибудь файла, который находится на клиенте. Как и куда правильно вставить действия, которые должны выполняться на клиенте? |
|
07.06.2019, 18:00 | #10 |
Banned
|
Цитата:
Сообщение от mazzy
Предположим у нас есть RunBaseBatch.
Он делает что-то тяжелое. Мы конечно же хотим сделать так, чтобы он мог работать на пакетном сервере. Но этот класс забирает данные из какого-нибудь файла, который находится на клиенте. Как и куда правильно вставить действия, которые должны выполняться на клиенте? Например Шаг 1. диалог на клиенте, результат работы которого доступность файла или данных для серверного пакетника. Шаг 2. Обработка данных или файла на сервере требующая работы кода на клиенте. Шаг 3. Выполнение неких действий на клиенте Подразумеваемые действия на каком шаге если данная схема корректна? |
|
07.06.2019, 20:37 | #11 |
Участник
|
Насколько я понял Маззи хочет чтобы мы рассмотрели все возможные требования и все возможные варианты дизайна. Подобно тому, как F# если в функцию передать недостаточное количество параметров, возвращает функцию от оставшихся, а не пишет ошибку. Это называется карринг.
Я думаю в такой постановке это очень сложно, надо учесть что бывают разные объемы файлов, разные категории пользователей, разные причины почему что-то надо делать на клиенте, разный временной бюджет. Утрируя: Одно дело когда ты программист сидящий у вендора и тебе через год надо решение для того, чтобы миллионы начинающих пользователей загружали терабайтные фильмы желательно с минимальной нагрузкой на поддержку c докачкой и тротлингом администрируемым из веб-админки. Другое дело, когда ты бородатый сиадмин Вася сидящий на клиенте и тебе рз в месяц надо загрузит 3Кб excel файл на одном компе, причем единственный пользователь - ты сам |
|
|
За это сообщение автора поблагодарили: sukhanchik (4), NetBus (3). |
09.06.2019, 07:29 | #12 |
Участник
|
кому не хватает?
в этом и есть исходный вопрос Цитата:
но также и не хочу запрещать рассматривать все - рассматривайте, коли есть желание. я просто призываю обратить внимание, что я постарался сформулировать минимально необходимые условия в вопросе. я очень рад, что народ в этой ветке пытается "пошевелить" вопрос и переформулировать требования. но пока не вижу продуктивных попыток. Цитата:
в какой постановке? рассматреть ВСЕ возможные требования? конечно очень сложно. поэтому я сформулировал "действия, которые должны быть выполнены на клиенте". причины "почему действия должны быть выполнены на клиенте" не важны, на мой взгляд. Но если хочется - рассмотрите, конечно. расскажите какие требования и как могут изменить мою формулировку. канешно! а также пустой и несуществующий файл. ?! зачем? конечно можно рассматривать и это. но, как я уже говорил, достаточно считать что данные от пользователя уже получены. опять же - см. исходную формулировку вопроса. и снова и снова: ни в коем случае не хочу запрещать обсуждение вопроса диалога с разными категориями пользователей. это очень интересный вопрос. но его лучше обсуждать в отдельной ветке. Цитата:
если ты хочешь сказать что "действия на клиенте" могут вызвать ошибки и тайм-ауты, то да, конечно же надо учитывать возможные ошибки и тайм-ауты, как и для всех остальных действий. предполагать, что действия на клиенте выполняются мгновенно и без ошибок - предельно неверный подход. Цитата:
извини, когда я создавал эту ветку, то не предполагал как-то помочь программистам, сидящим у вендора. Даже если сделать такое предположение, то ответ на исходный вопрос то какой? Последний раз редактировалось mazzy; 09.06.2019 в 07:44. |
|
Теги |
как правильно |
|
|