Header Web
Logo_PHC_Software
Manuais
Campo De Ligação
Campo de Ligação

Este objeto só se encontra disponível na gama Enterprise.


Com o objeto "Campo de Ligação" é possível efetuar por exemplo uma ligação entre a tabela em que se situa o ecrã personalizado e outra tabela à escolha (tabela de utilizador ou tabela interna do software). Para isso existem as seguintes propriedades no objeto:

1) Tabela de Busca
2) Variável do Objeto
3) Campo de Ligação
4) Campos de Busca
5) Campos p/ atualizar
6) Filtro de Ligação
7) Ordenação Tabela Busca
8) Tem botão de lista
9) Tem botão de procura
10) Tem busca incremental
11) Evento Após Atualizar


Acesso
Esta propriedade permite definir acessos de consulta, alteração e introdução para os utilizadores, relativamente ao objeto em questão. Os acessos disponíveis são:

  • Sem controlo de acessos

  • Acesso privado para um utilizador

  • Acesso X à tabela Y

  • Acesso por tipo de perfil


  • Para melhor explicar o funcionamento deste objeto, vamos supor que temos um ecrã personalizado na tabela de clientes, chamada "Angariador" e que temos uma Tabela de Utilizador chamada "Outras Entidades", cujo nome interno será "U_USERTABX" com a seguinte estrutura:

    NO - Numérico - 10 - Número da Entidade
    NOME - Carater - 60 - Nome da Entidade
    MAIL - Carater - 60 - Endereço de correio eletrónico
    MORADA - Carater - 60 - Morada da Entidade
    TIPOCL - Carater - 20 - Tipo da Entidade (Correspondente ao campo Tipo de Cliente)
    ACTMOR - Logico - 1 - Atualizar morada (Campo lógico que indica se a morada é para atualizar)

    Esta tabela de utilizador terá o seu próprio ecrã de edição "Ecrã de Utilizador" de modo a poder encher a tabela com dados, ou seja, deve ser criado um ecrã de utilizador e desenhá-lo, por exemplo:



    Para a tabela de clientes deverão ser criados os seguintes campos do utilizador, para guardarem a informação, acerca de que "Angariador" da tabela de utilizador "USERTABX" estará relacionado com o respetivo cliente:

    TABXNO - Numérico - 10
    TABXNOME - Carater - 60
    TABXMAIL - Carater - 60

    Neste exemplo, só iremos querer trazer 3 campos da tabela "USERTABX" para a tabela de clientes. Então no ecrã de clientes na nossa ecrã personalizado "Angariador", devem ser criados dois objetos do tipo "Campos de Ficheiros" para guardarem e mostrarem a informação dos campos "TABXNO (Número da Entidade)" e "TABXMAIL (Endereço de correio eletrónico)":

    Objeto 1 - Campo de Ficheiro - em que as propriedades:
    Variável do Objeto = Número da entidade (CL.TABXNO)
    Só de Leitura = Sim

    Objeto 2 - Campo de Ficheiro - em que as propriedades:
    Variável do Objeto = Mail da Entidade (CL.TABXMAIL)
    Só de Leitura = Sim

    De seguida vamos criar o nosso objeto de ligação entre a tabela de clientes e a tabela de utilizador "Outras Entidades"

    Objeto 3 - Campo de Ligação - em que as propriedades:

    Tabela de Busca = Tabelas do utilizador - Outras Entidades (USERTABX)
    Variável do Objeto = Nome da Entidade (TABXNOME)

    Nas duas propriedades anteriores, não se escolhe o nome diretamente, mas sim os respetivos títulos.

    Campo de Ligação = "NOME"
    Campos de Busca = "NO,MAIL"

    Nas duas propriedades anteriores os campos são os da tabela de utilizador (USERTABX)

    Campos p/ atualizar = U_TABXNO,U_TABXMAIL

    Nesta propriedade indica-se quais os campos do utilizador da tabela de clientes que queremos atualizar com os respetivos valores dos campos da tabela "USERTABX" que indicamos na propriedade "Campos de Busca".
    Note-se a indicação de "U_" antes do nome de cada campo, pois é assim que os campos de utilizador ficam criados internamente.
    Não é necessário indicar o campo da tabela de clientes "U_TABXNOME" pois este já tinha sido indicado na propriedade "Variável do Objeto" e esta propriedade está diretamente ligada á propriadade "Campo de Ligação".

    Neste exemplo, vamos supor que queremos escolher registos da tabela "USERTABX" cujo valor do campo "TIPOCL" seja igual ao valor do campo "TIPO" da tabela de clientes situado na página "Dados Principais", do cliente que estamos a alterar ou a inserir, então a propriedade:

    Filtro de Ligação = [u_usertabx.tipocl='] + alltrim(cl.tipo) + [']

    Ordenação Tabela Busca = "NOME"
    Aqui podemos indicar qual a ordenação em que será apresentada a lista de registos da tabela "USERTABX".

    Tem botão de lista = Sim

    Caso esta propriedade tenha o valor SIM, do lado esquerdo deste objeto, aparece um botão de Lista para o utilizador escolher registos da tabela "USERTABX". Quando se clica nesse botão, caso a propriedade "Filtro de Ligação" esteja vazia, aparece o ecrã de seleção de registos, que aparece em todos os ecrãs sempre que se clica no botão "Seleccionar os registos a observar / alterar", caso o filtro esteja preenchido irá aparecer uma listagem dos registos da tabela "USERTABX" que respeitem o filtro especificado.

    Tem botão de procura = Sim

    Caso esta propriedade tenha o valor SIM, passa a aparecer um botão de procura (lupa) do lado direito do campo. Este botão de procura permite efetuar pesquisas pelos valores do campo.

    Tem busca incremental = Sim

    Caso esta propriedade tenha o valor SIM, então este objeto irá suportar a procura incremental, ou seja, sempre que se juntar um carater ao valor do objeto, ele irá automaticamente apresentar o registo da tabela "USERTABX" que mais se aproxima do valor que o objeto contém.

    Evento Após Atualizar
    Nesta propriedade podemos indicar uma expressão que irá correr sempre que o objeto for atualizado com novos valores, ou seja, sempre que se clica no botão de lista e se escolhe um registo, ou se selecionarmos outro campo, tendo previamente alterado o valor deste objeto.
    Imaginando que gostaríamos de atualizar o campo "MORADA" da tabela de clientes com o campo "MORADA" da tabela de utilizador "USERTABX", mas só no caso do campo "ACTMOR" da tabela "USERTABX" ter o valor SIM (1 em Transact-SQL). Neste caso a expressão que tínhamos que escrever nesta propriedade seria:

    local msel
    if not empty(objligacampo.ligastamp)

    m.msel=[select top 1 morada,actmor from u_usertabx(nolock)]
    m.msel=m.msel+[where u_usertabx.u_usertabxstamp=']
    m.msel=m.msel+alltrim(objligacampo.ligastamp)+[']

    if u_sqlexec(m.msel,'tmpligacampo')
    select tmpligacampo
    if tmpligacampo.actmor
    select cl
    replace cl.morada with tmpligacampo.morada
    endif
    endif

    endif

    fecha('tmpligacampo')

    Nota: Não esquecer de indicar que esta expressão é um programa.

    Explicação da expressão: Como no momento de correr esta expressão não podemos assumir que existe um cursor com os dados da tabela de busca que desejamos usar para atualizar determinados campos da tabela de clientes, então temos que construir uma expressão de Transact-SQL para podermos ir ao servidor de dados buscar a informação que desejarmos.

    Para nos facilitar esta tarefa, existe um objeto que podemos utilizar que é "ObjLigaCampo" não sendo mais este objeto que o próprio objeto "Campo de Ligação" que estamos a programar, e que por sua vez tem uma propriedade "LigaStamp" que é sempre atualizada automaticamente mesmo antes deste evento correr, essa propriedade irá conter o valor do STAMP do registo da tabela de busca que acabamos de escolher.



    E assim, temos a nossa ecrã personalizado pronta a funcionar. De notar, que este novo tipo de objeto quando deteta que o valor que o utilizador nele escreveu, não existe na tabela de busca, e caso a tabela de busca tenha um ecrã associado, pergunta ao utilizador se deseja criar uma ficha nova, ao que se o utilizador responder que sim, irá abrir o ecrã associado em modo de introdução, caso o utilizador tenha acesso de Introduzir nesse ecrã, afim de inserir um novo registo com o valor que se tinha começado a escrever neste objeto.

    Nota: o exemplo aqui dado foi com uma tabela interna do software (Clientes) e outra de utilizador, neste caso Outras Entidades (USERTABX), mas com este objeto pode-se efetuar qualquer tipo de ligação entre tabelas, como sejam:

    - Tabelas internas do Software Com Tabelas de Utilizador
    - Tabelas de Utilizador Com Tabelas internas do Software
    - Tabelas internas do Software Com Tabelas internas do Software
    - Tabelas de Utilizador Com Tabelas de Utilizador

    Variável de memória
    Esta propriedade permite definir se a propriedade Variável do Objeto se refer a uma variável de memória ou não. As opções de seleção são:
  • 0 - Não;

  • 1 - Sim


  • Este tipo de objeto tem ainda as seguintes propriedades:
    Alinhamento
    Altera a sua Altura
    Altera a sua Esquerda
    Altera o seu Comprimento
    Altera o seu Topo
    Altura
    Comprimento
    Cor da Tinta
    Cor de Fundo
    Cor do Contorno
    Esquerda
    Estilo do Contorno
    Evento ao Entrar
    Evento ao Sair
    Evento Após Atualizar
    Evento Após não Atualizado
    Evento Clique Direito
    Evento Clique
    Evento Duplo Clique
    Evento Init
    Evento MouseEnter
    Evento MouseLeave
    Evento MouseMove
    Evento MouseWheel
    Evento Refrescar
    Evento Tecla Pressionada
    Formatação
    Icon do Rato
    Itálico
    Máscara
    Mensagem
    Mensagem do rato
    Navegação (Duplo Clique)
    Negrito
    Nome
    Ordem (Z)
    Ordem de Acesso
    Ponteiro do rato
    Riscado
    Só de Leitura
    Sublinhado
    Tamanho
    Tipo de Letra
    Topo
    Visível