Каждый день требуется загрузить в систему курсы валют. Операция простая, но достаточно муторная, плюс ошибки ввода и забывчивость пользователей.
В качестве источника данных по курсам валют можно использовать специальный веб-сервис Центрального Банка России. http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx
Дальше я пробегусь по вариантам автоматизации задачи в Scala.
Epicor Service Connect (ESC)
Сразу скажу, что использование ESC для данной задачи – самое правильное решение, т.к. все делается исключительно с использованием стандартной функциональности, никакой самодеятельности. Правда, далеко не у всех есть в лицензии эта опция.
Лирическое отступление: если у вас есть сопряжение с другими системами, если требуется создавать документы или делать какие-то операции в Скале автоматически, то стоит внимательно посмотреть на функциональность ESC.
Итак. Регистрируем сервис ЦБ командой Add Service Reference. Создаем новое Workflow, которое будет обновлять курсы. Добавляем канал для оповещения по e-mail. Создаем новый Business Event Type, сразу привязывая его к созданному ранее Workflow. Добавляем расписание – Scheduled Events.
Во всей этой цепочке самое сложное – Workflow. Сложность возникает из-за того, что сделать все нужные преобразования в визуальном режиме не получится, приходится разбираться с веселыми языком XSLT. В качестве основы можете использовать мой вариант (Огромное спасибо Дмитрию Осипову за помощь). Он сделан для версии iScala 2.3 SR1. В архиве копия каталога Workflow, плюс шаблоны e-mail.
- Date Request / Get Latest Date – запрос последней даты, на которую объявлены курсы, метод GetLatestDate
- Request Rates / Get Exchange Rates – запрос курсов, метод GetCursOnDateXML
- Update Rates / Exchange Rates In – вычисление производных курсов и обновление курсов
- Send OK / Send Fail – оповещение пользователей об успехе / ошибке
SQL Server Integration services
Предположим, что ESC у вас нет. Тогда есть неплохой вариант – в качестве бесплатного приложения к MS SQL мы получаем службу Integration Services. С помощью этих сервисов можно получить данные с сайта ЦБ и записать в БД. Минус этого решение в том, что придется самому писать данные в таблицу курсов минуя Скалу. Сам я такой вариант не делал, но пример решения, которое подойдет в качестве основы, можно посмотреть здесь.
SQL Server
Следующий вариант – нет ESC, нет Integration Services. Это тоже не тупик. В TSQL есть возможность создавать объекты OLE Automation. Эта возможность отключена по умолчанию, т.к. считается потенциально опасной, для включения нужно выполнить следующий скрипт:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
В качестве такого объекта можно использовать MSXML2.DOMDocument, с помощью него можно скачать XML с курсами с того же сайта ЦБ, разобрать его и сохранить курсы в БД. Такой вариант использовался у одного из клиентов, делалось решение на основе этой дискуссии на sql.ru.