StrataFrame Forum
Home      Members   Calendar   Who's On
Welcome Guest ( Login | Register )
      



Tratando concorrência com SF.Expand / Collapse
Author
Message
Posted 03/05/2008 1:39:25 PM
StrataFrame Beginner

StrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame Beginner

Group: Forum Members
Last Login: 03/20/2008 1:30:33 PM
Posts: 22, Visits: 481
Olá.

Como tratar a concorrência durante a inclusão de registros com SF?

Ex:  Tenho um form para cadastro de clientes que tem chave primária auto-incremento. Se eu tiver o mesmo form aberto em duas estações e salvar ao mesmo tempo um cadastro, como trato a chave? Já que nesse momento as duas estações vão estar com o mesmo código de cliente auto-incremento em memória.

Abraços.

Post #14660
Posted 03/05/2008 4:02:07 PM


Advanced StrataFrame User

Advanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame User

Group: StrataFrame Users
Last Login: Yesterday @ 7:19:27 PM
Posts: 819, Visits: 11,711
Olá Valadair.

O SF fará isto para você.

Só pra te situar no Help: Application Framework / Business Layer / Common Business Object Tasks / Implementing Concurrency

Para começar, no DDT (Database Deployment Toolkit), click com o botão da direita em sua tabela e click Table Properties. Note a figura abaixo, eu estou ordenando ao DDT que crie as SP para mim, em UPDATE Stored Procedure, eu escolhi em Concurrency "Optmistic Row Version", que é a estratégia que eu quero usar para checar uso concorrente do mesmo registro, e logo abaixo, em Version Field, eu coloquei cli_version, que é um campo Integer que eu crio em minha tabela para cuidar de concorrência.

Ai, quando você criar seu BO para sua tabela de Clientes, você vai nas propriedades de CRUD, e seta o UpdateConcurrencyType para OptimisticRowVersion, e o RowVersionOrTimestampColumn para o seu campo de controle de versão, neste caso cli_version.

Espero que te ajude por aí.

Abraços.

Post #14673
Posted 03/05/2008 4:03:01 PM


Advanced StrataFrame User

Advanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame User

Group: StrataFrame Users
Last Login: Yesterday @ 7:19:27 PM
Posts: 819, Visits: 11,711
Oi Valdair, desculpa por ter errado seu nome...
Post #14674
Posted 03/11/2008 9:21:18 AM
StrataFrame Beginner

StrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame Beginner

Group: Forum Members
Last Login: 03/20/2008 1:30:33 PM
Posts: 22, Visits: 481
Oi Ivan. Sem problemas....

Segui as dicas que voçê me passou e o Help, implementei a concorrência e funcionaou legal quanto a inserção. Tenho uma outra situação que ainda não consegui resolver.

Como que o SF trata a concorrência durante a edição do mesmo registro. Vamos imaginar que um usuário está com o cadastro de clientes e está editando o cliente Número 10. Ao mesmo tempo temos outro usuário com o cadastro de clientes e também está editando o cliente Número 10. O primeiro altera os dados do endereço, o segundo altera os dados de telefone. como que posso tratar esse tipo de concorrência com SF para que os dados dos dois usuários sejam salvos?

Estou usando "OptimisticRowVersion" com a PK de clientes. ´

Post #14790
Posted 03/11/2008 10:36:10 AM


Advanced StrataFrame User

Advanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame User

Group: StrataFrame Users
Last Login: Yesterday @ 7:19:27 PM
Posts: 819, Visits: 11,711
Bom, primeiro, só para chamar um pouco a atenção para o detalhe do RowVersion... você não deveria usar a PK do seu cliente, pois este campo de RowVersion será usado pelo StrataFrame para incrementar o número de versão do seu registro. Então, a cada alteração que houver no mesmo, ele será incrementado de 1, e assim que o SF vai saber que houve uma alteração por outro usuário quando você for salvar a sua versão do registro. Então, você deveria criar um campo em cada uma de suas tabelas exclusivamente para esta função, provavelmente do tipo Integer. Por exemplo, na minha tabela de Clientes, ele se chama cli_version.

Aí, quando houver problema de concorrência, seu usuário receberá a seguinte tela quando ele for salvar o registro:

Nesta tela de Diálogo, você tem o valor do seu campo, e o valor que agora está no servidor, já que alguém editou o mesmo registro e salvou antes de você. Neste momento, seu usuário terá que decidir o que irá fazer.

Post #14792
Posted 03/11/2008 10:37:18 AM


Advanced StrataFrame User

Advanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame User

Group: StrataFrame Users
Last Login: Yesterday @ 7:19:27 PM
Posts: 819, Visits: 11,711
Além disto, faça um Search no Forum com a palavra "concurrency".

Você vai receber links bastante interessantes sobre o assunto.

Abraços.

Post #14793
Posted 03/11/2008 2:36:21 PM
StrataFrame Beginner

StrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame BeginnerStrataFrame Beginner

Group: Forum Members
Last Login: 03/20/2008 1:30:33 PM
Posts: 22, Visits: 481
Ok Ivan.  Eu de novo.

Caso eu não queira mostrar a janela de decisão ao usuário e preservar os valores atuais do banco como faço?

Post #14799
Posted 03/11/2008 3:56:21 PM


Advanced StrataFrame User

Advanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame UserAdvanced StrataFrame User

Group: StrataFrame Users
Last Login: Yesterday @ 7:19:27 PM
Posts: 819, Visits: 11,711
Valdair Ziegler (03/11/2008)
Ok Ivan.  Eu de novo.

Caso eu não queira mostrar a janela de decisão ao usuário e preservar os valores atuais do banco como faço?

Bom, se você não quer que a janela entre em ação, você pode desligar a propriedade AutoHandleCollisions do form e gerenciar o evento ConcurrencyException você mesmo, tomando as decisões que achar melhor.

Post #14803
« Prev Topic | Next Topic »


Reading This TopicExpand / Collapse
Active Users: 0 (0 guests, 0 members, 0 anonymous members)
No members currently viewing this topic.
Forum Moderators: Ben Chase, Trent L. Taylor, Steve L. Taylor

PermissionsExpand / Collapse