Manipulando Dados do Model

Muitos desenvolvedores que iniciam o uso do MVC ficam na duvida de como manipular dados sem utilizar o aCols, já que por padrão o MVC não cria as variáveis aHeader e aCols para o grid. Nesse post vou mostrar como obter e atribuir valor no modelo de dados.

Obtendo Dados

Método getValue()

Para obter o conteúdo de um campo do modelo de dados você vai precisar saber o nome do campo e também o sub modelo onde esse campo foi criado, com posse dessas duas informações você vai fazer uso do método GetValue do objeto de model (Classe FWFormModel)

O método getValue recebe dois parâmetros:

  1. ID do submodelo (aquele ID que você define quando usa addField ou addGrid)
  2. ID do campo

O tipo de conteúdo retornado depende do tipo do campo, se o campo é carácter o conteúdo será carácter, se o campo é logico o conteúdo será logico e assim por diante.

cNome := oModel:GetValue("SA1MASTER","A1_NOME")

Existe uma variação do uso desse método, eu mostrei acima o método usando o objeto do Model, mas podemos usar também diretamente no objeto de Field ou Grid, a diferença é que quando é usado diretamente no componente passamos apenas um parâmetro, com o ID do campo, não é necessário passar o ID do submodelo, pois o objeto já é o sub modelo em si.

oField := oModel:GetModel("SA1MASTER")

cNome := oField:GetValue("A1_NOME")

Existe duas situações onde é indicado usar essa variação:

  1. Você escreveu uma validação que recebe por parâmetro um objeto do tipo FWFormFieldsModel ou FWFormGridModel.
  2. Você vai fazer varias manipulações de um mesmo modelo.

Nesse caso obter o sub modelo (usando o metodo GetModel() ) e então trabalhar as manipulações diretamente no objeto é o mais indicado, pois internamente o método getValue do FWFormModel localiza o sub modelo passado no primeiro parâmetro e depois procura o conteúdo do campo, acessando diretamente o submodelo você vai executar o método mais rapidamente já que vai economizar uma instrução de busca para cada execução do método.

Função FWFldGet

Além do método apresentado existe a função FWFldGet que também tem por objetivo obter o conteúdo de um campo do Field ou Grid, a função recebe alguns parâmetros e está documentada aqui.

O uso dessa função é recomendado somente em validações chamadas diretamente dentro do SX3, isso porque a função recebe somente o ID do campo que precisa ser avaliado e então a função percorre todos os sub modelos até encontrar o campo e retornar o conteúdo.

Se o modelo possuir um ou dois sub modelos, não há tanto problema, mas imagine um modelo com 12 grids e o campo está justamente no ultimo grid, a função vai demorar mais tempo do que um getValue já que o método iria buscar o campo exatamente no sub modelo passado como parâmetro e a função vai percorrer todos os sub modelo até chegar no último e encontrar o campo.

Devemos sempre pensar em performance quando criamos nosso código, então use essa função com cautela.

Atribuindo Dados

Método SetValue()

O método setValue atribui conteúdo para um campo dentro do modelo de dados, disparando todas as validações e gatilhos que estiverem definidas para o campo que foi modificado.

O método é do objeto de model (classe FWFormModel) e recebe três parâmetros:

  1. ID do submodelo
  2. ID do campo
  3. Conteudo

Se a atribuição de valor for bem sucedida o método retorna verdadeiro, caso alguma validação não esteja correta o método retorna falso.

lOK := oModel:SetValue("SA1MASTER","A1_NOME","TESTE")

O SetValue também possui uma opção de ser utilizado diretamente no objeto de Field/Grid. Nesse caso o método recebe somente dois parâmetros:

  1. ID do campo
  2. Conteúdo
oField := oModel:GetModel("SA1MASTER")

lOk := oField:SetValue("A1_NOME","TESTE")

Função FWFldPut

A atribuição de valor também possui uma função que é a FWFldPut, ela possui o mesmo mecanismo que a FWFldGet, ou seja, busca o campo em todos os sub modelos até encontrar uma referencia.

Deve ser usada em casos especificos sempre pensando em performance.

Método LoadValue()

Existe uma última opção para atribuir valor no modelo que é o método LoadValue. Esse método não dispara as validações do campo e nem os gatilhos, mas muda o estado do modelo para modificado. É útil quando temos certeza do valor que deve ser atribuído ao campo e não é precisamos de validação e gatilho.

O método pode ser chamado diretamente no Model ou Field/Grid, recebe exatamente os mesmos parametros que o setValue.

//Metodo do modelo de dados

lOK:= oModel:LoadValue("SA1MASTER","A1_NOME","TESTE")


//Método do sub modelo

oField := oModel:GetModel("SA1MASTER")

lOK := oField:LoadValue("A1_NOME","TESTE")

 

É isso pessoal, espero o conteudo seja util.

Até a proxima!

[]s

 

Anúncios

Um comentário em “Manipulando Dados do Model

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s