SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
226
227
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.
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.
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.
231
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.
233
Vamos supor que queremos devolver uma lista de recibos (por exemplo, os que foram efetuados numa faixa de
datas dado).
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...
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.
236
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.
238
As propriedades Count e CurrentItem somente estão disponíveis para variáveis SDT Collection.
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.
240
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.

Contenu connexe

Similaire à 10 sd ts-curso-gxxbr

Manual vsflexgrid
Manual vsflexgridManual vsflexgrid
Manual vsflexgridmarcos0512
 
Modelagem De Banco De Dados
Modelagem De Banco De DadosModelagem De Banco De Dados
Modelagem De Banco De Dadosmgoberto
 
introdução ao enterprise architect
introdução ao enterprise architectintrodução ao enterprise architect
introdução ao enterprise architectRanieri de Souza
 
Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)Gabriel Bugano
 
Desenvolvimento Delphi
Desenvolvimento DelphiDesenvolvimento Delphi
Desenvolvimento Delphihildebertomelo
 
Aula 03 banco de dados em asp.net (cadastrar)
Aula 03   banco de dados em asp.net (cadastrar)Aula 03   banco de dados em asp.net (cadastrar)
Aula 03 banco de dados em asp.net (cadastrar)Gabriel Bugano
 
ODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosCaio Lima
 
Manual microsoft-access-2007
Manual microsoft-access-2007Manual microsoft-access-2007
Manual microsoft-access-2007Klever Pereira
 
Cadastro de clientes em java no netbeans
Cadastro de clientes em java no netbeansCadastro de clientes em java no netbeans
Cadastro de clientes em java no netbeansLaurindo Carinhas
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidVinícius Thiengo
 
Apostila de Crystal Report
Apostila de Crystal ReportApostila de Crystal Report
Apostila de Crystal ReportAndre Nascimento
 
Slide 06 adicionando produtos e mostrando produto selecionado
Slide 06    adicionando produtos e mostrando produto selecionadoSlide 06    adicionando produtos e mostrando produto selecionado
Slide 06 adicionando produtos e mostrando produto selecionadoRaniere de Lima
 

Similaire à 10 sd ts-curso-gxxbr (20)

Manual vsflexgrid
Manual vsflexgridManual vsflexgrid
Manual vsflexgrid
 
16 gx flow-curso-gxxbr
16 gx flow-curso-gxxbr16 gx flow-curso-gxxbr
16 gx flow-curso-gxxbr
 
03 formulas globais-cursogxxbr
03 formulas globais-cursogxxbr03 formulas globais-cursogxxbr
03 formulas globais-cursogxxbr
 
CURSO JAVA 01
CURSO JAVA 01CURSO JAVA 01
CURSO JAVA 01
 
Modelagem De Banco De Dados
Modelagem De Banco De DadosModelagem De Banco De Dados
Modelagem De Banco De Dados
 
introdução ao enterprise architect
introdução ao enterprise architectintrodução ao enterprise architect
introdução ao enterprise architect
 
Access
AccessAccess
Access
 
Usando a data grid wpf
Usando a data grid wpfUsando a data grid wpf
Usando a data grid wpf
 
Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)Aula 05   banco de dados em asp.net (site do administrador - alterar e excluir)
Aula 05 banco de dados em asp.net (site do administrador - alterar e excluir)
 
Desenvolvimento Delphi
Desenvolvimento DelphiDesenvolvimento Delphi
Desenvolvimento Delphi
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Aula 03 banco de dados em asp.net (cadastrar)
Aula 03   banco de dados em asp.net (cadastrar)Aula 03   banco de dados em asp.net (cadastrar)
Aula 03 banco de dados em asp.net (cadastrar)
 
Tutorialphpmyadmin
TutorialphpmyadminTutorialphpmyadmin
Tutorialphpmyadmin
 
ODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de DadosODI Tutorial - Modelo de Dados
ODI Tutorial - Modelo de Dados
 
Diagramadeclassesal
DiagramadeclassesalDiagramadeclassesal
Diagramadeclassesal
 
Manual microsoft-access-2007
Manual microsoft-access-2007Manual microsoft-access-2007
Manual microsoft-access-2007
 
Cadastro de clientes em java no netbeans
Cadastro de clientes em java no netbeansCadastro de clientes em java no netbeans
Cadastro de clientes em java no netbeans
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI Android
 
Apostila de Crystal Report
Apostila de Crystal ReportApostila de Crystal Report
Apostila de Crystal Report
 
Slide 06 adicionando produtos e mostrando produto selecionado
Slide 06    adicionando produtos e mostrando produto selecionadoSlide 06    adicionando produtos e mostrando produto selecionado
Slide 06 adicionando produtos e mostrando produto selecionado
 

Plus de Cristiano Rafael Steffens

CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and videoCONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and videoCristiano Rafael Steffens
 
A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...Cristiano Rafael Steffens
 
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGESA CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGESCristiano Rafael Steffens
 
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...Cristiano Rafael Steffens
 
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...Cristiano Rafael Steffens
 
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...Cristiano Rafael Steffens
 
FPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automatedFPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automatedCristiano Rafael Steffens
 
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire DetectionLars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire DetectionCristiano Rafael Steffens
 
ICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section PresentationICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section PresentationCristiano Rafael Steffens
 
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...Cristiano Rafael Steffens
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...Cristiano Rafael Steffens
 
Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...Cristiano Rafael Steffens
 
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire DetectionAn Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire DetectionCristiano Rafael Steffens
 
Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Cristiano Rafael Steffens
 
Um Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoUm Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoCristiano Rafael Steffens
 
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)Cristiano Rafael Steffens
 

Plus de Cristiano Rafael Steffens (20)

CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and videoCONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
 
A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...
 
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGESA CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
 
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
 
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
 
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
 
FPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automatedFPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automated
 
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire DetectionLars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
 
Php Math and arrays
Php Math and arraysPhp Math and arrays
Php Math and arrays
 
ICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section PresentationICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section Presentation
 
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
 
Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...
 
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire DetectionAn Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
 
Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)Introdução ao processamento de imagens com OpenCV (cont)
Introdução ao processamento de imagens com OpenCV (cont)
 
Introdução OpenCV (Pt-Br) com exemplos
Introdução OpenCV (Pt-Br) com exemplosIntrodução OpenCV (Pt-Br) com exemplos
Introdução OpenCV (Pt-Br) com exemplos
 
Um Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoUm Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em Vídeo
 
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
 
G xserver curso-actualizgxxev1
G xserver curso-actualizgxxev1G xserver curso-actualizgxxev1
G xserver curso-actualizgxxev1
 

10 sd ts-curso-gxxbr

  • 1. 226
  • 2. 227
  • 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. 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. 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. 231
  • 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. 233 Vamos supor que queremos devolver uma lista de recibos (por exemplo, os que foram efetuados numa faixa de datas dado).
  • 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. 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. 236
  • 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. 238 As propriedades Count e CurrentItem somente estão disponíveis para variáveis SDT Collection.
  • 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. 240
  • 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.