|
![]() |
#1 |
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. |
|
![]() |
#2 |
Участник
|
Цитата:
Цитата:
Исходный вопрос повторить? Цитата:
Сообщение от mazzy
![]() Предположим у нас есть RunBaseBatch.
Он делает что-то тяжелое. Мы конечно же хотим сделать так, чтобы он мог работать на пакетном сервере. Но этот класс забирает данные из какого-нибудь файла, который находится на клиенте. Как и куда правильно вставить действия, которые должны выполняться на клиенте? |
|
![]() |
#3 |
Banned
|
Цитата:
Сообщение от mazzy
![]() Предположим у нас есть RunBaseBatch.
Он делает что-то тяжелое. Мы конечно же хотим сделать так, чтобы он мог работать на пакетном сервере. Но этот класс забирает данные из какого-нибудь файла, который находится на клиенте. Как и куда правильно вставить действия, которые должны выполняться на клиенте? Например Шаг 1. диалог на клиенте, результат работы которого доступность файла или данных для серверного пакетника. Шаг 2. Обработка данных или файла на сервере требующая работы кода на клиенте. Шаг 3. Выполнение неких действий на клиенте Подразумеваемые действия на каком шаге если данная схема корректна? |
|
![]() |
#4 |
Участник
|
Насколько я понял Маззи хочет чтобы мы рассмотрели все возможные требования и все возможные варианты дизайна. Подобно тому, как F# если в функцию передать недостаточное количество параметров, возвращает функцию от оставшихся, а не пишет ошибку. Это называется карринг.
Я думаю в такой постановке это очень сложно, надо учесть что бывают разные объемы файлов, разные категории пользователей, разные причины почему что-то надо делать на клиенте, разный временной бюджет. Утрируя: Одно дело когда ты программист сидящий у вендора и тебе через год надо решение для того, чтобы миллионы начинающих пользователей загружали терабайтные фильмы желательно с минимальной нагрузкой на поддержку c докачкой и тротлингом администрируемым из веб-админки. Другое дело, когда ты бородатый сиадмин Вася сидящий на клиенте и тебе рз в месяц надо загрузит 3Кб excel файл на одном компе, причем единственный пользователь - ты сам |
|
|
За это сообщение автора поблагодарили: sukhanchik (4), NetBus (3). |
![]() |
#5 |
Участник
|
кому не хватает?
в этом и есть исходный вопрос ![]() Цитата:
но также и не хочу запрещать рассматривать все - рассматривайте, коли есть желание. я просто призываю обратить внимание, что я постарался сформулировать минимально необходимые условия в вопросе. я очень рад, что народ в этой ветке пытается "пошевелить" вопрос и переформулировать требования. но пока не вижу продуктивных попыток. Цитата:
в какой постановке? рассматреть ВСЕ возможные требования? конечно очень сложно. поэтому я сформулировал "действия, которые должны быть выполнены на клиенте". причины "почему действия должны быть выполнены на клиенте" не важны, на мой взгляд. Но если хочется - рассмотрите, конечно. расскажите какие требования и как могут изменить мою формулировку. канешно! а также пустой и несуществующий файл. ?! зачем? конечно можно рассматривать и это. но, как я уже говорил, достаточно считать что данные от пользователя уже получены. опять же - см. исходную формулировку вопроса. и снова и снова: ни в коем случае не хочу запрещать обсуждение вопроса диалога с разными категориями пользователей. это очень интересный вопрос. но его лучше обсуждать в отдельной ветке. Цитата:
если ты хочешь сказать что "действия на клиенте" могут вызвать ошибки и тайм-ауты, то да, конечно же надо учитывать возможные ошибки и тайм-ауты, как и для всех остальных действий. предполагать, что действия на клиенте выполняются мгновенно и без ошибок - предельно неверный подход. Цитата:
извини, когда я создавал эту ветку, то не предполагал как-то помочь программистам, сидящим у вендора. ![]() Даже если сделать такое предположение, то ответ на исходный вопрос то какой? Последний раз редактировалось mazzy; 09.06.2019 в 07:44. |
|
![]() |
#6 |
Banned
|
Цитата:
Цитата:
Шаг 1. диалог на клиенте, результат работы которого доступность файла или данных для серверного пакетника.
Шаг 2. Обработка данных или файла на сервере требующая работы кода на клиенте. Шаг 3. Выполнение неких действий на клиенте Какая бы тяжелая обработка ни была, конвертация файла который может быть прочитан только на клиенте, из, к примеру .xslx или .dat, в читаемый для сервера вид (json, xml, запись в DB) не займет неприемлимое время. Где именно разместить данный код в RunBaseBatch дело десятое и во время кодирования очевидное. Пусть будет getFromDialog (хотя я не держу в голове что там и где до тех пор пока не начинаю кодировать). Если очень хочется UX то можно там же на клиенте вызывать асинхронный код который принимает некий Ref и занимается трансформацией данных в читабельное для сервера . RunBaseBatch на сервере этот Ref использует во время пакетного запуска. Я обычно очень мучаюсь при выборе оптимального решения но вот здесь вариантов то в принципе и нет. То есть они есть но при возможности все делать на Шаг 1 рассматривать awkward варианты просто не смысла. Правильно то что стандартно для приложения/фрэймворка. В нашем случае у нас просто расширенный случай getFromDialog. |
|
![]() |
#7 |
Участник
|
Цитата:
Тут возникает вопрос, почему именно, надо делать на пакетном сервере. Если, чтобы сделать расписание (в полночь, когда никто не работает, должны ездить фуры и загружать наш пакетный сервер) то логично его настроить один раз и не давать менять простым пользователям. Соответственно это должно быть одно пакетное задание с одним расписанием которое будет просыпаться, читать из очереди файлы и импортировать (для распараллеливания использовать таски). А простые пользователи пользуются отдельным интерфейсом, чтобы положить файлы в очередь и утром дождаться уведомления. Этот интерфейс должен быть отдельным ранбейзом или формой (или просто сетевой папкой). Как-то так. У другого сценария - другие решения. Цитата:
причины "почему действия должны быть выполнены на клиенте" не важны, на мой взгляд.
Цитата:
Но если хочется - рассмотрите, конечно. расскажите какие требования и как могут изменить мою формулировку.
Цитата:
канешно!
а также пустой и несуществующий файл. Цитата:
и снова и снова: ни в коем случае не хочу запрещать обсуждение вопроса диалога с разными категориями пользователей. это очень интересный вопрос. но его лучше обсуждать в отдельной ветке.
Цитата:
зачем? ты о real time системах? на java?
Цитата:
и? как это поможет обсуждению среди профессионалов на публичном форуме?!
извини, когда я создавал эту ветку, то не предполагал как-то помочь программистам, сидящим у вендора. ![]() Цитата:
Даже если сделать такое предположение, то ответ на исходный вопрос то какой?
Мое глубокое убеждение, что любой дизайн есть продукт компромиссов. Что именно приносить в жертву чему - зависит от конкретных требований. Если требования описаны недостаточно полно, пробелы заполнятся исходя из того, что тот, кто интерпретирует требования посчитает наиболее вероятным. P.S. На практике до Dyn365FO я чаще всего встречался с кодом, который не читал с клиента файл, а просто надеялся, что пользователь введет путь к сетевой папке. Т.е. задачу старались обойти. В одном месте видел свой специализированный мультитредный сервер закачек, когда я спросил, почему не воспользовались сетевой папкой, ответили, что не хотят администрировать доступ к общей папке. |
|
|
За это сообщение автора поблагодарили: ax_mct (3). |
Теги |
как правильно |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|