Como Fazer um If dentro do create() ?
25/07/2013 14:05
0
ola amigos estou com um problema meio chato aqui sou iniciante no grails e tals e bom o problema e o seguinte eu tenho uma classe equipamento nela tem um atributo PNP(patrimoniado e nao patrimoniado) , eu queria fazer com que quando a maquina nao fosse patrimoniada ou seja estivesse selecionado o Nao patrimoniado ele gerasse um numero para o atributo patrimonio sozinho(gerasse um numero continuo tipo a id), ou sei la usar NF e concaternar com a id , tem como fazer isso creio eu so nao sei como alguem poderia me ajudar com isso?obg desde ja
Tags: [Duvida]


0
Não sei se entendi corretamente o seu problema, mas você pode utilizar os eventos existentes nas classes de domínio, conforme o exemplo abaixo:


class Equipamento {
void gerarNroPatrimonio(){
if (PNP = 'Não Patrimoniado') {
patrimonio = geradorIdService.newId('NOME_DO_GERADOR')// tera que criar este serviço
}
}

def beforeInsert(){
gerarNroPatrimonio()
}
}


0
hummm vou tentar

bom dexa eu ver se entendi isso seria tipo um metodo que e disparado caso pnp seja igual a nao patrimoniado!!! ai o atributo patrimonio vai receber uma id gerada pelo geradoridservice ?
esse nome do gerador ainda nao entendi mais assim que chegar em casa vou tentar fazer. brigadao
25/07/2013 20:10


0
O que você precisa é de um gerador de números sequenciais, correto?

Caso seja isso, você pode utilizar esse plugin:

https://github.com/goeh/grails-sequence-generator

Funciona muito bem. No meu sistema, por exemplo, é preciso ter um código para o Cliente, Pacote, Cotação, etc.

No caso do Cliente, por exemplo, nós utilizamos um código que começa com CL e depois tem 5 dígitos sequenciais, exemplo: CL-00023

O plugin controla a geração e persistência de maneira transparente.

Eu utilizei como um plugin inplace, já que o desenvolvedor não o publicou no repositório de plugin do Grails.
26/07/2013 01:09


0
esse plugin ia acabar com meu problema so n to axando como "?nstalar" ele plugin inplace seria um plugin privado ou algo do tipo?
26/07/2013 11:49


0
Bom baixei o zip desse plugin colokei ele em uma pasta dentro do projeto setei ele buildconfig ele axa comeca compila 11 arquivos ai da esse erro



Error 2013-07-26 10:36:04,128 [localhost-startStop-1] ERROR context.ContextLoader - Context initialization failed
Message: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsConfigurationException: Class not found loading Grails application: grails-sequence-generator-master.src.groovy.grails.plugins.sequence.SequenceHandle
Line | Method
->> 334 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 166 | run in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 724 | run . . . in java.lang.Thread
Caused by GrailsConfigurationException: Class not found loading Grails application: grails-sequence-generator-master.src.groovy.grails.plugins.sequence.SequenceHandle
->> 334 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 166 | run in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 724 | run . . . in java.lang.Thread
Caused by ClassNotFoundException: grails-sequence-generator-master.src.groovy.grails.plugins.sequence.SequenceHandle
->> 366 | run in java.net.URLClassLoader$1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 355 | run in ''
| 354 | findClass in java.net.URLClassLoader
| 424 | loadClass in java.lang.ClassLoader
| 334 | innerRun in java.util.concurrent.FutureTask$Sync
| 166 | run in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 724 | run . . . in java.lang.Thread
| Error 2013-07-26 10:36:04,208 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsConfigurationException: Class not found loading Grails application: grails-sequence-generator-master.src.groovy.grails.plugins.sequence.SequenceHandle
Message: Error creating bean with name 'grailsApplication' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.codehaus.groovy.grails.exceptions.GrailsConfigurationException: Class not found loading Grails application: grails-sequence-generator-master.src.groovy.grails.plugins.sequence.SequenceHandle
Line | Method
->> 334 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 166 | run in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 724 | run . . . in java.lang.Thread
Caused by GrailsConfigurationException: Class not found loading Grails application: grails-sequence-generator-master.src.groovy.grails.plugins.sequence.SequenceHandle
->> 334 | innerRun in java.util.concurrent.FutureTask$Sync
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 166 | run in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 724 | run . . . in java.lang.Thread
Caused by ClassNotFoundException: grails-sequence-generator-master.src.groovy.grails.plugins.sequence.SequenceHandle
->> 366 | run in java.net.URLClassLoader$1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 355 | run in ''
| 354 | findClass in java.net.URLClassLoader
| 424 | loadClass in java.lang.ClassLoader
| 334 | innerRun in java.util.concurrent.FutureTask$Sync
| 166 | run in java.util.concurrent.FutureTask
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run in java.util.concurrent.ThreadPoolExecutor$Worker
^ 724 | run . . . in java.lang.Thread
26/07/2013 13:39


0
Primeiro você precisa ter uma conta no github;
Depois terá que baixar os fontes do github;
Depois acesse o projeto que acabou de baixar e execute o comando:
grails package-plugin

Por fim configureo o arquivo BuildConfig.groovy e execute o comando
grails refresh-dependencies


0
Olá, william.

Amigo acho que você não precisa de plugin para resolver teu problema. Usa os métodos beforeInsert() e/ou beforeUpdate() do próprio Grails na tua classe de domínio.

http://grails.org/doc/latest/guide/GORM.html#eventsAutoTimestamping

Se eu entendi teu problema, eu resolveria com esse recurso nativo do Grails.


0
bom ate consegui instala o plugin porem axo que eh incompatibilidade com java 6 o 7 roda mais da aquele erro que mostrei!!!! vou tentar no windows ve se da certo!!! ja que no linux da esse erro que axo que e do java 7!!!! se nao ter vou tentar fazer com os recursos nativos do grails como jose passou o bom do plugin que era exatamente o que precisava :/ mais vlw Pela ajuda Leandro e Jose vou quebrar a cabeca aqui e tentar
26/07/2013 18:05


0
O meu plugin foi instalado inplace. Plugins desse tipo são instalados localmente.

A configuração está dessa maneira no BuildConfig.groovy:


grails.plugin.location.'sequence-generator'="${basedir}/local-plugins/sequence-generator-0.9.3"


No Config.groovy eu especifico as minhas sequences:


sequence.flushInterval = 20 //20 segundos para persistir os dados no banco de dados

sequence.Client.start = 1L
sequence.Client.format = 'CL-%06d'


Nas classes de domínio que precisam de um código eu declaro o atributo code e reescrevo o método get da seguinte maneira:


public String getCode() {
if (!code)
code = sequenceGeneratorService.nextNumber("Client")
return code
}


Obviamente, o sequenceGeneratorService deve estar injetado na sua classe de domínio.

Funciona muito bem.
27/07/2013 00:06


0
Para esclarecer um pouco mais:

Como eu reescrevo o método get para o atributo code, eu garanto que sempre que eu der um cliente.save() em um cliente novo, um novo código será gerado. Por outro lado, se eu der um cliente.save() em um cliente já existente, nenhum código novo será gerado. Fica totalmente transparente. O código é gerado automaticamente, pois o método get é chamado pelo Hibernate na hora da persistência.

Exemplo:


def cliente = new Cliente(nome: "Teste")
cliente.save()

def clienteAux = Cliente.findByNome("Teste")
println clienteAux.code //vai imprimir o código gerado com a chamada do save acima.
27/07/2013 00:10


0
hummm problema eh que fiz tudo isso ae nao sei pq o jdk7 nao roda bem aqui no ubunto e o 6 da um erro e minor major algo do tipo tentarei hoje denovo mais obrigado pela ajuda e pela paciencia em explicar
29/07/2013 14:19


0
Desenvolvo no Ubuntu 12.04 com JDK7 (java Hotspot). No servidor eu tenho um CentOS rodando OpenJDK7. Em ambos eu não tenho problema.

30/07/2013 11:03


0
bom nao sei pq da problema aqui mais bem consegui fazer de outra maneira aqui ja que n consegui pelo plugin!!! vou tentar mexer no open jdk depois, comeei a trabalhar com linux e grails a pouco tempo entao to meio enrolado ainda mais vlw :)
01/08/2013 13:39



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto