10 sd ts-curso-gxxbr

16
226

description

Genexus Course

Transcript of 10 sd ts-curso-gxxbr

Page 1: 10 sd ts-curso-gxxbr

226

Page 2: 10 sd ts-curso-gxxbr

227

Page 3: 10 sd ts-curso-gxxbr

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 dadosestruturado que já tenha sido definido na KB (propriedade Type somente adquire valor se estiver definindo ummembro 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 podeinserir 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 dedefinir um a um todos os membros, subestruturas e coleções, basta arrastar (fazer Drag & Drop) o nome datransaçã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 earrastar o atributo desde o Work With Attributes (janela editável da opção View do menu de GeneXus) ouinserir com o diálogo Insert/Attribute do menu de GeneXus.

Page 4: 10 sd ts-curso-gxxbr

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 implicitamenteoutro, 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 acoleção.

Page 5: 10 sd ts-curso-gxxbr

230

A direita pode se ver o diálogo de propriedades de uma variável &country que se está definindo dentro dealgum objeto.

O SDT Country definido na KB tal como se aprecia na página anterior, da lugar a criação de dois outroscorrespondentes aos itens da coleção “country.City”. Este último é devido ao caso de poder querer definir umavariável somente desse tipo de dados, para depois agregá-la com o método Add que já mencionaremos, nacoleção.

Observe que a variável &country foi definida do tipo de dados “country” que aparece na lista obtida ao fazerclique no combo box da propriedade “Data Type” do diálogo de definição de propriedades da variável.

Page 6: 10 sd ts-curso-gxxbr

231

Page 7: 10 sd ts-curso-gxxbr

232

Aqui se apresenta um exemplo com o qual continuaremos trabalhando. Agregamos a nossa realidade umatransação de recibos. Vamos supor que uma vez no mês, se lança um processo de faturamento, se escolheperíodo de faturamento (usualmente todo o mês anterior) se contabilizam todas as faturas efetuadas porcliente, e se gera um recibo para o mesmo (autonumber). A geração do recibo será automática (será realizadapelo 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 (porexemplo, o de id. 7). Uma opção é acessar mediante um for each a tabela BILL criada a partir da transaçãocom 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 podemter o mesmo nome que uma transação, razão pela qual a chamamos BILL_SDT). Para não ter que ingressarum por um os membros do SDT com o mesmo nome que os atributos da transação, basta arrastar a transaçãoBill desde o Folder View, dentro da estrutura do SDT e automaticamente se inicializará como se mostra acima.

Page 8: 10 sd ts-curso-gxxbr

233

Vamos supor que queremos devolver uma lista de recibos (por exemplo, os que foram efetuados numa faixa dedatas dado).

Page 9: 10 sd ts-curso-gxxbr

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 acoleção de SDTs carregada, sem ter que nos preocuparmos em realizar as operações de baixo nível, comoagregar uma variável na coleção e pedir memória...

Page 10: 10 sd ts-curso-gxxbr

235

...este modo declarativo, portanto de alto nível, de carregar uma coleção de SDTs se conhece com o nome deData Provider. Podemos pensá-lo como um procedimento especializado, que devolverá sempre informaçãoestruturada (seja simples ou como coleção).

Aqui apresentamos o exemplo, que depois ampliaremos quando entrarmos de fato neste tema.

Page 11: 10 sd ts-curso-gxxbr

236

Page 12: 10 sd ts-curso-gxxbr

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 atuecomo contador.

Como pode ser facilmente inferido, este comando é válido para coleções de qualquer tipo de dados, nãosomente SDTs.

Page 13: 10 sd ts-curso-gxxbr

238

As propriedades Count e CurrentItem somente estão disponíveis para variáveis SDT Collection.

Page 14: 10 sd ts-curso-gxxbr

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 representamcom &cVar.

Para a lista completa, assim como exemplos, acessar ao wiki ou ao help da versão.

Page 15: 10 sd ts-curso-gxxbr

240

Page 16: 10 sd ts-curso-gxxbr

241

Pode selecionar-se do SDT os membros que se querem carregar como colunas do grid. Observe que emnosso caso omitimos os membros CustomerId, BillInvoicePeriodStartDate e BillInvoicePeriodEndDate.