Показать сообщение отдельно
Старый 30.05.2019, 00:16   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Предположим у нас есть RunBaseBatch.
Он делает что-то тяжелое. Мы конечно же хотим сделать так, чтобы он мог работать на пакетном сервере. Но этот класс забирает данные из какого-нибудь файла, который находится на клиенте. Как и куда правильно вставить действия, которые должны выполняться на клиенте?
Я лично в свое время для AX2009 делал условно базовый класс импорта из Excel, который при правильном использовании:
  • запускался на сервере (main)
  • переключался на клиента для отображения диалога (prompt) при этом позволял не только выбрать файл Excel, но и нужный лист в нем
  • потом переключался обратно на сервер (run)
  • в определенный момент создавал свою копию на клиенте по аналогии с тем, как это делает RunBase в prompt()
  • на клиенте начитывал данные из файла и сохранял их в контейнер
  • возвращался на сервер, получал контейнер с данными и начинал собственно их обработку, валидацию, вставку, обновление, вот это вот всё
При этом в классах-наследниках требовалось реализовать логику подбора листа по умолчанию, уточнения, откуда на листе считывать данные, и обработки считанных данных уже на сервере. Таким образом, клиент-серверное взаимодействие сводилось к минимуму. У коллег видел реализации импортов, которые просто через специально обученный клиентский класс в один присест получали на сервере данные из клиентского файла в виде опять же контейнера и дальше уже парсили их на сервере, но без интерактива в диалоге выбора файла.
Разумеется, в AX2012 появляются свои заморочки с вызовом клиентского кода, инициированным с сервера, но вроде все решается при желании. А предложенный подход с кастомизированной формочкой - это вроде как раз то, что приходится делать в D365O для импортов из Excel: брать клиентский файл, передавать его во временный каталог на АОСе и там уже с ним работать.