Решил попробовать сделать задачку "Экспорт данных" с помощь процесса. Задачка звучит так: выгружать ежедневный отчет о продажах во внешнюю систему. По моему мнению процесс простой (пока без обработки ошибок) и должен выглядеть так: Таймер запускается ежедневно (в 1:00) и запускает скрипт экспорта за прошлые сутки. Сам скрипт делает выборку данных, упаковывает их в протокол и отправляет во внешнюю систему. Вопросы с которыми я столкнулся: 1. Имеет место такой подход автоматизации к этой задаче? 2. В какой зоне ответственности должен выполняться процесс и как его правильно настроить? 3. От имени какого пользователя должен выполняться такой процесс? 4. Как передать в скрипт "плановую" дату запуска процесса. Существует вероятность, что процесс реально не запуститься в плановую дату, а будет запущен позже (например сервер был выключен), поэтому использование DateTime.Now() в скрипте будет неверным. Нужно использовать дату в которую скрипт "планировал" запуститься.
Прокомментирую ваши вопросы: 1. Данный вполне приемлемый и часто используется для подобных задач. Но так же может применяться и обратный подход, когда внешняя система получается необходимые ей данный из ELMA, такой подход может быть более удобен, если у вас например используется отдельная аналитическая система, собирающая данные из разных источников, в таких системах как правило есть мощные инструменты импорта данных, и использовать их будет проще и быстрее. К данным ELMA можно будет обратиться либо через WebAPI, либо напрямую а БД. Какой способ лучше зависит от вашей конкретной ситуации. 2. Процесс с таймером должен выполняться в статической зоне ответственности, с указанием статической должности. 3. Как правило для служебных задач создают отдельного служебного пользователя, в оргструктуре заводится специальная должность "служебный пользователь" (подчиняющаяся например руководителю IT подразделения) и служебному пользователю дается эта должность. В веб интерфейсе настраиваются необходимые для права, лишние забираются). В результате автоматические процессы будут выполняться от имени данного пользователя. 4. Если я не ошибаюсь, то в случае если сервер был выключен, в момент наступления времени старта процесса по таймеру, то процесс позже не запускается, а запустится уже в следующую плановую дату. В качестве даты запуска я бы рекомендовал использовать дату запуска процесса: context.WorkflowInstance.StartDate.
Алексей, большое спасибо Такой подход к архитектуре экспорта данных был выбран мной, чтобы снизить связанность систем (ELMA и внешней системы). Экспорт проходит через сервер очереди RabbitMQ. ELMA ежедневно отправляет в очередь сообщения с данными, а внешняя система их загружает. Таким образом мне как менеджеру удалось разделить задачи по профилям разработчиков (один разработчик выгружает данные, другой разработчик загружает) и две системы получили низкую связанность в архитектуре