4D v16.3

Subformulários em modo página

Página Inicial

 
4D v16.3
Subformulários em modo página

Subformulários em modo página  


 

 

Neste caso, o subformulário pode mostrar os dados do subregistro atual ou qualquer tipo de valor pertinente em função do contexto (variáveis, imagens, etc.). Uma das principais vantagens de se usar subformulários página é que incluem funcionalidades avançadas e podem interatuar diretamente com o formulário pai (widgets). Os subformulários página têm suas próprias propriedades e eventos específicos, os quais podem ser admiistrados por programação.

Nota: é possível gerar componentes com funcionalidades adicionais através de subformulários. Para mais informações, consulte Desenvolver e instalar componentes 4D.

Para ativar o modo página, simplesmente deselecione Subformulário lista na Lista de propriedades para o objeto subformulário. Neste caso, as propriedades relativas a configuração dos subformulários em lista (Modo de seleção, Clique duplo em linha, etc.) não são mais mostrados:

O subformulário em página utiliza  formulário de entrada designado pela propriedade “formulário detalhado”. Diferente de um subformulário em modo lista, o formulário utilizado pode vir da mesma tabela que o formulário pai. Também é possível utilizar um formulário projeto. Em execução, um subformulário em modo página tem as mesmas características de visualização padrão de um formulário de entrada. Os mecanismos dos formulários de saída (relacionados particularmente com a gestão de marcadores) não são ativados.

Os subformulários em página se manejan utilizando as propriedades específicas que facilitam sua integração e interação com o formulário pai.

Uma variável pode estar associadas a um objeto subformulário. Por padrão esta variável se chama "Subformulário" como o próprio objeto. Tem um tipo (ver o próximo parágrafo) e pode ser representado como uma variável padrão no formulário pai. Sua modificação dispara os eventos de formulário e permite sincronizar os valores do formulário pai e do subformulário:

  • O evento formulário On Data Change permite indicar ao contenedor do subformulário que o valor da variável foi modificada no subformulário.
  • O evento formulário On bound variable change indica ao subformulário (método formulário do formulário) que a variável foi modificada no  formulário pai.

Utilize esta propriedade para definir o tipo da variável associada ao objeto subformulário. Por padrão, se utiliza o tipo Alfa. O tipo da variável determina a natureza dos valores trocados entre o formulário pai e o subformulário através da variável associada.
Pode definir o tipo "Nenhum" e neste caso, 4D digita automaticamente a variável durante a execução (ver "Variáveis dinâmicas" na seção Variáveis do manual Linguagem).

Fonte  

Esta propriedade permite selecionar diferentes tipos de fontes:

  • <Nenhum>: selecione este tipo de fonte se deseja utilizar um formulário projeto ou um formulário de componente como subformulário. Estes subformulários se utilizam em modo página unicamente: a opção "Subformulário lista" debe ser desmarcado para que funcionem.
    Para que um formulário de componente apareça na lista "formulário detalhado" deve ter sido publicado no componente (ver o parágrafo Publicar um subformulário (component)).
  • Nome de tabela: escolha esse tipo tipo de fonte se deseja utilizar um formulário da tabela.

Um objeto subformulário pode ter um método objeto que permita controlar seu funcionamento, em particular, quando se desencadeiam os eventos. Para obter uma descrição dos eventos administrados pelo subformulário em página, consulte a documentação do comando Form event

Lembre que a interação entre o conteúdo do objeto subformulário e o formulário pai deve ser manejada através de mecanismos específicos (ver o parágrafo Programação avançada entre formulários).

A variável associada ao subformulário permite vincular os dois contextos (formulário e subformulário) para dar os toques finais a interfaces sofisticadas. Por exemplo, imagine um subformulário que representa un relógio dinâmico, inserido em um formulário pai que contém uma variável editável de tipo hora:

Ambos objetos (variável hora e contenedor do subformulário) têm o mesmo nome de variável. Neste caso, ao abrir o formulário pai, 4D sincroniza ambos os valores de forma automática. Se o valor da variável se define em vários lugares, 4D utiliza o valor que foi carregado por último. Se aplica a seguinte ordem de carga:
1-Métodos objeto do subformulário
2-Método formulário do subformulário
3-Métodos objeto do formulário pai
4-Método formulário del formulário pai

Quando se executa o formulário pai, a sincronização das variáveis deve ser efetuada pelo desenvolvedor utilizando os eventos formulário adequados. Dois tipos de interações podem ocorrer: do formulário ao subformulário e vice-versa.

Caso 1: O valor da variável do formulário pai se modifica e esta modificação deve repercutir no subformulário. Em nosso exemplo, a hora ParisTime passa a 12:15:00, seja porque o usuário introduziu esta hora ou porque foi atualizada dinamicamente (através do comando Current time por exemplo).

Neste caso, deve utilizar o evento formulário On bound variable change. Este evento deve ser selecionado nas propriedades do subformulário, se gera no método de formulário dol subformulário.

Se gera  evento de formulário On bound variable change:
  • Tão logo quanto se atribua um valor à  variável do formulário pai, mesmo se o mesmo valor é reatribuído,
  • Se o subformulário pertence à página de formulário atual ou à página 0.

Lembre que, como no exemplo anterior, é preferível utilizar o comando [#cmd id="1124"/] que devolve um ponteiro ao contenedor subformulário ao invés de sua variável, já que é possível inserir vários subformulários no mesmo formulário pai  (por exemplo, uma janela que mostra diferentes zonas horárias tem vários relógios). Neste caso, só um ponteiro permite saber que contenedor de subformulário está na origen do evento.

Caso 2: O conteúdo do subformulário é modificado e esta modificação deve ser passada no formulário pai. Em nosso exemplo, imagine que a interface do subformulário permite ao usuário mover "manualmente"  os ponteiros do relógio.

Neste caso, desde o subformulário, deve atribuir o valor do objeto à variável do contenedor do subformulário pai. Como no exemplo anterior,  recomendamos que utilize o comando OBJECT Get pointer com o seletor Object subform container que devolve um ponteiro ao contenedor do subformulário.

Atribuir o valor da variável gera o evento formulário On Data Change no método do objeto contenedor do subformulário pai, o que permite realizar qualquier tipo de ação. O evento deve ser selecionado nas propriedades do contenedor de subformulário.

Nota: se mover "manualmente" os ponteiros do relógio, isso também gera o evento formulário On Data Change no método do objeto da variável valorReloj no subformulário.

A comunicação entre o formulário pai e as instâncias dos subformulários pode necessitar mais do que o intercâmbio de um valor através da variável associada. Na verdade, é possível que deseje atualizar as variáveis nos subformulários em função das ações efetuadas no formulário pai e vice-versa. Se usarmos o exemplo anterior do subformulário de tipo "relógio dinâmico", poderíamos querer definir uma ou mais horas de alarme para cada relógio.

4D implementou os seguintes mecanismos para responder a estas necessidades:

Além do seletor Object subform container, o comando OBJECT Get pointer aceita um parâmetro que indica em qual subformulário buscar o objeto cujo nome é especificado no segundo parâmetro. Esta sintaxe só pode ser utilizada quando se passa o seletor Object named

Por exemplo, a seguinte ordem:

 $ptr:=OBJECT Get pointer(Object named;"MeuBotao";"MeuSubForm")

... recupera um ponteiro  à variável "MeuBotao" que se encontra no objeto subformulário "MeuSubForm". Esta sintaxe permite acessar desde o formulário pai a todo objeto que se encontra num subformulário.
Também considere o comando OBJECT Get name que permite recuperar o nome do objeto que tem o foco.

O comando CALL SUBFORM CONTAINER permite a uma instância de subformulário enviar um evento ao objeto contenedor do subformulário, o qual pode ser processado no contexto do formulário pai. O evento é recibido no método do objeto contenedor. Pode estar na origem de qualquer evento detectado pelo subformulário (clique, arrastar e soltar, etc.)

O código do evento é livre (por exemplo, 20 000 ou -100). Pode utilizar um código que corresponde a um evento existente (por exemplo, 3 para On Validate) ou utilizar um código personalizado. No primeiro caso, só se pode utilizar os eventos que foram selecionados na lista de propriedades para os contenedores de subformulário. No segundo caso, o código não deve corresponder a qualquer evento formulário existente. É recomendado usar um valor negativo para ter certeza de que este código não será utilizado por 4D en futuras versões.

Para obter mais informação, consulte a descrição do comando CALL SUBFORM CONTAINER.

O comando EXECUTE METHOD IN SUBFORM permite a un formulário ou a um de seus objetos solicitar a execução de um método no contexto da instância do subformulário, o que lhe dá acesso às variáveis, objetos, etc. del subfformulário. Este método também pode receber parâmetros.

Este mecanismo é  ilustrado no seguinte diagrama:

Para obter mais informação, consulte a descrição do comando EXECUTE METHOD IN SUBFORM.

O comando GOTO OBJECT busca o objeto de destino no formulário pai, mesmo se for executado desde um subformulário.



Ver também 

Subformulário lista

 
PROPRIEDADES 

Produto: 4D
Tema: Subformulários e widgets

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de Desenho 4D ( 4D v16)
Manual de Desenho 4D ( 4D v16.1)
Manual de Desenho 4D ( 4D v16.3)