Como crio um cadastro exemplo:
- Funcionários para muitos departamentos, onde nesta tela gravará na tabela funcionário e também na tabela departamentoFuncionarios os seus respectivos id.
- Uso Trigger para gravar o id de funcionario o qual terá que ser gravado 1º, para daí gravar este mesmo id na tabela departamentoFuncionarios. Gostaria que isso fosse realizado em uma única transação? Isso é Possível? Como ficaria o metodo do botão gravar?
Atenciosamente...
SelectManyCheckbox em uma transação?
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
se você tivesse um relacionamento do tipo 1 funcionario para 1 departamento seria simples na tabela de funcionario você gravaria a PK do departamento como FK e tudo resolvido porem você tem 1 para N logo precisará de uma outra tabela para fazer isso.. essas tabela associativa guadará a chave do seu funcionario mais a chave de um departamento assim você poderá ter um fucionario com mais de um departamento pois cada registro dessa tabela sera uma associçao dessa entre func e dep, por isso o nome dela e associativa.
com relaçao a sua duvida tecnica você tem que dar mais dados..
se você esta usadno BC basta implementar um metodo chamdo postChange no EO da entidade principal (func) e no EO de departamento refreshKey... (não me lembro o nome direito agora) assim você poderá salvar a entidade pai e filha na mesma transação..
se você quiaser fazer isso na mao e mais facil... basta colocar a trigger nessa nova tabela..
para o botao.. preciso saber qual framework esta usando
espero ter ajudado... senao esclareça melhor que tentarei ajuda-lo
abraço
com relaçao a sua duvida tecnica você tem que dar mais dados..
se você esta usadno BC basta implementar um metodo chamdo postChange no EO da entidade principal (func) e no EO de departamento refreshKey... (não me lembro o nome direito agora) assim você poderá salvar a entidade pai e filha na mesma transação..
se você quiaser fazer isso na mao e mais facil... basta colocar a trigger nessa nova tabela..
para o botao.. preciso saber qual framework esta usando
espero ter ajudado... senao esclareça melhor que tentarei ajuda-lo
abraço
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Qua, 26 Ago 2009 7:43 pm
- Localização: PR
Victor:
Estou usando ADF no jdeveloper 11g com bd oracle e gostaria de implentar isso na mão mesmo, na hora de executar o botao salvar. Já tenho o jspx com o cadastro de funcionário e os checkbok com os departamentos, porém gostaria de estar lendo os checbok dos departamentos selecionados e gravalos na tabela funcionarioDepartamento com este id do funcionario salvo e isso na mesmo transação.
Esta outra solução que comentou" não entendi quando escreveu: "basta colocar a trigger nessa nova tabela" Seria implementar tudo isso direto no banco?
Obrigado,
Estou usando ADF no jdeveloper 11g com bd oracle e gostaria de implentar isso na mão mesmo, na hora de executar o botao salvar. Já tenho o jspx com o cadastro de funcionário e os checkbok com os departamentos, porém gostaria de estar lendo os checbok dos departamentos selecionados e gravalos na tabela funcionarioDepartamento com este id do funcionario salvo e isso na mesmo transação.
Esta outra solução que comentou" não entendi quando escreveu: "basta colocar a trigger nessa nova tabela" Seria implementar tudo isso direto no banco?
Obrigado,
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
assumindo que seu modelo esteja certo..
não vejo problemas em fazer dois commits pois o ADF Bussines Components tem seus aplications modules justamente para você não se preocupar com questões de transações de banco..
entenda seu problema.. você tem a criação de um funcionario que quando é criado ganha um id negativo temporario e antes de dar o commit, onde a trigger entrará em ação para alimentar o id verdadeiro gerado pela sequence desta tabela, você quer usar este id para inserir em outra tabela (funcDep) como FK... sim.. da pra fazer mas fica uma m***a..
você querendo eu posso te postar mais tarde esses metodos que seriam implementados nos EOs para atualizar essa pk negativa temporaria e poder atualilzar a sua outra tabela, mas te adianto que, por de tras dos panos, você vai estar fazendo a mesma coisa que dar o seu DbTrasaction.commit()
tem essa outra forma tambem que achei...
http://one-size-doesnt-fit-all.blogspot ... reate.html
no metodo create() do EO que é acionado quando você da um creatInsert no seu VO, ele já vai no banco ler o valor da sequence e já seta o valor real do id do funcionario novo logo e so pegar e salvar na sua tabela associativa
qualquer coisa estamos ai
espero ter ajudado
abraço
não vejo problemas em fazer dois commits pois o ADF Bussines Components tem seus aplications modules justamente para você não se preocupar com questões de transações de banco..
entenda seu problema.. você tem a criação de um funcionario que quando é criado ganha um id negativo temporario e antes de dar o commit, onde a trigger entrará em ação para alimentar o id verdadeiro gerado pela sequence desta tabela, você quer usar este id para inserir em outra tabela (funcDep) como FK... sim.. da pra fazer mas fica uma m***a..
você querendo eu posso te postar mais tarde esses metodos que seriam implementados nos EOs para atualizar essa pk negativa temporaria e poder atualilzar a sua outra tabela, mas te adianto que, por de tras dos panos, você vai estar fazendo a mesma coisa que dar o seu DbTrasaction.commit()
tem essa outra forma tambem que achei...
http://one-size-doesnt-fit-all.blogspot ... reate.html
no metodo create() do EO que é acionado quando você da um creatInsert no seu VO, ele já vai no banco ler o valor da sequence e já seta o valor real do id do funcionario novo logo e so pegar e salvar na sua tabela associativa
qualquer coisa estamos ai
espero ter ajudado
abraço
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Qua, 26 Ago 2009 7:43 pm
- Localização: PR
Victor:
Fazendo dois commit tenho medo de estar gravando na 1ª tabela(Func) e no momento der outro commit dar uma queda de energia, etc e não gravar na 2ª tabela (funcDep). Se possível me manda esses metodos implementados nos EOs, concordo que daquela forma vai ficar uma m***a ...
Atenciosamente,
Fazendo dois commit tenho medo de estar gravando na 1ª tabela(Func) e no momento der outro commit dar uma queda de energia, etc e não gravar na 2ª tabela (funcDep). Se possível me manda esses metodos implementados nos EOs, concordo que daquela forma vai ficar uma m***a ...
Atenciosamente,
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
esses são os metodos q te falei...
http://download.oracle.com/docs/html/B2 ... sthref2515
não esqueca que essa entidade funcionarioDepartamento tera de estar devidamente figurada no seu sistema atraves EO, AO, VO e VL
http://download.oracle.com/docs/html/B2 ... sthref2515
não esqueca que essa entidade funcionarioDepartamento tera de estar devidamente figurada no seu sistema atraves EO, AO, VO e VL
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Qua, 26 Ago 2009 7:43 pm
- Localização: PR
Victor:
Fiz todos os métodos, estou com dificuldade pra receber os valores dos checkbox selecionados, através de uma action no meu bem.
No jspx está assim:
Atenciosamente,
Fiz todos os métodos, estou com dificuldade pra receber os valores dos checkbox selecionados, através de uma action no meu bem.
No jspx está assim:
<af:selectManyCheckbox value="#{bindings.DepView1.inputValue}"
label="#{bindings.DepView1.label}"
binding="#{backingBeanScope.backing_untitled1.smc2}"
id="smc2">
<f:selectItems value="#{bindings.DepView1.items}"
binding="#{backingBeanScope.backing_untitled1.si3}"
id="si3"/>
</af:selectManyCheckbox>
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
qual dificuldade?
gera alguém erro?
os valores não estao chegando no seu metodo?
assim de cara..
1 - tenta colocar no teu componente
2 -
você tem os valores selecionado atraves desse atributo q foi criado no seu managedBean (ou backingBean)
gera alguém erro?
os valores não estao chegando no seu metodo?
assim de cara..
1 - tenta colocar no teu componente
valuePassThru=true
binding="#{backingBeanScope.backing_untitled1.smc2}"
-
- Rank: Programador Júnior
- Mensagens: 20
- Registrado em: Qua, 26 Ago 2009 7:43 pm
- Localização: PR
Victor:
Consequi fazer o que eu queria: gravar em 2 tabelas na mesma transação 01 Funcionário para vários Departamentos; isso graças aos métodos que você tinha passado os links, vou postar o código que acho que pode ser melhorado:
No meu checkbox de departamentos atribuo o valor que vem da seguinte array do backingBean:
private Integer[] departamentosSelecionados;
no jspx:
No backingBean criei este método que é disparado na action do botão gravar:
Como estou estudando está ferramenta para iniciar em produção de sistema como poderia melhorar este este método acima
Atenciosamente,
Rohling
Consequi fazer o que eu queria: gravar em 2 tabelas na mesma transação 01 Funcionário para vários Departamentos; isso graças aos métodos que você tinha passado os links, vou postar o código que acho que pode ser melhorado:
No meu checkbox de departamentos atribuo o valor que vem da seguinte array do backingBean:
private Integer[] departamentosSelecionados;
no jspx:
<af:selectManyCheckbox value="backingBeanScope.backing_untitled1.departamentosSelecionados}"
public String gravar() {
DCBindingContainer bc = getDCBindingContainer();
DCIteratorBinding iterDep = bc.findIteratorBinding("DepView1Iterator");
DCIteratorBinding iterFuncionario = bc.findIteratorBinding("FuncView1Iterator");
DCIteratorBinding iterDepFunc = bc.findIteratorBinding("FuncdepView1Iterator");
Row newRowFuncionario = iterFuncionario.getCurrentRow();
oracle.jbo.domain.DBSequence idfunc =(oracle.jbo.domain.DBSequence)newRowFuncionario.getAttribute("Idfunc");
for (int i : getDepartamentosSelecionados()) {
// aqui o valor de i retorna sempre um indice começando do 0,1,2... Gostaria que já receber o valor da chave
// para não necessitar fazer a pesquisa abaixo?
iterDep.setCurrentRowIndexInRange(i);
Row newRow = iterDep.getCurrentRow();
oracle.jbo.domain.DBSequence iddep = (oracle.jbo.domain.DBSequence)newRow.getAttribute("Iddep");
// aqui é uma gambi.. inclui um botão CreateInsert1 de FuncdepView1Iterator para poder aqui
// incluir um novo registro; deve ter outra maneira de fazer isso?
OperationBinding InsertFuncDepOper = bc.getOperationBinding("CreateInsert1");
InsertFuncDepOper.execute();
Row newRowDepFuncionario = iterDepFunc.getCurrentRow();
newRowDepFuncionario.setAttribute("Funcid", idfunc);
newRowDepFuncionario.setAttribute("Depid", iddep);
}
oracle.binding.OperationBinding operationBinding = bc.getOperationBinding("Commit");
operationBinding.execute();
return null;
}
Atenciosamente,
Rohling
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
em termos da tecnologia e dificil opinar pos existem varias maneiras de usar isso então a sua maneira e mais uma maneira e não esta "errada"...
o que vejo q pode ser melhorado e a questao de OO e padroes de projeto no caso MVC..
na parte em que você cria a row de Dep você poderia estar fazendo isso dentro do seu AM logo cahamdas do tipo
seriam eliminadas e tambem caso seja necessario você validar se aquele funcionario já existe para aquele departamento você fara isso ai no seu Controler (Backing Bean) e dai não ficara muito coerente..
separe isso em mais metodos melhores definidos tipo setDepartamentoPorFuncionario e outro gravar e não esqueca do seu validar
as chamadas de operationbinding devem ser usadas tambem para chamadas de metodos customizados la do seu AM e devem ser incluidas no seu pageDef traves de um methodAction
espero ter ajudado
o que vejo q pode ser melhorado e a questao de OO e padroes de projeto no caso MVC..
na parte em que você cria a row de Dep você poderia estar fazendo isso dentro do seu AM logo cahamdas do tipo
DCBindingContainer bc = getDCBindingContainer();
DCIteratorBinding iterDep = bc.findIteratorBinding("DepView1Iterator");
separe isso em mais metodos melhores definidos tipo setDepartamentoPorFuncionario e outro gravar e não esqueca do seu validar
as chamadas de operationbinding devem ser usadas tambem para chamadas de metodos customizados la do seu AM e devem ser incluidas no seu pageDef traves de um methodAction
espero ter ajudado
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes