В общем случае сервис данных должен реализовывать интерфейс ICSSoft.STORMNET.Business.IDataService.
Реализация произвольного сервиса данных
Если необходимо реализовать собственный сервис данных, следует учитывать следующее:
- Необходимо учитывать атрибуты хранения. Установку этих атрибутов можно проверить методами Information: GetAssemblyStorageName, GetClassStorageName, GetPropertyStorageName.
- Классы, атрибуты, мастера, детейлы могут быть нехранимыми, что указывается NotStoredAttribute. Метод Information.GetStorablePropertyNames возвращает список хранимых атрибутов.
- Сначала всё вычитывается в соответствии с порядком, указанным атрибутом LoadingOrderAttribute, затем, всё остальное. Метод Information.GetLoadingOrder возвращает порядок.
- В атрибутах, мастерах могут не допускаться пустые значения, что указывается атрибутом NotNullAttribute.
С целью оптимизации, нужно обновлять только изменённые атрибуты Information.GetAlteredProperyNames.
Реализация сервиса данных для реляционного хранилища
Если требуется реализовать сервис данных для реляционного хранилища, рекомендуется унаследоваться от готовых сервисов данных Flexberry Platform, в частности, от общего предка реляционных сервис данных SQLDataService, либо ODBCDataService. Затем, согласно особенностей хранилища, которое планируется использовать, необходимо соответствующим образом перегрузить методы.
Ниже приводится пример сервиса данных, выполняющего работу с Microsoft SQL Server напрямую, через SQLClient:
public class MSSQLDataService:ICSSoft.STORMNET.Business.SQLDataService
{
public override System.Data.IDbConnection GetConnection()
{
return new System.Data.SqlClient.SqlConnection(this.CustomizationString);
}
public override string GetIfNullExpression(params string[] identifiers)
{
string result = identifiers[identifiers.Length-1];
for (int i= identifiers.Length-2;i>=0;i--)
result = string.Concat("ISNULL(",identifiers[i],", ",result,")");
return result;
}
}
В этом примере переопределены всего два метода: один теперь выполняет подсоединение к источнику напрямую, другой учитывает специфику указания в запросы функции ISNULL.