10 sd ts-curso-gxxbr

289 visualizações

Publicada em

Genexus Course

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
289
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
11
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

10 sd ts-curso-gxxbr

  1. 1. 226
  2. 2. 227
  3. 3. 228 O editor de tipos de dados estruturados é similar ao editor de transações. Contem: Propriedade Name, com o nome que identifica ao membro, subestrutura ou coleção. Propriedade Type, na qual se deve selecionar um tipo de dados simples, um domínio, ou um tipo de dados estruturado que já tenha sido definido na KB (propriedade Type somente adquire valor se estiver definindo um membro e não uma subestrutura ou coleção). Propriedade Is Collection, para indicar se o membro representa uma lista (em seguida veremos um exemplo). Observe que uma subestrutura é um membro composto, ao invés de ser um simples. Em particular ele também é um tipo de dados estruturado. Fazendo botão direito sobre um membro da estrutura, se mostra a janela que se vê a esquerda, onde se pode inserir outro membro, ou uma subestrutura. Tip: Se desejar criar um SDT com exatamente a mesma estrutura que a de uma transação, então ao invés de definir um a um todos os membros, subestruturas e coleções, basta arrastar (fazer Drag & Drop) o nome da transação desde o Folder View para a estrutura em edição do SDT. Da mesma forma, se desejar que um membro da estrutura corresponda a um atributo, pode selecionar e arrastar o atributo desde o Work With Attributes (janela editável da opção View do menu de GeneXus) ou inserir com o diálogo Insert/Attribute do menu de GeneXus.
  4. 4. 229 Marcando o check box Is Collection se abrirá um ramo da estrutura como se poder, onde é pedido dois nomes: o da coleção em si, e o de cada item da mesma. Como veremos em seguida, quando se define uma coleção, junto com o SDT se estará criando implicitamente outro, que corresponderá aos itens da coleção. É feito dessa maneira para depois se definir uma variável do tipo de dados do item e depois agregá-la para a coleção.
  5. 5. 230 A direita pode se ver o diálogo de propriedades de uma variável &country que se está definindo dentro de algum objeto. O SDT Country definido na KB tal como se aprecia na página anterior, da lugar a criação de dois outros correspondentes aos itens da coleção “country.City”. Este último é devido ao caso de poder querer definir uma variável somente desse tipo de dados, para depois agregá-la com o método Add que já mencionaremos, na coleção. Observe que a variável &country foi definida do tipo de dados “country” que aparece na lista obtida ao fazer clique no combo box da propriedade “Data Type” do diálogo de definição de propriedades da variável.
  6. 6. 231
  7. 7. 232 Aqui se apresenta um exemplo com o qual continuaremos trabalhando. Agregamos a nossa realidade uma transação de recibos. Vamos supor que uma vez no mês, se lança um processo de faturamento, se escolhe período de faturamento (usualmente todo o mês anterior) se contabilizam todas as faturas efetuadas por cliente, e se gera um recibo para o mesmo (autonumber). A geração do recibo será automática (será realizada pelo nosso sistema); esse é um tema que veremos em breve. Por agora, vamos supor que necessitamos um procedimento que devolva os dados de um recibo dado (por exemplo, o de id. 7). Uma opção é acessar mediante um for each a tabela BILL criada a partir da transação com o mesmo nome, e junto com a regra parm: parm( out: BillDate, out: CustomerId, out: CustomerName, out: BillInvoicePeriodStartDate, out: BillInvoicePeriodEndDate, out: BillAmount); implementar o pedido. A outra opção, é devolver toda essa informação em somente uma variável estruturada! parm( out: &bill); carregada como se mostra acima. Para isso se define um SDT baseado na transação Bill (os SDTs não podem ter o mesmo nome que uma transação, razão pela qual a chamamos BILL_SDT). Para não ter que ingressar um por um os membros do SDT com o mesmo nome que os atributos da transação, basta arrastar a transação Bill desde o Folder View, dentro da estrutura do SDT e automaticamente se inicializará como se mostra acima.
  8. 8. 233 Vamos supor que queremos devolver uma lista de recibos (por exemplo, os que foram efetuados numa faixa de datas dado).
  9. 9. 234 Tem que pedir novo espaço de memória para a variável &bill, para a seguinte iteração. Como veremos em breve, existe um modo muito mais simples, de nível mais alto, DECLARATIVO, de obter a coleção de SDTs carregada, sem ter que nos preocuparmos em realizar as operações de baixo nível, como agregar uma variável na coleção e pedir memória...
  10. 10. 235 ...este modo declarativo, portanto de alto nível, de carregar uma coleção de SDTs se conhece com o nome de Data Provider. Podemos pensá-lo como um procedimento especializado, que devolverá sempre informação estruturada (seja simples ou como coleção). Aqui apresentamos o exemplo, que depois ampliaremos quando entrarmos de fato neste tema.
  11. 11. 236
  12. 12. 237 A variável &var vai tomando os valores de cada posição da lista. Não é possível obter a posição do item durante percorrê-la, para isto é necessário definir uma variável que atue como contador. Como pode ser facilmente inferido, este comando é válido para coleções de qualquer tipo de dados, não somente SDTs.
  13. 13. 238 As propriedades Count e CurrentItem somente estão disponíveis para variáveis SDT Collection.
  14. 14. 239 Aqui se apresentam a maioria dos métodos de tipos de dados estruturados. Alguns se aplicam a variáveis SDT não coleção, se representam com &var, outros a coleções, se representam com &cVar. Para a lista completa, assim como exemplos, acessar ao wiki ou ao help da versão.
  15. 15. 240
  16. 16. 241 Pode selecionar-se do SDT os membros que se querem carregar como colunas do grid. Observe que em nosso caso omitimos os membros CustomerId, BillInvoicePeriodStartDate e BillInvoicePeriodEndDate.

×