A aplicação que vamos construir pode ser usado para capturar worktime e pausas durante o worktime. O worktime pode ser capturada com vários clientes do servidor de aplicação e fornece uma visão de todos os dados capturados.
[O cliente parte]
Você começa com a criação de um eco winform pedido. Este pedido deverá ser o cliente. Eu dei um nome que WorkTimeClient.
Você precisa ter as classes UML em um pacote para que você possa adicioná-los mais tarde, a pedido do servidor.
New File - ECO UML Package
Crie o seguinte modelo:

WorkTime Model

Worktime e breaktime estão aulas especiais de um intervalo. Um worktime pode ter vários breaktimes.

A operação calcTotal dá o intervalo de tempo de uma volta worktime reduzida pela timespans acumulado do breaktimes. O resultado da calctotal está definido no diff atributo da classe worktime. Certifique-se de alterar as classes, de acordo com o código a seguir trechos:

timestartend.calcTotal função (): Período;
começo
Resultado: Período = (Self.endtime-Self.starttime);
final;

worktime.calcTotal função (): Período;
var
ib: IbreaktimeList;
i: Integer;
começo
ib: = get_breaktime;
for i: = 0 a ib.Count fazê-1 começam
Self.diff: = Self.diff - ib.Item [i]. CalcTotal;
final;
final;
breaktime.get_diff função: Período;
começo
/ / Se você adicionar usuários código aqui, por favor, remova o [EcoAutoMaintained] atributo
/ / Declaração da propriedade na seção interface
Resultado: Período = (Self._endtime-Self._starttime);
final;
worktime.get_diff função: Período;
começo
/ / Se você adicionar usuários código aqui, por favor, remova o [EcoAutoMaintained] atributo
/ / Declaração da propriedade na seção interface
Resultado: = intervalo (Self._endtime - Self._starttime);
final;

Agora compilar o aplicativo, vá para o ecospace designer e adicionar o pacote para o ecospace. Coloque um componente PersistenceMapperXml sobre o ecospace para que você possa desenvolver o cliente sem necessidade de a parte do servidor até o momento. Definir o nome do ficheiro de persistencemapper para data.xml ou o que quer que você suites bem.

Mudar agora para o winform e criar um frontend semelhante a este:
WorkTimeClient Frontend
Adicione duas alças e expressão Moeda Manager Manivela para o datagrids.
A fim de ter a última linha do datagrid selecionadas colocar o seguinte código no evento datagrids Paint:

procedimento TWinForm.DataGrid1_Paint (remetente: System.Object; e: System.Windows.Forms.PaintEventArgs);
começo
DataGrid1.BindingContext [DataGrid1.DataSource,
dataGrid1.DataMember]. Posição: = ehWorkTime.GetList.Count;
cmhWorktime.Position: = ehWorkTime.GetList.Count;
final;

Então provavelmente poderia ser mais esperto lugares para colocá-la -, mas não sei eles ;-)
Mas, por favor me avise caso você sabe.

Para testar o único cliente do app você pode simplesmente atribuir a atualização para a Atualização de Dados EcoAction DB Button - Considerando que no Multi Client configuração é necessário o seguinte código:

var
c: IChange;
começo
EcoSpace.PersistenceService.RetrieveChanges;
c EcoSpace.PersistenceService.GetChanges para nos fazer
c.IsDirectConflict se então c.Action: = ChangeActionKind.Discard else
c.Action: = ChangeActionKind.Keep;
EcoSpace.PersistenceService.ApplyAllChanges;
final;

Este código recupera, através do serviço EcoSpace persistência todas as alterações persistiram. Poderia, em um ambiente multi cliente acontecer que alguém alterou os dados que você já tinha havido mudanças em seu local ecospace cache. A persistência de serviço dá-lhe a capacidade de lidar com conflitos decorrentes se for esse o caso. Eu nosso caso (loging worktime) embora não deva acontecer.

No entanto depois de recuperada a mudança que se caminhe para a via ... em cima deles para checar se você tem um conflito ou não. Você tem de definir para cada interface IChange no GetChanges-list a acção a ser utilizado quando o procedimento é chamado ApplyAllChanges.
Se você terminou o cliente desta forma a única coisa que resta para habilitá-lo para o servidor cliente é mudar a persistencemapper. Precisamos de um componente PersistenceMapperClient sobre nossos ECOSpace uma vez que este não é sobre o ECO CompoNET Paleta por omissão. Temos de lhe acrescentar o seguinte:
  • botão direito sobre a paleta de ferramentas e escolher "Instalado. NET componentes" a partir do menu pop-up.
Adding the peristence mapper client
Em seguida, arraste-o para a categoria eco.
Excluir PersistenceMapperXML o cliente a partir do ecospace e ao gota PersistenceMapperClient sobre ela. Defina a propriedade url para "tcp: / / localhost: 8000/TestServer1" - uma vez que teremos a um servidor executando o cliente sobre a nossa máquina local antes da implantação.
Salve o projeto e feche-o ou deixe-a aberta se quiser ter o cliente eo servidor em um projeto grupo. Desde que não irá correr enquanto tivermos nosso servidor desenvolvido - e correndo até porque o soquete do peristencemapperclient tenta conectar-se ao não serão registrados.

[O servidor parte]
Criar um novo projecto ECO winform. Eu dei um nome que WorkTimeServer.
Adicione o pacote worktime classes e uma persistência mapper fornecedor:

Adding the ECO persistence mapper provider

No nosso exemplo vamos usar Interbase com o BDP. Então, uma gota PersistenceMapperBdp e BdpConnection uma componente relativa à PersistanceMapperProvider ECOSpace. Configure o PersistenceMapperBDP para Interbase e configurar a conexão do BDPConnection de acordo com o seu ambiente local. Você só tem vazio para criar um banco de dados. Os quadros serão criados mais tarde, através da persistência mapper provedor.

Ir para o ecospace (mas não ao persistencemapperprovider a um conectado à winform) e selecione o pacote worktime os pacotes disponíveis a partir de lista:

Adding the WorkTime calsses

Compilar o projecto e escolher a EcoSpaceType a ser utilizado para a persistência mapper provedor. (Clique sobre a superfície da persistência mapper provedor e selecioná-lo da lista pendente no objeto inspector).

Agora você pode clicar sobre o botão Gerar Schema, na parte inferior da EcoPersistanceMapper Provider. O resultado deve parecer como se segue:

ECO createt DB Mapping

Você tem agora a descomentar o código para Remoting na persistência mapper provedor. Não se esqueça de descomentar a declaração do procedimento e para adicionar a necessária implementação usa-declaração, tal como indicado nos comentários.

/ / Exemplo de código para registrar o provedor como um servidor utilizando
/ / Binário formatação em um canal TCP.
/ / Adicionar a seguinte à sua aplicação usos nível uncommenting-afirmação quando o código
/ / System.Runtime.Serialization.Formatters, System.Runtime.Remoting, System.Runtime.Remoting.Channels, System.Runtime.Remoting.Channels.Tcp;
classe procedimento TEcoPersistenceMapperProvider.RegisterTcpServer (Porto: integer);
var
prestador: BinaryServerFormatterSinkProvider;
adereços: IDictionary;
chan: TcpChannel;
começo
prestador: = BinaryServerFormatterSinkProvider.Create;
provider.TypeFilterLevel: = TypeFilterLevel.Full; / / Necessário para serializations
adereços: = Hashtable.Create;
props [ 'port']: = Porto;
chan: = TcpChannel.Create (adereços, nula, fornecedor);
ChannelServices.RegisterChannel (chan);
RemotingConfiguration.RegisterWellKnownServiceType (
typeof (TEcoPersistenceMapperProvider),
«Testserver1 ',
WellKnownObjectMode.Singleton);
final;

Para concluir a configuração da Persistência do cartógrafo Provider definir o atributo SyncActive a verdade. Você também pode aumentar o valor dos atributos MaxOpenConnections e MaxPoolConnections se você tem um monte de clientes conectando ao servidor.

Aditar PersistanceMapperClient agora um para o Ecospace. Defina a propriedade url para tcp: / / localhost: 8000/TestServer1 ou se tiver alterado o processo para RegisterTCPServer os valores que ali oferecidos.
Temos que chamar a RegisterTCPServer componente antes da PersistenceMapperClient é inicializado. Para fazê-lo mudar o construtor da EcoSpace como segue:
TWorkTimeServerEcoSpace.Create construtor;
começo
Crie herdados;
EcoPersistenceMapperProvider.TEcoPersistenceMapperProvider.RegisterTcpServer (8000);
InitializeComponent;
/ / TODO: Fazer qualquer construtor código aqui
final;

A parte do servidor está agora já totalmente funcional. Para adicionar alguns insights sobre os dados fornecidos pelos nossos clientes estamos trabalhando frontend criar o seguinte:

Server Frontend
No evento que assinale o temporizador código do Serviço de Persistência código já conhecidos do cliente:

procedimento TWinForm.Timer1_Tick (remetente: System.Object; e: System.EventArgs);
var
c: IChange;
começo
EcoSpace.PersistenceService.RetrieveChanges;
c EcoSpace.PersistenceService.GetChanges para nos fazer
c.IsDirectConflict se então c.Action: = ChangeActionKind.Discard else
c.Action: = ChangeActionKind.Keep;
EcoSpace.PersistenceService.ApplyAllChanges;
final;

Defina o temporizador ativado propriedade para true. Salvar e iniciar o projeto e retire-a de Delphi.

Detach program from Delphi

Abra o cliente de novo projeto. Inicie o cliente projeto destacam-lo e dar início a um segundo cliente. Mudar o Nome de usuário no cliente e no segundo experimento. Deve-se trabalhar e é muito fácil, uma vez obtida - ECO pode torná-lo muito feliz.

Por favor, deixe-me saber se eu perdi alguns passos importantes para se entender como fazê-lo, ou se eu fiz alguma coisa que não gosta das melhores práticas. Eu vou mudar o artigo, em seguida, de acordo com o seu feedback.

  1. O samplecode do servidor e cliente pode ser encontrado aqui.
Average rating: