07 procedures-curso gxxbr

  • Published on
    09-Jul-2015

  • View
    1.460

  • Download
    3

Embed Size (px)

DESCRIPTION

Genexus Course

Transcript

<ul><li><p>Procedimentos:Definem processos no interativos de consulta e atualizao da base de dados. Os procedimentospodem gerar um arquivo formato PDF, mediante o qual possvel listar informao na tela ouimpressora. Alm disso, os procedimentos podem atualizar a base de datos1.</p><p>_____________________________________________________________________________</p><p>1 Como veremos mais adiante, existe um tipo de dados especial, que no estritamente um tipo dedados, mas algo um pouco mais complexo, o business component, por meio do qual sero realizadosatualizaes a base de dados em qualquer objeto GeneXus. Portanto, utilizando variveis de tipo dedados business component, podero ser realizadas atualizaes incluso nos objetos que pornatureza no oferecem esta possibilidade, como as web panels.</p></li><li><p>Definio proceduralA diferena das regras das transaes onde as especificaes se realizam de forma declarativa eGeneXus determina no momento de gerar o programa a seqncia de execuo, nos procedimentosas especificaes se realizam de forma procedural. Desta forma, a seqncia de execuo determinada pelo analista, utilizando para isso uma linguagem simples que contem comandos decontrole, de impresso, de acesso a base de dados, etc.</p><p>Definio sobre a base de conhecimentoA grande potencia da linguagem dos procedimentos est que as definies so realizadas sobre abase de conhecimento e no diretamente sobre o modelo fsico (tabelas, ndices, etc.). Isto nos permiteutilizar automticamente todo o conhecimento j incorporado ou gerado por GeneXus a partir dasespecificaes realizadas.</p><p>Por exemplo, se desejamos mostrar o resultado de uma frmula suficiente nomear o atributo frmulano lugar adequado e GeneXus dispara o clculo mostrando o resultado, sem necessidade do analistaoferecer nenhuma outra informao. A informao de como se calcula um atributo frmula est contidana base de conhecimento.</p><p>Tambm podemos utilizar o conceito de tabela estendida, j que GeneXus conhece as relaes entreas tabelas da base de dados, o analista no precisa explicitar estas relaes na hora de recuperardados.</p><p>Independncia da base de dados: definio a nvel de atributosA definio dos procedimentos se faz a nvel de atributos: no necessrio indicar explcitamentequais tabelas ser</p><p> ndices. Somente mencionando os atributos quedeseja acessar suficiente para que o GeneXus determine esta informao. Isto possvel porqueGeneXus possui um completo conhecimento da estrutura da base de dados.</p><p>Desta maneira obtemos uma real independncia da base de dados, j que qualquer alterao nastabelas ser gerenciado automaticamente pelo GeneXus e desta forma, para atualizar os programasalcana em grande parte das vezes, como regerar os objetos sem ter que modificar nada doprogramado neles.</p></li><li><p>Para cada procedimento se pode definir:</p><p> Source: Aqu o cdigo correspondente a lgica do procedimento. Tambm podem definir-se ao finaldo cdigo subrotinas1 que podem ser chamadas a partir do prprio cdigo mediante o comando adequado.</p><p> Layout: As como as transaes possuem uma tela (form), os procedimentos possuem um layout de sada.Nesta seo se define apresentao do procedimento: os dados que se quer listar e o formato da sada.</p><p> Regras-Propriedades: Definem aspectos gerais do procedimento, como seu nome, descrio, tipo de sada(impressora, arquivo, tela), parmetros que recebe o objeto, etc. Condies: Condies que devem cumprir os dados para ser recuperados (filtros). Variveis: Variveis locais ao objeto. Ajuda: Permite a incluso de texto de ajuda, para ser consultado pelos usurios em tempo de execuo, para ouso do procedimento. Pode ter uma ajuda para cada linguagem.</p><p> Documentao: Permite a incluso de texto tcnico, para ser utilizado como documentao do sistema.</p><p>_____________________________________________________________________________________</p><p>1 No sero vistas no presente curso. Ver no Curso No Presencial de GeneXus.</p></li><li><p>Por exemplo, vamos supor que queremos implementar um procedimento para imprimir o identificador,nome e pas de todos nossos clientes e queremos que a listagem saia como mostrada na figura.</p><p>Para isso, devemos identificar na sada da listagem das distintas reas que o compem. A cada umadelas a representaremos com um Printblock.</p><p>Os primeiros dois Printblocks ilustram no GeneXus tal qual as primeiras duas reas pois contemunicamente textos, linhas, retngulos. Tambm poderamos ter colocado estas duas reasconvertendo-as em uma e utilizando portanto um nico Printblock.</p><p>O terceiro Printblock ser o correspondente da rea de dados variveis da figura anterior, querepresenta informao que deve ser extrada da base de dados.O que queremos mostrar neste caso o identificador e nome de cada cliente, junto com o nome dopas ao que pertence. Esta informao a representada pelos atributos CustomerId, CustomerNamee CountryName da base de conhecimento da aplicao, o terceiro Printblock conter os trs controlesatributo CustomerId, CustomerName e CountryName.</p><p>Transformando as reas em Printblocks, o Layout do procedimento ficar como o da figura na pginaseguinte.</p></li><li><p>O Layout de um procedimento ser uma sucesso de Printblocks que no tem por que seguir aordem em que deseja que apaream na sada.</p><p>No exemplo anterior, o mesmo procedimento teria sido impresso se houvesse especificado osPrintblocks na ordem inversa (ou em qualquer ordem).</p><p>Aqui simplesmente so declarados. A ordem que so executados fica determinado na seo Sourceque a que contem a lgica do procedimento. A partir dali sero chamados mediante um comandoespecfico para tal finalidade (o comando print).</p><p>Por esta razo, cada Printblock deve ter um nome nico para poder ser referenciado depois a partir doSource.</p><p>No exemplo, para listar todos os clientes, o Printblock de nome customer deve ser chamado dentrode uma estrutura repetitiva no Source. Esta estrutura repetitiva o comando For each queestudaremos depois.</p></li><li><p>O Printblock um tipo de controle vlido somente nos procedimentos, que inserido e eliminado doLayout pelo analista, e que contem outros controles -atributos, textos, retngulos, linhas, etc.-, sendoestes ltimos os que efetivamente especificam qu o que se quer mostrar na sada.</p><p>Para inserir os controles no Form de uma transao contamos com uma toolbox. A mesma toolbox seutiliza para inserir os controles no Layout. De fato esta toolbox est disponvel para todos os objetosGeneXus criados, e em cada caso ter os controles disponveis segundo o tipo de objeto.</p><p>Para inserir um Printblock - boto direito em qualquer lugar do layout e selecionamos InsertPrintblock.</p><p>Como todo controle, o Printblock possui propriedades que podem ser configuradas pelo usurio. Emparticular, tem a propriedade Name, muito importante visto que o identificador do Printblock. Comeste identificador que o Printblock pode ser chamado a partir do Source para ser impresso.</p><p>Para acessar as propriedades de um Printblock, o selecionamos e pressionamos F4 ouView/Properties.</p></li><li><p>Nesta seo se define a lgica do procedimento .</p><p>A linguagem utilizada para programar o cdigo fonte dos procedimentos muito simples, e consta dealguns comandos que veremos.</p><p>O estilo de programao procedural imperativo o Source ser uma sucesso de comandosonde a ordem fundamental: a ordem em que estejam especificados corresponder, excetoexcees, a ordem em que sero executados.</p><p>Existem, como em toda linguagem imperativa, comandos de controle para a execuo condicional (if,do case), o repetitivo (do while, for), para chamar a outro objeto (call), para cortar as iteraes dentrode um loop (exit) ou abandonar o programa (return), assim como tambm comandos especficosdesta linguagem: para imprimir um Printblock do Layout (print), para acessar a base de dados (Foreach), para inserir novos registros em uma tabela (new), para chamar a uma subrotina (do), etc.</p><p>No final da sucesso de comandos que constitui o cdigo geral ou principal do procedimento, podemdefinir-se subrotinas que podem ser chamadas (mediante o comando do) a partir do cdigo geral.No podem ser chamadas a partir de outro objeto (so locais).</p><p>Por sua importncia, comeamos estudando detalhadamente o comando de acesso a base de dados,fundamental na hora de recuperar a informao armazenada. Depois sero tratados brevemente oscomandos de controle, que so comuns a todos as linguagens de programao imperativa, oscomandos de atribuio e os de impresso.</p></li><li><p>A definio do acesso a base de dados para recuperar a informao se realiza com um nicocomando: o comando For each1.</p><p>Usando o For each se define a informao que vai acessar. A forma de o fazer baseada em nomearos atributos a utilizar.</p><p>Assim, com este comando se definem quais atributos so necessrios em qual ordem vai serrecuperada, e GeneXus se encarrega de encontrar como fazer. No se especifica de quais tabelas sedevem obter, nem quais ndices se devem utilizar para acessar a essas tabelas: isso GeneXus infere.Evidentemente isto nem sempre possvel, e em tais casos GeneXus d uma srie de mensagens deerro indicando por que no se podem relacionar os atributos envolvidos.</p><p>A razo pela qual no se faz referencia ao modelo fsico de dados porque desta maneira aespecificao do procedimento de mais alto nvel possvel, de tal forma que ante mudanas naestrutura da base de dados a especificao do mesmo se mantenha vlida a maior parte das vezes.</p><p>Quando aparece um For each se est indicando que se quer recuperar informao da base de dados.Concretamente GeneXus sabe que com um For each se quer percorrer (ou navegar) uma tabela.Para cada registro dessa tabela, se quer fazer algo com a informao associada (ex: imprimir).</p><p>Portanto, todo comando For each possui uma tabela fsica associada: a tabela que ser percorrida ounavegada. A esta tabela vamos chamar tabela base do For each.</p><p>______________________________________________________________________________</p><p>1 Quando estudarmos os business components veremos que utilizando seu mtodo Load tambm seconsegue consultar a base de dados.</p></li><li><p>Intuitivamente com este comando queremos listar identificador, nome e pas de cada um dos clientesda base de dados. Ou seja, queremos percorrer tabela CUSTOMER, e para cada cliente sejarecuperado da tabela COUNTRY o nome do pas ao qual pertence, imprimindo esta informao, juntocom o identificador e nome do cliente. (Observar que a tabela COUNTRY pertence estendida deCUSTOMER)</p><p>Como o GeneXus infere isto, s o que fizemos foi For each do exemplo informar os atributos que nosinteressava mostrar?</p></li><li><p>Dentro de todo For each navega-se - percorre ou itera - a tabela base, mas podemos acessar astabelas que constituem sua tabela estendida para recuperar a informao, por pertencer aestendida est relacionada com cada registro da tabela base com que esteja trabalhando em cadainterao (o conceito de tabela estendida muito importante neste comando e sugerimos repassarsua definio).</p><p> por isso que no For each do exemplo, a tabela base ser CUSTOMER, e acessa para cadacliente, no somente os dados de seu registro, como tambm do registro associado na tabelaCOUNTRY (que est na estendida de CUSTOMER). Dizemos ento que se percorre CUSTOMER ese acessa alm disso a de COUNTRY para buscar o resto da informao requerida.</p><p>Como podemos ver claramente no exemplo apresentado, no apresentamos de forma explcita aoGeneXus esta informao. No necessrio, j que o GeneXus conhece as relaes entre astabelas, e na base os atributos mencionados dentro do For each e pode encontrar sem necessidadede mais informaes uma tabela estendida que os contenha.</p><p>A tabela base dessa estendida escolhida como tabela base do For each.</p></li><li><p>A tabela base correspondente a essa tabela estendida chamada de tabela base do For eache ser percorrida seqencialmente, executando para cada registro o que for indicado noscomandos internos do For each.</p></li><li><p>Para o exemplo apresentado onde queremos uma lista dos clientes: seu identificar, nome e nome depas, observamos os atributos utilizados dentro do For each, e percebemos que eles so os contidosno print block de nome customer: CustomerId, CustomerName e CountryName.</p><p>Em que tabelas esto estes atributos?</p><p> CustomerId est em 2 tabelas:- CUSTOMER como chave primria (PK).- INVOICE como chave estrangeira (FK).</p><p> CustomerName est somente em CUSTOMER ( um atributo secundrio). CountryName est somente em COUNTRY ( um atributo secundrio).GeneXus conhece as relaes entre as tabelas. Podemos ver o diagrama correspondente s tabelasnas quais aparecem os atributos do For each (Tools/Diagrams).</p><p>Aqui podemos ver porque do requerimento da tabela estendida seja a mnima (entendendo pormnima aquela que envolve um nmero menor de tabelas). A tabela estendida de INVOICE tambmcontm todos os atributos do For each, mas no mnima, pois a de CUSTOMER tambm oscontm.</p><p>Portanto, se vamos percorrer seqencialmente tabela CUSTOMER, e para cada registro dessatabela, vamos acessar a tabela COUNTRY, e recuperar o registro da mesma que cumpre:COUNTRY.CountryId = CUSTOMER.CountryId e para o mesmo recupera-se o valor do atributoCountryName, para poder imprimi-lo, junto com o cdigo e nome do cliente.</p></li><li><p>Listagem de navegao</p><p>GeneXus oferece para todos os objetos uma lista conhecida como listagem de navegao, que oresultado da especificao do objeto. Esta listagem muito til para os relatrios, j que indica quaisso as tabelas que so acessadas em cada For each do Source, se existe um ndice para recuperaros dados da tabela base, e em caso de que assim seja qual esse ndice (seu nome), se aplicamfiltros sobre os dados ou se devemos listar todos, etc.</p><p>Desta maneira, o analista no tem que executar o objeto para verificar se a lgica a esperada.Estudando a listagem de navegao j tm a informao necessria para saber se est percorrendoa tabela esperada, se esto aplicando corretamente os filtros desejados, etc.Como pode ser visto, esta listagem mostra para o comando For each que aparece no Source, qual a tabela base do mesmo, por que ordem essa consulta resolvida (a ordem que os resultados soimpressos), se existe um ndice que satisfaa essa ordem, qual seu nome, e aparecem mais duasinformaes envolvidas: os filtros de navegao e o diagrama de tabelas.</p><p>Os filtros da navegao indicam que faixa da tabela base que vai ser percorrida. No Exemplo percorrida toda a tabela base do For each: comeando pelo primeiro registro de CUSTOMER, atque chegue ao fim de tabela (utilizando o ndice ICUSTOMER).Tambm mostrado num pequeno diagrama de tabelas, a tabela base do For each com sua chaveprimria, e endentadas todas as tabelas da estendida que devam ser acessadas para recuperar ainformao associada ao registro da tabela base que est sendo trabalhada em cada interao doFor each. Neste caso se mostra somente a tabela COUNTRY.</p><p>No comando For each do Exemplo no aparece explicitamente nenhuma informao referente aordem desejada da impresso da informao do relatrio. Neste caso GeneXus escolhe a ordem dachave primria da tabela base do For each. por esta razo que no For each do Exemplo,GeneXus determinou que a ordem realizado pelo atributo CustomerId, chave primria da tabelaCUSTOMER.</p></li><li><p>Para restringir os dados que queremos listar no For each so utilizadas as clusulas where do comando.</p><p>Se na listagem de clientes no quere...</p></li></ul>