выбор развития клиентского приложения

Обсуждение вопросов по разработке программ в среде продуктов копорации "Progress Software"
MaksimZ
Старожил
Сообщения: 433
Зарегистрирован: 08 авг 2005, 15:24
Откуда: Рыбинск. Ярославская область

выбор развития клиентского приложения

Сообщение MaksimZ » 25 авг 2013, 15:44

Система «Гален» была разработана в 2002 году с использование фреймворка ADM2. Прошло уже более десяти лет. За это десятилетие под операционной системой Windows появилась технология Net, новые операционные системы Windows 7 и 8. Progress заморозил ADM2.
Остро встал вопрос соответствия интерфейса системы современным требованиям, возможности переноса под новые операционные системы Windows 7 и 8.
После анализа возможных решений (одно из требование – реализация интерфейса, как десктоп-приложения), снижение стоимости владения системы (минимальная стоимость развертывания приложения у клиентов) было принято решение разработки новой версии системы "Гален" в архитектуре OpenClient с использование языка С# и технологии WPF для разработки клиентского приложения. Продолжение следует…. (архитектура, бизнес-логика, etc… )

MaksimZ
Старожил
Сообщения: 433
Зарегистрирован: 08 авг 2005, 15:24
Откуда: Рыбинск. Ярославская область

Re: выбор развития клиентского приложения

Сообщение MaksimZ » 26 авг 2013, 13:29

OpenClient может работать в двух режимах :
• Proxy .Net
• Использование OpenClient .NET OpenAPI

Каждый из способов имеет как свои достоинства так и свои недостатки.\
При использовании Proxy .Net необходимо использовать ProxyGen or Batch ProxyGen для генерации dll.

OpenClient. NET OpenAPI это общий набор .NET классов, которые могут быть использованы вместо ProxyGen.
По нашему мнению использование второго способа более предпочтительно. Далее описание библиотеки работы с Appserver….

MaksimZ
Старожил
Сообщения: 433
Зарегистрирован: 08 авг 2005, 15:24
Откуда: Рыбинск. Ярославская область

Re: выбор развития клиентского приложения

Сообщение MaksimZ » 27 авг 2013, 11:30

Для работы OpenClient .NET OpenAPI необходимо реализовать подключение к Appserver из приложения на C# и методы работы с программами запускаемыми на Appserver. Обмен данными между приложением на С# и бизнес-логикой на стороне сервера приложений реализуется с помощью предачи между ними Datasetов и символьных строк. Ниже приведен пример интерфейса, который реализуется в библиотеке подключения к OpenEdge Appserver.
public interface IMedDataProvider
{
DataSet RunPDS(string NameProcedure, ref string inputParam, out string outputParam);

void RunP(string NameProcedure,ref string inputParam,out string outputParam);
bool RunPOk(string NameProcedure, string inputParam);

string RunPOkRes(string NameProcedure, string inputParam);

DataSet RunPDS(string NameProcedure, string inputParam);

DataSet RunPDS(string NameProcedure);
}

MaksimZ
Старожил
Сообщения: 433
Зарегистрирован: 08 авг 2005, 15:24
Откуда: Рыбинск. Ярославская область

Re: выбор развития клиентского приложения

Сообщение MaksimZ » 28 авг 2013, 17:21

Теперь коротко расскажу о бизнес-логике на стороне сервера. Как уже я упомянул ранее, обмен данными происходит с помощью dataset. DataSet представляет из себя набор из трех временных таблиц.
А именно
• Таблица данных, собранная из одной или более таблиц физической базы данных.
• Таблица, описывающая форматы, заголовки, порядок и связи таблицы данных.
• Служебная таблица состоящая из двух полей – ключ: значение

Пример объявления таблицы форматов:

DEF TEMP-TABLE ttLabel
FIELD tFieldName AS CHAR
FIELD tFieldType AS CHAR
FIELD tFieldLabel AS CHAR
FIELD tFieldFormat AS CHAR
FIELD tTableName AS CHAR
FIELD tFieldParentName AS CHAR
FIELD tFieldIndex AS INT INIT 100
INDEX tFiledIndex IS PRIMARY tFieldIndex ASCENDING.


Для формирования dataset используется динамические запросы к базе данных, чтобы как можно меньше затрачивать усилий при написании процедур бизнес-логики.
Пример формирования dataset одного из справочников.
{inc/ttLabel.i
&Init = "'Социальные льготы'"
&IsHierarhyBook = "'NO'"
}

{inc/ViewDynamic.i
&AS_TEMP_TABLE = "YES"
&ttTable = "tts_lgot"
&Table = "s_lgot"
&Field = "kod_l"
&dstable = "dss_lgot"
&Fsort = " by s_lgot.l-kod "
}



{inc/writexml.i
&cfile = "'s_lgot.xml'"
&dsTable = "dss_lgot"}

MaksimZ
Старожил
Сообщения: 433
Зарегистрирован: 08 авг 2005, 15:24
Откуда: Рыбинск. Ярославская область

Re: выбор развития клиентского приложения

Сообщение MaksimZ » 29 авг 2013, 11:57

Теперь коротко о реализации интерфейса клиента. Главной особенность WPF является то, что язык XAML (диалект XML) декларативный язык программирования используется для описания интерфейса. Описав с помощью XAML интерфейс и получив DataSet от сервера приложения , остается только их связать для получения конечного результата.
Если коротко – то в принципе все.

Forerunner
Старожил
Сообщения: 64
Зарегистрирован: 13 сен 2006, 10:53

Re: выбор развития клиентского приложения

Сообщение Forerunner » 06 сен 2013, 16:34

Спасибо за интересный доклад! Кстати если его развернуть, то можно и на конференции выступить как мне кажется :)

Есть пара вопросов:
1) Рассматривался ли вариант с .NET GUI для ABL или же сразу было принято решение писать клиент на native .NET?
2) Чем все-таки OpenClient. NET OpenAPI показался вам более удобным?

3) Какие подводные камни встретились вам в процессе разработки?

MaksimZ
Старожил
Сообщения: 433
Зарегистрирован: 08 авг 2005, 15:24
Откуда: Рыбинск. Ярославская область

Re: выбор развития клиентского приложения

Сообщение MaksimZ » 10 сен 2013, 13:59