Campo de LigaçãoEste 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 Busca2)
Variável do Objeto3)
Campo de Ligação4)
Campos de Busca5)
Campos p/ atualizar6)
Filtro de Ligação7)
Ordenação Tabela Busca8)
Tem botão de lista9)
Tem botão de procura10)
Tem busca incremental11)
Evento Após AtualizarAcessoEsta 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 acessosAcesso privado para um utilizadorAcesso X à tabela YAcesso por tipo de perfilPara 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 AtualizarNesta 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óriaEsta 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 - SimEste tipo de objeto tem ainda as seguintes propriedades:
AlinhamentoAltera a sua AlturaAltera a sua EsquerdaAltera o seu ComprimentoAltera o seu TopoAlturaComprimentoCor da TintaCor de FundoCor do ContornoEsquerdaEstilo do ContornoEvento ao Entrar Evento ao Sair Evento Após AtualizarEvento Após não AtualizadoEvento Clique DireitoEvento CliqueEvento Duplo CliqueEvento InitEvento MouseEnterEvento MouseLeaveEvento MouseMoveEvento MouseWheelEvento RefrescarEvento Tecla Pressionada FormataçãoIcon do RatoItálico MáscaraMensagemMensagem do ratoNavegação (Duplo Clique)Negrito NomeOrdem (Z)Ordem de AcessoPonteiro do ratoRiscadoSó de LeituraSublinhadoTamanho Tipo de LetraTopoVisível