Мульти-клиент-ЭКО пример применения.
приложение мы собираемся построить, может быть использован для захвата рабочего времени и перерывы в течение рабочего времени. Работоспособность может быть захвачен с несколькими клиентами и сервером приложений обеспечивает представление всех данных, полученных.
[клиенту]
ссильные>
Вы начинаете с создания ЭКО winform приложения. Это приложение должно быть клиент. Я назвал его WorkTimeClient.
Вы должны иметь UML-классы в пакете, так что вы можете добавить их позже на сервер приложений.

и создать следующую модель:р><р класса="step_content ">
р><р класса="step_content ">Время работы и как специализированные классы и стили. Один worktime может иметь несколько breaktimes.
на операции calcTotal возвращает временной промежуток время сокращается на накопленные интервалы в breaktimes. В результате calctotal находится в атрибуте дифф класса рабочего. Убедитесь, что вы изменить классы в зависимости от следующих фрагментов кода:
в тегфункция timestartend.calcTotal(): сроки
и начинается
результат := период(Самовыдвижение.endtime-самообслуживание.свойство starttime)
В конце
с функцией учета рабочего времени.calcTotal(): период с
вар
В ИБ IbreaktimeList
я: число
и начинается
ИБ= get_breaktime
для меня := 0 в IB.Счет-1 не начинается
Самовывоз.дифф := Собственн.дифф - ПБ.Пункт[я].calcTotal
В конце
В конце функции как.get_diff: сроки
и начинается
// если добавить пользовательский код здесь, пожалуйста, удалите [EcoAutoMaintained] атрибут
при // от отеля декларации в интерфейсе раздел
В результате := период(Самовыдвижение._endtime-самообслуживание._starttime)
В конце функции учета рабочего времени.get_diff: сроки
и начинается
// если добавить пользовательский код здесь, пожалуйста, удалите [EcoAutoMaintained] атрибут
при // от отеля декларации в интерфейсе раздел
В результате := период(Самовыдвижение._endtime - самообслуживание._starttime)
В конце Цитата>р><р класса="step_content ">теперь скомпилируйте приложение, перейти в конструктор ecospace и добавить пакет в ecospace. Поставил компонент PersistenceMapperXml на ecospace, так что вы можете разработать клиент без серверной части до сих пор. Задайте имя persistencemapper в data.xml или как там Suites вы хорошо.
и теперь переключаться на winform и создать интерфейс, похожий на этот:
и добавить два выражения ручками и валюты диспетчере ручками для сетки данных.
для того, чтобы у последней строке выбранного элемента управления datagrid, поместите следующий код в событие сетки данных краской:р><р класса="step_content ">тегпроцедура TWinForm.DataGrid1_Paint(отправителя: система.Объект е: системы.Окна.Форм.Объект painteventargs)
и начинается
DataGrid1.Восстановления команда bindingcontext[dataGrid1.Источник
В dataGrid1.DataMember].Позиция := ehWorkTime.Метод getlist.Граф
В cmhWorktime.Позиция := ehWorkTime.Метод getlist.Считать
В конце Цитата>р><р класса="step_content ">там, вероятно, могли бы быть умнее места, где его поставить – но я не знаю их -)
но пожалуйста, дайте мне знать в случае, если вы знаете.
для одного клиента тестового приложения вы можете просто присвоить Обновление базы данных EcoAction, чтобы обновить БД кнопка, в то время как в Мульти-клиент настройки необходимо следующий код:
в тегвар
с: IChange
и начинается
EcoSpace.PersistenceService.RetrieveChanges
для C в EcoSpace.PersistenceService.Метод getchanges делать
если с.IsDirectConflict затем C.Действие := ChangeActionKind.Отбросить остальное.
и сбыл.Действие := ChangeActionKind.Сохранить
В EcoSpace.PersistenceService.ApplyAllChanges
В конце Цитата>р><р класса="step_content "> этот код получает через службу EcoSpace сохранением всех сохраненных изменений. Это может в мульти клиент случиться, что кто-то изменил данные, которые у вас уже были изменения в локальном кэше ecospace. Служба настойчивость дает вам возможность справиться с возникающими конфликтами, если это так. В нашем случае (см ошибка) это не должно случиться.
и тем не менее после того, как вы извлекли изменений вы идете через ... в петле над ними, чтобы проверить, если у вас есть конфликт или нет. Вы должны установить для каждого интерфейса IChange в метод getchanges-список действий, которые будут использоваться при процедуре ApplyAllChanges называется.
если вы закончили клиента таким образом единственное, что осталось, чтобы включить его для клиент-сервера для изменения persistencemapper. Нам нужен компонент PersistenceMapperClient на нашем ECOSpace, так как это не на ЭКО составляющей палитры по умолчанию. Мы должны добавить его следующим образом:- щелкните правой кнопкой мыши на панели инструментов и выберите “установить .Net компонентов” из всплывающего меню.
Р><Р класса="step_content ">
и перетащите его на категории.
и удалить PersistenceMapperXML клиента от ecospace и падение PersistenceMapperClient на нем. Установите свойство URL-адрес С “TCP://имя localhost:8000/TestServer1” – так у нас будет сервер клиент работает на локальном компьютере до развертывания<.див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ">див> <див класс="блок-внутренний"> <див класс="содержание"> див> <див класс="блок-дна">див> див> див> див><див класс='embed_block_1'><див>див>див>
сохранить проект и закрыть его или оставить его открытым, если вы хотите иметь клиентом и сервером в группе проекта. Так как он не будет работать пока у нас есть наш сервер развитых и работает, потому что гнездо peristencemapperclient пытается подключиться к не зарегистрированы.р><р класса="step_content ">[серверной части]
ссильные>
для создания нового проекта ЭКО winform. Я назвал его WorkTimeServer.
и добавить работоспособность классов пакета и упорством картографа поставщика:р><р класса="step_content ">
р><р класса="step_content ">в нашем примере мы использовать InterBase с БПР. Поэтому падение PersistenceMapperBdp и компонент BdpConnection на PersistanceMapperProvider ECOSpace. Настроить PersistenceMapperBDP для InterBase и настроить подключение BDPConnection по вашей локальной среде. Вы просто должны создать пустую базу данных. Таблицы будут созданы позже через провайдером персистентности картографа.
как перейти на ecospace (не persistencemapperprovider но один подключен к winform) и выберите см пакет из доступных пакетов:р><р класса="step_content ">
как скомпилировать проект и выбрать EcoSpaceType быть использован для сохранения картографа поставщика. (Нажмите на поверхности настойчивость поставщиком картографии и выберите его из выпадающего списка в инспекторе объектов).
вы теперь можете нажать на кнопку Создать схему внизу поставщика EcoPersistanceMapper. Результат должен выглядеть следующим образом:

вы теперь должны раскомментировать код для удаленного взаимодействия в сохранении картографа поставщика. Не забудьте раскомментировать декларация порядок и добавить требуемые реализация использует-заявление как указано в комментариях.р><р класса="step_content "><Цитата>// пример кода для регистрации поставщика в качестве сервера в использовании
// бинарные форматирования на канал TCP.
при// добавьте следующие строки в ваш уровень реализация использует-заявление, когда раскомментировав кода
// системы.Время выполнения.Сериализации.Форматеры, Системы.Время выполнения.Удаленные Системы.Время выполнения.Удаленное взаимодействие.Каналы, Системы.Время выполнения.Удаленное взаимодействие.Каналы.Процедуры протокола TCP TEcoPersistenceMapperProvider класс.RegisterTcpServer(порт: целое число)
вар
В поставщик: BinaryServerFormatterSinkProvider
и реквизит: класс idictionary
с тян: класс tcpchannel
для начала<поставщик br /> В := BinaryServerFormatterSinkProvider.Создать <поставщик бр />.TypeFilterLevel := TypeFilterLevel.Полный // необходимых для сериализации в
реквизит := хеш.Создавать
реквизит ["порт"] : = порт
есть тян := класс tcpchannel.Создать(реквизит, Нил, поставщика)
В ChannelServices.RegisterChannel(тян)
В remotingconfiguration, настраивающему.RegisterWellKnownServiceType(
В вызова typeof(TEcoPersistenceMapperProvider),
В 'TestServer1',
В WellKnownObjectMode.Синглтон)
В конце Цитата>р><р класса="step_content ">для завершения настройки провайдером Персистентности Картографа установить SyncActive атрибута значение True. Вы также можете увеличить значение MaxOpenConnections атрибуты и MaxPoolConnections если у вас много клиентов, подключающихся к серверу<.br />А теперь добавьте PersistanceMapperClient к Ecospace. Установите свойство URL для протокола TCP://имя localhost:8000/TestServer1 или если вы изменили порядок RegisterTCPServer на значения есть.
мы должны называть компонентом RegisterTCPServer до PersistenceMapperClient инициализируется. Для этого измените конструктор EcoSpace следующим образом:р><р класса="step_content ">тег
конструктор TWorkTimeServerEcoSpace.Создавать
начинается
наследуется создавать
EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer(8000)
В метод initializecomponent
с // todo: добавьте любой код конструктора здесь
В конце Цитата>р><р класса="step_content ">серверная часть теперь уже полностью функционален. Чтобы добавить представление данных, поступающих от наших клиентов мы создаем следующем сайте:

В Таймер событий tick код настойчивость сервисный код уже известен от клиента:
в тегпроцедура TWinForm.Timer1_Tick(отправителя: система.Объект е: системы.Eventargs В) И
вар
с: IChange
и начинается
EcoSpace.PersistenceService.RetrieveChanges
для C в EcoSpace.PersistenceService.Метод getchanges делать
если с.IsDirectConflict затем C.Действие := ChangeActionKind.Отбросить остальное.
и сбыл.Действие := ChangeActionKind.Сохранить
В EcoSpace.PersistenceService.ApplyAllChanges
В конце Цитата>р><р класса="step_content ">установка таймера Enabled значение True. Сохраните и запустите проект и отсоедините его от Дельф.р><р класса="step_content ">
р><р класса="step_content ">открыть проект клиента снова. Запустите клиент проекта отсоединить его и запустить второй клиент. Изменить имя пользователя в второй клиент и эксперимент. Это должно работать, и это еще очень легко достичь - Eco может сделать тебя счастливой.
пожалуйста, дайте мне знать, если я пропустил некоторые важные шаги для понимания, как это сделать или если я сделал что-то не лучшая практика, как. Я изменю статью, то согласно вашей обратной связи.р><р класса="step_content ">- в пример код сервера и клиента можно найти здесь.
р><дел стиль= \ ясно:оба поплавка:нет'>дел><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная див>
Мульти-клиент-ЭКО пример применения.
Мульти-клиент-ЭКО пример применения. : Несколько тысяч советов, которые сделают вашу жизнь проще.
приложение мы собираемся построить, может быть использован для захвата рабочего времени и перерывы в течение рабочего времени. Работоспособность может быть захвачен с несколькими клиентами и сервером приложений обеспечивает представление всех данных, полученных.
[клиенту]
ссильные>
Вы начинаете с создания ЭКО winform приложения. Это приложение должно быть клиент. Я назвал его WorkTimeClient.
Вы должны иметь UML-классы в пакете, так что вы можете добавить их позже на сервер приложений.

и создать следующую модель:р><р класса="step_content ">
р><р класса="step_content ">Время работы и как специализированные классы и стили. Один worktime может иметь несколько breaktimes.
на операции calcTotal возвращает временной промежуток время сокращается на накопленные интервалы в breaktimes. В результате calctotal находится в атрибуте дифф класса рабочего. Убедитесь, что вы изменить классы в зависимости от следующих фрагментов кода:
в тегфункция timestartend.calcTotal(): сроки
и начинается
результат := период(Самовыдвижение.endtime-самообслуживание.свойство starttime)
В конце
с функцией учета рабочего времени.calcTotal(): период с
вар
В ИБ IbreaktimeList
я: число
и начинается
ИБ= get_breaktime
для меня := 0 в IB.Счет-1 не начинается
Самовывоз.дифф := Собственн.дифф - ПБ.Пункт[я].calcTotal
В конце
В конце функции как.get_diff: сроки
и начинается
// если добавить пользовательский код здесь, пожалуйста, удалите [EcoAutoMaintained] атрибут
при // от отеля декларации в интерфейсе раздел
В результате := период(Самовыдвижение._endtime-самообслуживание._starttime)
В конце функции учета рабочего времени.get_diff: сроки
и начинается
// если добавить пользовательский код здесь, пожалуйста, удалите [EcoAutoMaintained] атрибут
при // от отеля декларации в интерфейсе раздел
В результате := период(Самовыдвижение._endtime - самообслуживание._starttime)
В конце Цитата>р><р класса="step_content ">теперь скомпилируйте приложение, перейти в конструктор ecospace и добавить пакет в ecospace. Поставил компонент PersistenceMapperXml на ecospace, так что вы можете разработать клиент без серверной части до сих пор. Задайте имя persistencemapper в data.xml или как там Suites вы хорошо.
и теперь переключаться на winform и создать интерфейс, похожий на этот:
и добавить два выражения ручками и валюты диспетчере ручками для сетки данных.
для того, чтобы у последней строке выбранного элемента управления datagrid, поместите следующий код в событие сетки данных краской:р><р класса="step_content ">тегпроцедура TWinForm.DataGrid1_Paint(отправителя: система.Объект е: системы.Окна.Форм.Объект painteventargs)
и начинается
DataGrid1.Восстановления команда bindingcontext[dataGrid1.Источник
В dataGrid1.DataMember].Позиция := ehWorkTime.Метод getlist.Граф
В cmhWorktime.Позиция := ehWorkTime.Метод getlist.Считать
В конце Цитата>р><р класса="step_content ">там, вероятно, могли бы быть умнее места, где его поставить – но я не знаю их -)
но пожалуйста, дайте мне знать в случае, если вы знаете.
для одного клиента тестового приложения вы можете просто присвоить Обновление базы данных EcoAction, чтобы обновить БД кнопка, в то время как в Мульти-клиент настройки необходимо следующий код:
в тегвар
с: IChange
и начинается
EcoSpace.PersistenceService.RetrieveChanges
для C в EcoSpace.PersistenceService.Метод getchanges делать
если с.IsDirectConflict затем C.Действие := ChangeActionKind.Отбросить остальное.
и сбыл.Действие := ChangeActionKind.Сохранить
В EcoSpace.PersistenceService.ApplyAllChanges
В конце Цитата>р><р класса="step_content "> этот код получает через службу EcoSpace сохранением всех сохраненных изменений. Это может в мульти клиент случиться, что кто-то изменил данные, которые у вас уже были изменения в локальном кэше ecospace. Служба настойчивость дает вам возможность справиться с возникающими конфликтами, если это так. В нашем случае (см ошибка) это не должно случиться.
и тем не менее после того, как вы извлекли изменений вы идете через ... в петле над ними, чтобы проверить, если у вас есть конфликт или нет. Вы должны установить для каждого интерфейса IChange в метод getchanges-список действий, которые будут использоваться при процедуре ApplyAllChanges называется.
если вы закончили клиента таким образом единственное, что осталось, чтобы включить его для клиент-сервера для изменения persistencemapper. Нам нужен компонент PersistenceMapperClient на нашем ECOSpace, так как это не на ЭКО составляющей палитры по умолчанию. Мы должны добавить его следующим образом:- щелкните правой кнопкой мыши на панели инструментов и выберите “установить .Net компонентов” из всплывающего меню.
Р><Р класса="step_content ">
и перетащите его на категории.
и удалить PersistenceMapperXML клиента от ecospace и падение PersistenceMapperClient на нем. Установите свойство URL-адрес С “TCP://имя localhost:8000/TestServer1” – так у нас будет сервер клиент работает на локальном компьютере до развертывания<.див класс='embed_block_0'> <див ИД="блок-google_admanager-1" класса="блок блок-google_admanager области-другие области-количество-1 Количество-1 блок-Без названия "> <див класс="блок-топ">див> <див класс="блок-внутренний"> <див класс="содержание"> див> <див класс="блок-дна">див> див> див> див><див класс='embed_block_1'><див>див>див>
сохранить проект и закрыть его или оставить его открытым, если вы хотите иметь клиентом и сервером в группе проекта. Так как он не будет работать пока у нас есть наш сервер развитых и работает, потому что гнездо peristencemapperclient пытается подключиться к не зарегистрированы.р><р класса="step_content ">[серверной части]
ссильные>
для создания нового проекта ЭКО winform. Я назвал его WorkTimeServer.
и добавить работоспособность классов пакета и упорством картографа поставщика:р><р класса="step_content ">
р><р класса="step_content ">в нашем примере мы использовать InterBase с БПР. Поэтому падение PersistenceMapperBdp и компонент BdpConnection на PersistanceMapperProvider ECOSpace. Настроить PersistenceMapperBDP для InterBase и настроить подключение BDPConnection по вашей локальной среде. Вы просто должны создать пустую базу данных. Таблицы будут созданы позже через провайдером персистентности картографа.
как перейти на ecospace (не persistencemapperprovider но один подключен к winform) и выберите см пакет из доступных пакетов:р><р класса="step_content ">
как скомпилировать проект и выбрать EcoSpaceType быть использован для сохранения картографа поставщика. (Нажмите на поверхности настойчивость поставщиком картографии и выберите его из выпадающего списка в инспекторе объектов).
вы теперь можете нажать на кнопку Создать схему внизу поставщика EcoPersistanceMapper. Результат должен выглядеть следующим образом:

вы теперь должны раскомментировать код для удаленного взаимодействия в сохранении картографа поставщика. Не забудьте раскомментировать декларация порядок и добавить требуемые реализация использует-заявление как указано в комментариях.р><р класса="step_content "><Цитата>// пример кода для регистрации поставщика в качестве сервера в использовании
// бинарные форматирования на канал TCP.
при// добавьте следующие строки в ваш уровень реализация использует-заявление, когда раскомментировав кода
// системы.Время выполнения.Сериализации.Форматеры, Системы.Время выполнения.Удаленные Системы.Время выполнения.Удаленное взаимодействие.Каналы, Системы.Время выполнения.Удаленное взаимодействие.Каналы.Процедуры протокола TCP TEcoPersistenceMapperProvider класс.RegisterTcpServer(порт: целое число)
вар
В поставщик: BinaryServerFormatterSinkProvider
и реквизит: класс idictionary
с тян: класс tcpchannel
для начала<поставщик br /> В := BinaryServerFormatterSinkProvider.Создать <поставщик бр />.TypeFilterLevel := TypeFilterLevel.Полный // необходимых для сериализации в
реквизит := хеш.Создавать
реквизит ["порт"] : = порт
есть тян := класс tcpchannel.Создать(реквизит, Нил, поставщика)
В ChannelServices.RegisterChannel(тян)
В remotingconfiguration, настраивающему.RegisterWellKnownServiceType(
В вызова typeof(TEcoPersistenceMapperProvider),
В 'TestServer1',
В WellKnownObjectMode.Синглтон)
В конце Цитата>р><р класса="step_content ">для завершения настройки провайдером Персистентности Картографа установить SyncActive атрибута значение True. Вы также можете увеличить значение MaxOpenConnections атрибуты и MaxPoolConnections если у вас много клиентов, подключающихся к серверу<.br />А теперь добавьте PersistanceMapperClient к Ecospace. Установите свойство URL для протокола TCP://имя localhost:8000/TestServer1 или если вы изменили порядок RegisterTCPServer на значения есть.
мы должны называть компонентом RegisterTCPServer до PersistenceMapperClient инициализируется. Для этого измените конструктор EcoSpace следующим образом:р><р класса="step_content ">тег
конструктор TWorkTimeServerEcoSpace.Создавать
начинается
наследуется создавать
EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer(8000)
В метод initializecomponent
с // todo: добавьте любой код конструктора здесь
В конце Цитата>р><р класса="step_content ">серверная часть теперь уже полностью функционален. Чтобы добавить представление данных, поступающих от наших клиентов мы создаем следующем сайте:

В Таймер событий tick код настойчивость сервисный код уже известен от клиента:
в тегпроцедура TWinForm.Timer1_Tick(отправителя: система.Объект е: системы.Eventargs В) И
вар
с: IChange
и начинается
EcoSpace.PersistenceService.RetrieveChanges
для C в EcoSpace.PersistenceService.Метод getchanges делать
если с.IsDirectConflict затем C.Действие := ChangeActionKind.Отбросить остальное.
и сбыл.Действие := ChangeActionKind.Сохранить
В EcoSpace.PersistenceService.ApplyAllChanges
В конце Цитата>р><р класса="step_content ">установка таймера Enabled значение True. Сохраните и запустите проект и отсоедините его от Дельф.р><р класса="step_content ">
р><р класса="step_content ">открыть проект клиента снова. Запустите клиент проекта отсоединить его и запустить второй клиент. Изменить имя пользователя в второй клиент и эксперимент. Это должно работать, и это еще очень легко достичь - Eco может сделать тебя счастливой.
пожалуйста, дайте мне знать, если я пропустил некоторые важные шаги для понимания, как это сделать или если я сделал что-то не лучшая практика, как. Я изменю статью, то согласно вашей обратной связи.р><р класса="step_content ">- в пример код сервера и клиента можно найти здесь.
р><дел стиль= \ ясно:оба поплавка:нет'>дел><дел стиль= \ ясно:оба поплавка:нет'> & мочекаменная див>
Мульти-клиент-ЭКО пример применения.
By russiatips
Мульти-клиент-ЭКО пример применения. : Несколько тысяч советов, которые сделают вашу жизнь проще.