На сегодняшний день на рынке существует множество CRM-решений. Но в настоящее время возникла проблема при продаже компанией своего решения, основанного на Microsoft Dynamics CRM, так как существуют ощутимые лицензионные отчисления компании Microsoft за право пользования CRM. Этот факт вытекает в низкую прибыль для компании Manzana Group. Поэтому было решено разработать веб-сервис обработки сборок метаданных для новой CRM системы с открытым исходным кодом компании Manzana Group. У данного веб-сервиса будут три основных бизнес-процесса:
1) Создание сущностей;
2) Обновление сущностей;
3) Удаление сущностей.
Сущность — объект CRM-системы, который хранит различную информацию [1].
Разрабатываемый веб-сервис будет реализован на технологии WCF (Windows Communication Foundation). Данная технология создана для построения распределенных приложений и межпроцессорного взаимодействия [2].
В общем проекте разрабатываемого веб-сервиса содержится 4 подпроекта:
‒ Manzana.Loyalty.Service;
‒ Manzana.Loyalty.Service.Core;
‒ Manzala.Loyalty.Service.DB;
‒ Manzana.Loyalty.Service.SDK.
Подпроект Manzana.Loyalty.Service является WCF-сервисом, на который пользователи будут отправлять запросы в виде XML. По сути, данный подпроект является связующим звеном между пользователем и ядром разработанной программой. Как только приходит запрос на сервис, вызываются операции ядра для метода, указанного в запросе. Запрос обрабатывается, и на сервис приходит ответ, который в итоге и транслируется конечному пользователю.
Подпроект Manzana.Loyalty.Service.Core является ядром всей программы. Все основные операции происходят именно в этом подпроекте. Отправленный запрос из сервиса в ядро валидируется, исполняет конкретные для метода операции и возвращает ответ в сервис.
Подпроект Manzana.Loyalty.Service.DB является проектом для объектов базы данных SQL. В нем хранятся все таблицы, хранимые процедуры, схемы. Поэтому если происходят какие-то изменения в SQL, то они должны быть отражены именно в этом подпроекте.
Подпроект Manzana.Loyalty.Service.SDK является набором средств разработки (software development kit), который позволяет специалистам из других компаний использовать разработанный веб-сервис. В данном подпроекте вся логика скрыта от глаз других разработчиков, кто будет им пользоваться. Открыты будут только публичные методы, которые можно вызывать. Это обусловлено, как безопасностью интеллектуальной собственности, так и чтобы облегчить работу с сервисом сторонним разработчикам, которым не нужно знать все внутренности сервиса, а просто необходим результат.
Алгоритм программы разрабатывался вместе с ведущими разработчиками и архитекторами компании. При первом обращении к веб-сервису происходит два действия:
1) Считывание настроек из файла конфигураций;
2) Считывание метаданных из SQL.
Стоит отметить, что данные действия будут происходить только единожды при запуске сервиса и обращении к нему, так как два метода, реализующие эти действия, находятся в статическом конструкторе веб-сервиса, который вызывается один раз за работу программы.
При первом обращении к сервису, происходит считывание метаданных из SQL, и заполняется пользовательская коллекция для удобного оперирования над объектом:
Рис. 1. Пользовательская коллекция
После создания пользовательской коллекции происходит проверка прав пользователя, от которого пришел запрос. Сначала проверяется наличие пользователя с данным доменом и логином в таблице Users, если есть продолжается проверка, иначе — прекращение обработки запроса.
После происходит проверка является ли данный пользователь системным администратором, если да — то пользователь может совершать любые действия над сущностью, если нет — происходит проверка по таблице PermissionsOfEntity, если у данного пользователя полные права на сущность, которую пришла в запросе, то продолжаем действия, иначе — начинается проверка наличие полей из запроса в таблице PermissionsOnField, если там они есть — то валидация проверки прав прошла успешна, иначе возвращается ошибка.
После того как были занесены данные из SQL в пользовательскую коллекцию, из запроса вытягивается название сущности. Далее в пользовательской коллекции осуществляется поиск Id сущности, у которой название совпадает с названием, переданным в запросе. После этого пользовательская коллекция сортируется по EntityId, чтобы получить актуальные данные только для этой сущности.
Далее происходит валидирование запроса, пришедшего на веб-сервис:
‒ Происходит проверка атрибутов, если атрибуты, указанные в запросе, присутствуют в атрибутах метаданных — то проверка пройдена, если нет — то возвращается ошибка;
‒ Происходит проверка по типу вставки пришедшей сущности. Методами CRM или же через SQL;
‒ Если тип вставки CRM, то происходят операции с сущностью с помощью методов CRM;
‒ Если тип вставки SQL, то генерируется динамический SQL запрос на операцию с сущностью и отправляется в базу данных.
Литература:
- Дмитрий Лобода — Microsoft Dynamics CRM 2016 Шаг за шагом, 2016–177 с
- Что такое Windows Communication Foundation [Электронный ресурс] — URL: https://docs.microsoft.com/ru-ru/dotnet/framework/wcf/whats-wcf (дата обращения 12.05.2018)