Pessoal, conforme prometido, segue meu primeiro post, é um tutorial abordando como tratar objetos entre conectores, ou seja, exportar um objeto para a sessão do WI e outro lendo este objeto da sessão. O que me motivou a tentar fazer esse processo, foi um caso aqui no trabalho, onde eu consumia um WebService que me retornava um array de objetos e precisava usar esse objeto em outro momento dentro de outra pagina. Para resolver este problema eu criei um conetor que lia esse objeto exportado e montava um GRID JAVA(Posso fazer um outro tutorial explicando como usar essa GRID JAVA, em caso de pedidos 🙂 ) com o resultado do WebService. Bom, então vamos ao que interessa.
1 – Primeiro Passo
Primeiro vamos criar um projeto de teste, chamado projeto_objeto. (Assume-se que já saiba criar um projeto no WI):
Feito isto criaremos um projeto JAVA que conterá os 2 conectores, um sendo que exportará um objeto chamado FRUTAS’ e outro conector que lerá esse objeto e mostrará na página.(Para criação do conector usaremos o NetBeans)
Selecione a opção Aplicação Java e clique em next.
Coloque o nome do projeto e clique em finalizar. Usaremos o nome ProjetoConector.
Crie a seguinte classe exportaobjeto que exportará nosso obejeto para a sessão e exportaobjetorecebe que recebe o objeto, todos no pacote br.com.projetoteste. Ficará na seguinte
disposição:
2- Vamos criar o conetor
Para que o WI reconheça um conector em seu projeto é necessário estender as seguintes interfaces em suas classes: InterfaceConnector, InterfaceParameters:
public class exportaobjetorecebe implements InterfaceConnector, InterfaceParameters{
}
Para corrigir o erro, faz-se necessário importar a lib do wi. Clique com o botão direito do projeto no netbeans, depois clicar no botão propriedades. Ao abrir uma janela, selecione bibliotecas, após clicar em Adicionar JAR/Pasta. Selecione a lib do WI que pode ser encontrada dentro do projeto criado pelo próprio WI(projeto_objeto).
Feito isto, clique na sugestão do NetBeans e importe os métodos abstratos das intefaces:
Dois métodos serão criados, o getOutputParameters() que exporta os parâmetros desejados.
Conforme exemplo a seguir:
@Override
public JavaParameter[] getOutputParameters() {
JavaParameter[] out = new JavaParameter[1];
out[0] = new JavaParameter("tmp.objeto", "Retorna Obejto");
return out;
}
E o getInputParameters() serve para ler os parâmetros que estão na sessão do WI. Podemos determinar os nomes do parâmetros de entrada, como no exemplo a seguir.
@Override
public JavaParameter[] getInputParameters() {
JavaParameter[] in = new JavaParameter[1];
in[0] = new JavaParameter("tmp.objeto", "Retorna Obejto");
return in;
}
Outro método criado e muito importante é o execute. Dentro dele é criada toda a lógica que precisamos, pois é o primeiro método que o WI executa em um conector.
@Override
public void execute(ExecuteParams ep) throws UserException {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
Feito isto, criaremos nosso bean que será o objeto a ser exportado, chamaremos de fruta com os seguintes campos, ds_nome, nr_preco, nr_peso.
public class fruta {
private String ds_nome;
private Double nr_preco;
private Double nr_peso;
/**
* @return the ds_nome
*/
public String getDs_nome() {
return ds_nome;
}
/**
* @param ds_nome the ds_nome to set
*/
public void setDs_nome(String ds_nome) {
this.ds_nome = ds_nome;
}
/**
* @return the nr_preco
*/
public Double getNr_preco() {
return nr_preco;
}
/**
* @param nr_preco the nr_preco to set
*/
public void setNr_preco(Double nr_preco) {
this.nr_preco = nr_preco;
}
/**
* @return the nr_peso
*/
public Double getNr_peso() {
return nr_peso;
}
/**
* @param nr_peso the nr_peso to set
*/
public void setNr_peso(Double nr_peso) {
this.nr_peso = nr_peso;
}
}
Veremos que para exportar o objeto não será nenhum bicho de sete cabeças, faremos simplesmente instanciar nossa classe bean frutas, populá-la e chamar o método WIMap.putobj, conforme imagem a seguir:
@Override
public void execute(ExecuteParams ep) throws UserException {
fruta f = new fruta();
f.setDs_nome("MANGA");
f.setNr_peso(1.0);
f.setNr_preco(8.55);
ep.getWIMap().putObj("tmp.objeto", f);
}
Deste jeito o WI exportará o objeto fruta para a sessão do seu projeto WEB em uma variável chamada tmp.obejeto.
Agora para ler esse objeto é só fazer o processo contrário. Na classe exportaobjetorecebe leremos essa variável tmp.objeto convertendo-a em nosso bean frutas, conforme imagem abaixo:
@Override
public void execute(ExecuteParams ep) throws UserException {
fruta f = (fruta) ep.getWIMap().getObj("tmp.objeto");
ep.getWIMap().put("tmp.ds_nome", f.getDs_nome());
ep.getWIMap().put("tmp.nr_preco", String.valueOf(f.getNr_preco()));
ep.getWIMap().put("tmp.nr_peso", String.valueOf(f.getNr_peso()));
}
@Override
public boolean exit() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public JavaParameter[] getInputParameters() {
JavaParameter[] in = new JavaParameter[1];
in[0] = new JavaParameter("tmp.objeto", "Retorna Obejto");
return in;
}
Perceba que dessa vez usamos o método put do WI para exportar as variáveis do nosso objeto recebido da classe exportaobjeto.
Feito isto vamos compilar nosso projeto, gerar os .class e colocar dentro no nosso projeto WEB. O projeto final ficará na seguinte disposição:
Para jogar as classes compiladas em nosso projeto WEB é só copiar a raiz do pacote(br.com.projetoteste) e jogá-lo na pasta webapps/projetoteste/WEB-INF/classes. Caso a pasta classes não exista em seu projeto, crie-a. Ficará na seguinte disposição:
3- Reinicie o tomcat.
4- Executando o processo
Agora vamos fazer a chamada do conetor em uma pagina de teste que criaremos no WI.
Em uma pagina de teste selecione o Pré-Pagina. No Pré-Pagina existe uma opção Conetor Java, conforme imagem abaixo:
Na tela que irá se abrir, digite o caminho completo de sua classe no campo Nome da Classe, conforme imagem abaixo:
Volte para o pré-pagina e clique novamente em Conector Java. Faça o mesmo procedimento, porém para a classe exportaobjetorecebe.
Perceba que apareceu um campo em Parâmetros de Entrada, este campo será recebido do conector de cima, do qual exporta o objeto. Seu pré-página deverá ficar da seguinte maneira:
Agora clique na opção Editar HTML no WI e coloque os campos que são exportados do conector que lê o objeto. Ficando da seguinte maneira:
Agora basta apenas clicar em Vizualizar no WI.
Então é isso galera, espero que vocês tenham gostado do meu primeiro post, espero que seja de extrema ajuda para alguns e de estudo para outros, até o próximo post.