4D v14

Video script

Página Inicial

 
4D v14
Video script

Video script  


 

 

Neste vídeo, vamos aprender como conservar uma seleção e a realizar funções (união, intersecção, diferença).

Os conjuntos são uma forma simples de interceptar as listas de registros de uma mesma tabela.

Os conjuntos são uma das formas que pode utilizar para colocar uma seleção em espera de modo que possa ser utilizado novamente mais a frente.

Ao realizar uma operação em dois conjuntos, é obtido um novo conjunto que contém o resultado da operação realizada (de acordo com a teoria de conjuntos convencionais).

Vamos aplicar estes princípios de imediato à lista de intervenções no formulário de navegação. Podemos criar um jogo da seleção atual.

Vamos a criar um botão que procure todas as intervenções que se iniciaram antes das 9:00 a.m.

Aqui está o método do botão:

 QUERY([Interventions];[Interventions]Intervention_Time

E vamos a criar um segundo botão que nos dará todas as intervenções que não foram realizadas aos 100%. Podemos programar este botão assim:

 QUERY([Interventions];[Interventions]Progress<100)

Pelo momento, no arquivo que importamos, o % de avance não é especificado.

Assim que primeiro vamos aplicar uma fórmula em todas as intervenções. Aqui temos uma seleção de 11,732 intervenções nas que vamos aplicar uma fórmula e especificar que:
  • O avance é igual ao valor de arredondado (devolvido por Round) do resto (calculado com Mod) de Random (que devolve um valor de 0 a 32,767), o Mod por 100 arredondado à décima mais próxima.
Se agora fazemos um relatório para comprovar o que os valores de % de avance foram cheios, vemos que vão de 0 a 100.

É claro, se fazemos clique no primeiro botão e logo no segundo, teremos perdido a seleção criada durante o primeiro clique.
Assim que no primeiro botão, pode ser útil, depois da pesquisa, conservar a informação em um conjunto que podemos chamar "Morning_Interventions".

 CREATE SET([Interventions];"Morning_Interventions")

Igualmente, aqui, logo de recuperar o conjunto das intervenções que não terminaram chamamos este conjunto "Interventions_in_progress".

 CREATE SET([Interventions];"Interventions_in_progress")

Então podemos comparar os conjuntos:

  • Seja acrescentando para obter o conjunto das intervenções pela manha + as intervenções em curso.
    Duplicamos o botão e indicamos que se trata das intervenções antes das 9:00 am + os projetos em curso;
    Logo escrevemos
     UNION("Morning_Interventions";"Interventions_in_progress";"Interventions_Result")

    em um terceiro conjunto chamado Interventions_Result para não sobrescrever os dois primeiros conjuntos.
  • Se quisermos as intervenções pela manha que, todavia estão em progresso, temos que comparar a parte comum de ambos os conjuntos, de modo que temos todas as intervenções pela manha que ainda estão em andamento. Neste caso, o comando a ser utilizado não é UNION, e sim INTERSECTION.
  • E se queremos obter as intervenções terminadas, teremos que aplicar DIFFERENCE aos 2 conjuntos: todas as intervenções pela manha menos as intervenções ainda em curso nos dará o conjunto resultante.

Podemos provar as diferentes possibilidades executando o formulário de navegação.
Tomamos todas as intervenções, há 11.732 e aqui (depois de fazer clique nos botões de pesquisa), ainda temos 11.732.

Por quê? Lembre que no vídeo anterior, adicionamos na função Navigation_Function, ao final, esta linha nos dá o número de registros encontrados depois de que é criado uma nova  seleção.

 vNumRecords:=Records in selection([Interventions])

Vamos a copiar este código e aplicar aos 2 botões de pesquisa.
Na atualidade, não temos o ponteiro da tabela aqui, vamos a processar as intervenções.

Logo podemos copiar esta linha de código para os outros 4 botões:
  • Na diferença
  • A intersecção
  • A união, vemos que nestes 3 botões, falta algo...
  • A união, vemos que nestes 3 botões, falta algo...

Agora, se voltamos ao formulário de navegação, teremos:

  • 631 631 intervenções antes das 9:00 a.m.
  • 11,192 intervenções que não foram terminadas.

As intervenções antes das 9:00 a.m. + as intervenções que estão em um 100%, as intervenções das 9:00 a.m. em curso ou das 9:00 a.m. terminadas, não muda o número que está aqui.

Por que? Porque a simples criação de um conjunto não implica seu uso.
Neste botão aqui, depois de que criamos a união que cria um terceiro conjunto, se deve indicar o conjunto particular que deve ser utilizado.

Assim que vamos a modificar o código e:

  • Aqui, adicionamos o comando USE SET.
  • Copiar, logo, vamos a colocar em os outros 2 botões.
  • Adicionamos a linha de utilização do conjunto nos outros 2 botões

E desta maneira podemos provar:

  • As intervenções em curso: temos 601
  • As intervenções terminadas: temos 30
  • O que corresponde às intervenções antes das 9:00 am: em outras palavras, 631

Para completar este enfoque, vamos a fechar o formulário e lançar novamente o método Navigation para verificar seu funcionamento.
Se fazemos clique sobre um dos três botões à direita, uma mensagem de erro indica que os conjuntos não existem. Naturalmente, os conjuntos devem existir antes poder usá-los.
Vamos a fazer seguimento à criação destes conjuntos, fazendo clique no primeiro botão de pesquisa.

Podemos ver, na lista da esquerda, o tema "Conjuntos",  que mostra a lista dos conjuntos existentes no processo que se está rastreando. Na atualidade, não há nenhum.

Quando o método se executa:
  • Damos nome a um primeiro conjunto
  • A continuação, vamos a dar nome a um segundo conjunto durante sua execução.
  • Usando o modo de seguimento, isto nos permitirá ver a criação do terceiro conjunto quando é executada a primeira linha.

E logo veremos, que como o conjunto já existe, é só a quantidade a que muda.

É necessário ter em conta que um conjunto é só uma lista de registros que não necessariamente é a seleção atual, porque agora a seleção atual da tabela Interventions contém 601 registros.

Quando passamos ao comando USE SET, a seleção agora contém um número de registros que coincidem com o número indicado no conjunto e a variável vNumRecords também se adaptará em consequência.

Outro uso dos conjuntos que é muito conveniente consiste em selecionar certo número de registros e a continuação indicar que queremos retornar a seleção atual, ou seja, que quando façamos clique no botão, tenha só estes X registros.

Para isso, devemos:

  • Programar o botão
  • Indicar que queremos uma seleção
  • Copiar uma entrada no método
  • E escrever o código correspondente.

O código é o seguinte:

 $SetName:="Userset_"+String(Milliseconds)
 GET HIGHLIGHTED RECORDS($TablePointer->;$SetName)
 USE SET($SetName)
 vNumRecords:=Records in selection($TablePointer->))

Em outras palavras, vamos a:

  • Criar um nome de conjunto (ou seja, uma parte de texto + a conversão a texto dos Miles segundos).
  • Obter os registros ressaltados, ou seja, aqueles que nos que foi feito clique na tabela em questão e criar o conjunto correspondente.
  • Utilizar este conjunto
  • Voltar a calcular o número de registros aos que esta cifra corresponde
  • A continuação, apagar o conjunto para liberar memória.

Podemos provar:

  • Todas as intervenções
  • Podemos selecionar algumas
  • E traçamos o botão de seleção

Neste nível, temos:

  • Um nome de conjunto
  • O conjunto será criado aqui, assim que temos 3 elementos neste conjunto
  • O usaremos para que se converta na seleção atual da tabela Interventions
  • Recalculamos o número de registros
  • Recalculamos o número de registros

Em nosso array, agora temos a lista de registros que selecionamos.

Um conjunto se compõe de um bit por registro e, portanto não conserva a ordem de classificação.

Quando seja necessário conservar esta informação, deve utilizar comandos relacionados com as seleções temporais:
COPY NAMED SELECTION e USE NAMED SELECTION

Aqui vamos a adicionar um botão que nos permite:

  • Criar uma primeira seleção (seleção temporal T1)
  • Vamos a copiar o código na seleção temporal
  • E duplicar o botão: T2
Agora temos a possibilidade de armazenar duas seleções que levarão em conta a ordem de classificação.

As seleções existem na memória, mas não se utilizarão.

A continuação, vamos a:
  • Duplicar estes botões
  • Modificar sua fórmula para solicitar o uso destas seleções (e aqui não é necessário especificar a tabela.).

Demos uma olhada a este exemplo. Se tomarmos todas as intervenções:

  • Tomemos as primeiras
  • Seleção
  • Ordenamos por data e hora de intervenção
  • Criamos uma primeira seleção
  • A continuação, tomamos a mesma seleção
  • Vamos a ordenar por objeto e hora de intervenção
  • E criamos a segunda seleção.

Agora:

  • Se chamarmos à primeira seleção, vem ordenada de acordo aos critérios indicados: data e hora.
  • Se fizermos clique no segundo botão, se ordenam como solicitamos primeiro por objeto e logo por data.

 
PROPRIEDADES 

Produto: 4D
Tema: Conjuntos e seleções temporais

 
ARTICLE USAGE

Autoformação ( 4D v13)
Autoformação ( 4D v14)