Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduo
Este guia tem por objetivo orientar as equipes de desenvolvimento do Sicoob Confederao sobre a tecnologia FLEX de desenvolvimento. Iremos apresentar a arquitetura, as boas prticas e as convenes usadas durante o desenvolvimento de interfaces visuais.
O que FLEX ?
A tecnologia FLEX foi lanada pela ento Macromedia em maro de 2004 que possibilita a criao de aplicaes ricas para a internet (RIA Rich Internet Application) baseada na plataforma Flash. A Adobe adquiriu a Macromedia em 2005 e em 2007 a Adobe abriu o cdigo do FLEX 3 SDK, mesmo o Flash Player continuando a ser proprietrio e comercial.
RIA
As aplicaes feitas no padro RIA visivelmente possuem uma experincia com o usurio mais robusta do aplicaes tradicionais feitas em HTML. A interatividade e recursos disponveis nesta plataforma facilitam o trabalho dos designers para criar uma interface com o usurio usando o recurso o que voc v o que voc tem (WYSIWYG).
Actionscript 3 e MXML
A linguagem usada para a programao na plataforma FLEX chamada Actionscript. Atualmente na verso 3, est em conformidade com o padro ECMAScript. Existe tambm um formato MXML que uma linguagem de marcao XML geralmente usada para a criao da interface com o usurio. No final das contas um arquivo MXML gera uma classe no formato Actionscript com o mesmo nome do arquivo em questo. Por exemplo: se existir um arquivo chamado CadastroPessoa.mxml, o compilador ir gerar uma arquivo CadastroPessoa.as com a classe CadastroPessoa dentro, tudo isso de forma transparente.
Arquitetura
Nesta arquitetura temos o navegador ou uma aplicao AIR instalada no cliente, depois que o arquivo SWF baixado para a estao de trabalho (e guardada no cache local) as chamadas a mtodos de negcio so feitas para o FLEX Gateway atravs de um protocolo chamado AMF (Action Message Format atualmente na verso 3).
Ao contrrio das aplicaes tradicionais WEB onde a marcao HTML trafegada toda vez que existe uma atualizao na tela, as aplicaes feitas em FLEX geram um nico arquivo binrio SWF que fica armazenado em cache e a partir deste momento o que passa a ser trafegado so as requisies AMF de tamanho reduzido.
HTML
Cliente
Servidor
HTML
SWF AMF
Cliente
Servidor
AMF
SWF Cliente
Servidor
HTTP
AMF
Navegador AIR FLEX Gateway
Este protocolo foi introduzido com o Flash Player 6 e era conhecido como AMF 0. A verso 3 do protocolo AMF foi introduzida com a chegada do Flash Player 9, com suporte a novos tipos de dados. Existem diversos gateways para as mais diferentes linguagens de programao. No Sicoob Confederao estamos utilizando gateways para a tecnologia JAVA (GraniteDS) e .NET (FluorineFX).
Na poca que este guia foi escrito, a verso 3.0.0.477 do framework FLEX fornecido pela Adobe era a verso corrente usada no Sicoob Confederao.
Lembrando que todo arquivo com a extenso MXML tambm uma classe com o mesmo nome do arquivo. Se por exemplo existir um arquivo com o nome FuncionalidadeView.mxml, existir por conseqncia uma classe chamada FuncionalidadeView. Normalmente temos a interface grfica implementada usando um arquivo com a extenso MXML e um arquivo com a extenso AS que faz herana desta classe definida no MXML.
Com a herana temos acesso a todos os elementos da interface (aqueles que possuem a propriedade ID preenchida) e desta forma podemos manipul-los conforme a necessidade. Dentro do arquivo MXML devemos ter apenas o desenho da interface, sem cdigo de validao ou negcio.
1 private function ExecutarMetodoNegocio():void 2 { 3 var dto:RequisicaoReqDTO = new RequisicaoReqDTO(); 4 var vo:FuncionalidadeVO = new FuncionalidadeVO(); 5 6 vo.propriedade = "Valor da propriedade"; 7 8 dto.dados.objeto = vo; 9 10 var servico:ServicoJava = new ServicoJava(); 11 servico.source = "br.com.sicoob.sisbr.Projeto.ClasseFuncionalidade"; 12 servico.addEventListener(ResultEvent.RESULT, MetodoNegocio_Resultado); 13 servico.bloquearOperacao = true; 14 servico.mensagemEspera = "Carregando dados ..."; 15 16 servico.metodoNegocio(requisicaoDTO); 17 }
Na linha 11 estamos definindo qual a classe de negcio ser usada na requisio. Esta classe de servio possui atributos especiais que a torna acessvel para ter seus mtodos chamados pelo FLEX. Na linha 12 definimos qual o mtodo em nossa classe do FLEX que ir responder quando a operao de negcio finalizar e o resultado da operao estiver disponvel. Na linha 13 temos a opo de bloquear outras aes do usurio enquanto o mtodo de negcio estiver sendo executado, logo abaixo definimos a mensagem que ser exibida ao usurio enquanto a operao de negcio no for finalizada. Finalmente na linha 16 estamos chamado o mtodo de negcio (chamado metodoNegocio) passando como parmetro um objeto genrico de requisio.
Serializao de datas
O SISBR atualmente possui um mecanismo para tratamento de fuso horrio, porm dependendo da situao podero ocorrer problemas no horrio de vero. Para corrigir este problema, os objetos do tipo VO e DTO contendo atributos do tipo data devero estar implementados da seguinte maneira.
FLEX
O tipo Date dever ser substitudo pela interface IDateTime, que est no projeto BancoobFlex. Para atribuir o valor para esta interface proceder da seguinte maneira:
var meuvo:VOTeste = new VOTeste(); meuvo.minhaData = DateTimeBase.getDateTime(new Date());
ou
meuvo.minhaData = DateTimeBase.getDateTime(componenteData.selectedDate);
A classe DateTimeBase tambm se encontra no projeto BancoobFlex. Para recuperar o valor da data de atributos do tipo IDateTime utilizar a propriedade data conforme exemplo:
var minhaData:Date = meuvo.minhaData.data;
Caso a instncia j exista no atributo do tipo IDateTime o valor tambm poder ser atribudo utilizando a propriedade data conforme exemplo:
meuvo.minhaData.data = new Date();
ou
meuvo.minhaData.data = componenteData.selectedDate;
Caso seu VO Flex seja um mapeamento de uma entidade JAVA proceder da seguinte maneira:
var meuvo:VOTeste = new VOTeste(); meuvo.minhaData = DateTimeBase.getDateTimeEntity(new Date());
ou
var meuvo:VOTeste = new VOTeste(); meuvo.minhaData = DateTimeBase.getDateTimeEntity(componenteData.selectedDate);
.NET
O tipo DateTime dever ser substitudo pela interface IDateTime, que est no projeto Bancoob (BancoobDLL no pacote br.com.bancoob.negocio.iface). Para atribuir o valor para esta interface proceder da seguinte maneira:
VOTeste meuvo = new VOTeste(); meuvo.minhaData = DateTimeBase.getDateTime(new DateTime());
A classe DateTimeBase tambm se encontra no projeto Bancoob (BancoobDLL no pacote br.com.bancoob.negocio.dto). Para recuperar o valor da data de atributos do tipo IDateTime utilizar a propriedade data conforme exemplo:
DateTime minhaData = meuvo.minhaData.data;
Caso a instncia j exista no atributo do tipo IDateTime o valor tambm poder ser atribudo utilizando a propriedade data conforme exemplo:
meuvo.minhaData.data = new DateTime();
JAVA
No JAVA dever ser utilizada a classe br.com.sicoob.tipos.DateTime para VO e DTO e br.com.bancoob.persistencia.types.DateTimeDB para entidades. importante verificar se o VO alterado utilizado por outras funcionalidades e fazer as alteraes em todos os casos para no gerar problemas.
Tipos de Aplicao
Mdulos ou Aplicaes
Este tipo de aplicao grande maioria dos mdulos presentes no SISBR WEB. Nesta modalidade os mdulos que podem representar um ou mais casos de uso so abertos quando o usurio seleciona um item de menu do aplicativo.
Plataformas
Quando uma aplicao possui necessidades especiais em relao a usabilidade e experincia com o usurio, agrupam um conjunto de funcionalidades que no fariam sentido estarem separadas ento este o caso para a criao de uma plataforma. Atualmente contamos com as seguintes plataformas: Plataforma Plataforma Plataforma Plataforma Plataforma Plataforma de Atendimento Multi-Cooperativa (Contabilidade) de Monitorao de Documentao de Apoio a Deciso (PAD) da Tecnologia da Informao (PTI)
Tabela DefinicaoSelecaoGeral
NUMCOLUNAPADRAO: O nmero da coluna representa a opo da combo Tipo de Procura que ser selecionada por padro na inicializao do componente. Esse nmero obedece notao Java de numerao, portanto para selecionar a primeira coluna deve-se informar o valor 0. Esse valor indica o campo NUMINDEX da tabela GEN.COLUNASELECAOGERAL.
BOLHABILITARFILTRO: Esse campo existe para compatibilizao das verses do componente. Nessa verso (1.0) o valor deve ser sempre 1.
NUMLISTA: Esse campo existe para compatibilizao das verses do componente. Nessa verso (1.0) o valor deve ser sempre 0.
DESCCONSULTABASE: Esse campo deve ser preenchido com a parte inicial da consulta a ser realizada no banco de dados. Ex: select idUsuario, descNomeUsuario from Usuario.
NOMEJNDIDATASOURCE: Nome JNDI do data source que dever ser utilizado para conexo com o banco de dados onde ser realizada a consulta. Se o banco de dados onde a consulta deve ser realizada for de cooperativa, o nome JNDI deve ser jdbc/BancoobDS.
BOLDATASOURCECOOPERATIVA: Esse campo indica se o banco de dados onde a consulta deve ser realizada de cooperativa.
Para facilitar, abaixo, segue um exemplo de script de insero de definio do Seleo Geral Java.
Scripts DefinicaoSelecaoGeral
-- Exemplo de insert da tabela GEN.DefinicaoSelecaoGeral. -- Nesse exemplo o data source de cooperativa. insert into GEN.DefinicaoSelecaoGeral values (6035, -- IDDEFINICAOSELECAOGERAL 0, -- NUMCOLUNAPADRAO 1, -- BOLHABILITARFILTRO 0, -- NUMLISTA 'SELECT * FROM USUARIO', -- DESCCONSULTABASE 'jdbc/BancoobDS', -- NOMEJNDIDATASOURCE 1) -- BOLDATASOURCECOOPERATIVA
Figura 2. Listagem SQL de insert na tabela GEN.DEFINICAOSELECAOGERAL usando data source de cooperativa.
-- Exemplo de insert da tabela GEN.DefinicaoSelecaoGeral. -- Nesse exemplo o data source DB2. insert into GEN.DefinicaoSelecaoGeral values (5151, -- IDDEFINICAOSELECAOGERAL 0, -- NUMCOLUNAPADRAO 1, -- BOLHABILITARFILTRO 0, -- NUMLISTA 'SELECT * FROM CTR.CTR_TRANSACAO', -- DESCCONSULTABASE 'jdbc/BancoobCtrDS', -- NOMEJNDIDATASOURCE
0) BOLDATASOURCECOOPERATIVA
Figura 3. Listagem SQL de insert na tabela GEN.DEFINICAOSELECAOGERAL usando o data source de DB2.
Tabela ColunaSelecaoGeral
IDCAMPO: Esse identificador gerado automaticamente. Dessa forma o script de incluso pode ter o valor default definido por padro para esse campo.
IDDEFINICAOSELECAOGERAL: Chave estrangeira da tabela GEN.DEFINICAOSELECAOGERAL. Essa chave conecta as colunas definio do componente Seleo Geral Java.
NOMECAMPO: Nome do campo que ser pesquisado no banco de dados. Esse parmetro case sensitive e dever ter a mesma grafia do metadado do banco de dados.
DESCMASCARA: Mscara que pode ser usada na formatao do campo Procurar Por. Essa mscara funcionar somente para a coluna selecionada.
BOLINCREMENTAL: Esse campo existe para compatibilizao das verses do componente. Nessa verso (1.0) o valor deve ser sempre 0.
NUMINDEX: Esse campo indica qual a posio que a coluna de pesquisa aparecer na combo Procurar Por. Esse campo deve ser informado com ateno, pois usa a notao Java. Portanto, a primeira coluna (o primeiro item da combo Tipo de Procura) deve ter o valor 0. Na configurao do componente, mais especificamente na configurao da combo Procurar Por, as opes sero ordenadas por esse campo.
VALLARGURACOLUNA: Valor que corresponde largura da coluna. Atualmente esse campo existe para compatibilizao das verses do componente. Nessa verso (1.0) o valor deve ser sempre 10.
BOLVISIVELPROCURA: Esse campo informa se a coluna visvel para a procura. Se esse campo tiver com o valor 0 ele no aparecer na combo de opes de pesquisa (combo Tipo de Procura).
BOLPESQUISARMASCARA: Esse campo informa se a pesquisa ser realizada por um valor formatado com a mscara definida no campo GEN.COLUNASELECAOGERAL.DESCMASCARA.
NUMCOLUNARETORNO: Esse campo existe para compatibilizao das verses do componente. Nessa verso (1.0) o valor deve ser sempre 0.
DESCPROCURAPOR: Esse campo o restante da consulta informada na tabela de GEN.DEFINICAOSELECAOGERAL. O valor informado no campo
CODTIPOALINHAMENTO: O cdigo do tipo de alinhamento define como a coluna ser alinhada na grid de resultados apresentados. Os alinhamentos possveis so: esquerda (valor 0), centralizado (valor 1), direita (valor 2).
CODTIPOALINHAMENTOCABECALHO: O cdigo do tipo de alinhamento define como o cabealho da coluna ser alinhada na grid de resultados apresentados. Os alinhamentos possveis so: esquerda (valor 0), centralizado (valor 1), direita (valor 2).
CODTIPOCOLUNAGRID: O cdigo do tipo da coluna serve para informar que tipo de dados ser apresentado na grid de resultados (texto, checkbox, etc). Nessa verso (1.0) o valor deve ser sempre 0.
CODTIPOFORMATOTEXTO: Esse cdigo serve para informar o tipo do campo de pesquisa na tela (caixa de texto Procurar Por). A validao ser configurada de acordo com o valor informado. Os valores possveis para esse campo so: SEMFORMATO = 0; NUMERICO = 1; MAIUSCULAS = 2; MINUSCULAS = 3; DATA = 4; SIMNAO = 5; VERDADEIROFALSO = 6; LISTAVALORES = 7.
CODTIPOSORT: Esse cdigo serve para informar o tipo das clulas da grid de resultados quando a ordenao for solicitada. A ordenao solicitada quando o usurio clica no cabealho da coluna. Os tipos possveis so: STRING = 1; NUMERIC = 2; DATE = 3; DATETIME = 4; TIME = 5.
DESCTITULO: O valor desse campo ser apresentado na combo de Tipo de Procura e no cabealho da grid de resultados. BOLVISIVEL: Esse campo indica se a coluna visvel ou no na grid de resultados. Dessa forma, se o campo estiver com o valor 1, uma coluna com os valores recuperados na pesquisa sero apresentados na grid de resultados. Caso o valor seja 0, o campo poder ser usado para pesquisa, mas no ser visualizado na grid de resultados.
Script ColunaSelecaoGeral
-- Exemplo de insert da tabela GEN.ColunaSelecaoGeral insert into GEN.ColunaSelecaoGeral values (default, -- IDCAMPO 6035, -- IDDEFINICAOSELECAOGERAL 'IDUsuario', -- NOMECAMPO null, -- DESCMASCARA 0, -- BOLINCREMENTAL 1, -- NUMINDEX 10, -- VALLARGURACOLUNA 1, -- BOLVISIVELPROCURA 0, -- BOLPESQUISARMASCARA
0, -- NUMCOLUNARETORNO 'where idUsuario = ${IDUsuario}', -- DESCPROCURAPOR 1, -- CODTIPOALINHAMENTO 1, -- CODTIPOALINHAMENTOCABECALHO 1, -- CODTIPOCOLUNAGRID 2, -- CODTIPOFORMATOTEXTO 1, -- CODTIPOSORT 'ID USURIO', -- DESCTITULO 1) -- BOLVISIVEL
Figura 4. Listagem SQL de insert na tabela GEN.COLUNASELECAOGERAL.
Nesse trecho de cdigo definimos o valor do atributo tipoProcura para o valor do identificador da tabela GEN.DEFINICAOSELECAOGERAL. Se o componente estiver configurado para usar data source de cooperativa, ento o atributo numCooperativa poder ser informado. Dessa forma, a pesquisa ser realizada na base da cooperativa informada. Caso o nmero da cooperativa no seja informado, ento a consulta ser realizada na base da cooperativa que o usurio estiver logado. Como dissemos anteriormente, o componente Seleo Geral Java ser muito utilizado em telas do tipo CRUD. Assim, o trecho de cdigo da Figura 5 deve ser combinado com o componente ListaCadastroView.
Abaixo, nas Figuras 6, 7 e 8, veremos um exemplo dessa integrao. Perceba que a tela de incluso/edio/visualizao continua sendo implementada separadamente, bastando inform-la na tag <formularioCadastro>. <?xml version="1.0" encoding="utf-8"?> <ListaCadastroView xmlns="br.com.bancoob.componentes.cadastro.*" xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:ns1="br.com.bancoob.componentes.painellista.*" xmlns:tipoProcesso="br.com.sicoob.sisbr.smartConcept.modelagemNe gocio.modulos.tipoProcesso.*" xmlns:tipoProcesso1="br.com.sicoob.sisbr.tipoProcesso.*" xmlns:servico="br.com.bancoob.util.servico.*" xmlns:selecaoGeral="br.com.bancoob.sisbr.componentes.selecaoGera l.*" backgroundAlpha="0.0" borderStyle="solid" borderThickness="0" fecharFormularioAoIncluir="false" deveLimparPesquisa="false" width="700" height="500">
<formularioCadastro>
<tipoProcesso1:TipoProcessoEdicao/> </formularioCadastro>
</ListaCadastroView>
Figura 6. Listagem MXML com exemplo de integrao ListaCadastroView com Seleo Geral Java.
package {
import br.com.bancoob.componentes.painellista.PainelListaBanco; import br.com.bancoob.dto.ConsultaDto; import br.com.bancoob.dto.RequisicaoDTO; import br.com.sicoob.sisbr.smartConcept.modelagemNegocio.dto.ModelagemN egocioReqDTO; import br.com.sicoob.sisbr.smartConcept.modelagemNegocio.vo.TipoProcess oVO; import br.com.sicoob.sisbr.tipoProcesso.TipoProcessoSelecaoView; import mx.events.FlexEvent;
//************** // Eventos: //************** protected override function init(event: FlexEvent):void { super.init(event); } //*************************************** // Metodos Herdados: //*************************************** protected override function montarDtoExclusao(item:Object):RequisicaoDTO { var dto: ModelagemNegocioReqDTO = new ModelagemNegocioReqDTO(); var tipoProcesso : TipoProcessoVO = new TipoProcessoVO(); tipoProcesso.codigo = item.CODTIPOPROCESSO; tipoProcesso.nome = item.DESCTIPOPROCESSO; dto.dados.TipoProcesso = tipoProcesso; return dto; } } }
Figura 7. Listagem ActionScript com exemplo de integrao ListaCadastroView com Seleo Geral Java.
O componente Procurar Geral Java usa a infraestrutura do componente Seleo Geral Java, ou seja, todas as definies e colunas de definies que esto criadas para o componente Seleo Geral Java podem ser utilizadas pelo componente Procurar Geral Java. Para utilizar o componente Procurar Geral Java no seu caso de uso basta inserir o seguinte cdigo, informando o tipoProcura da consulta desejada (previamente cadastrada na tabela GEN.DEFINICAOSELECAOGERAL), o campoCodigo e o
campoDescricao.
Para entender o funcionamento desses dois campos vamos clicar no boto Lupa. A tela do componente Seleo Geral ir abrir, conforme a Figura 11.
Figura 11. Tela do componente Seleo Geral Java aberta a partir do componente Procurar Geral Java.
Aps o preenchimento do campo Procurar Por e do clique no boto Procurar, o componente Seleo Geral Java ir executar a consulta configurada e apresentar o resultado, conforme a Figura 12.
Figura 12. Tela do componente Seleo Geral Java apresentando os resultados da pesquisa.
Ao selecionar o item da grid de resultados e clicar no boto OK, o item selecionado ser includo na tela inicial do nosso exemplo. A imagem da Figura 13 mostra esse comportamento.
Figura 13. Tela principal do componente Procurar Geral Java apresentando um elemento selecionado.
Rtulo Rtulo MultLine Campo Data Campo Hora Tipo Hora Texto Somente Maisculas Permitir Valores Negativos Aceitar Nulo Formato Tipo de Entrada Valor Casas Decimais Agrupar Dgitos Validar Obrigatrio Validar Email Validar Mensagem
Valor Mnimo Valor Mximo Navegar com tecla Enter Travar Digitao Casas Decimais Arredondamento de Valores Permitir Habilitar Validar Check Navegar com tecla Enter Permitir Habilitar Combo Label Item Opcional Validar Mensagem Validar Obrigatrio Travar Seleo Contedo Maisculo Somente Maisculas Identificador Item Navegar com tecla Enter Permitir Habilitar Inserir Item Opcional Procurar Item por Nome Procurar Item por Objeto Validar Is Selecionado Combo Booleana
Label Verdadeiro Label Falso Valor Selecionado Contador Permitir Habilitar Editor Texto Permitir Habilitar Input CNPJ Input CPF Mscara Rdio Permitir Habilitar Navegar com tecla Enter Rdio Grupo Bancoob Texto rea Permitir Habilitar Navegar com tecla Enter Somente Maisculas Validar Obrigatrio Validar Mensagem Lista Seleo
Validador Campo Preenchido Validador CNPJ Validador CPF Validador Expresso Regular Validador Igualdade Campo Validador Intervalo Numrico
Boto Canvas Bancoob Canvas Validvel Tabela Paginada Barra Botes Formulrio Painel Filtro Painel Lista Advanced Data Grid Bancoob Alerta Calendrio Janela