Introdução
Este artigo pretende ajudar na transição da framework de PHC CS para a framework de addons de PHC GO, nomeadamente criar novos ecrãs e tabelas de utilizador, assim como a
customização de ecrãs e tabelas existentes na aplicação.
Existem vários artigos da série Usa PHC CS com o intuito de facilitar a transição da
programação da framework PHC CS em Visual FoxPro para a framework PHC GO em .NET
Framework, utilizando Visual Basic.
Recomenda-se a leitura dos artigos pela ordem indicada, de forma a apresentar as diversas
tecnologias e técnicas de programação em sequência crescente de complexidade e
funcionalidade.
Ecrãs e Tabelas do Utilizador
As opções disponíveis no PHC CS, em Supervisor - Framework PHC nomeadamente a opção
Ecrãs do Utilizador juntamente com a opção Tabelas do Utilizador, permitem criar novos ecrãs
e tabelas na aplicação.
No PHC GO, a opção disponível em GO Studio - Toolbox - Ecrãs e Entidades permite criar o ecrã
juntamente com a tabela de utilizador, nesta opção, há vários campos e áreas onde se define
não só o layout do ecrã, mas também o seu comportamento em termos das funcionalidades
disponibilizadas, o local no menu da aplicação onde desejamos criar a entrada para o ecrã,
bem como o nome e a estrutura das tabelas de utilizador a serem criadas na base de dados.
Ecrãs Personalizados e Campos do Utilizador
As opções disponíveis no PHC CS, em Supervisor - Framework PHC nomeadamente a opção
Ecrãs Personalizados juntamente com a opção Campos do Utilizador, permitem customizar
ecrãs e tabelas já existentes de base na aplicação.
No PHC GO, a customização de um ecrã já existente na aplicação é realizada em GO Studio –
Toolbox – Extensões de Ecrã e Entidades, que apesar de ser configurada num local diferente o
seu funcionamento é idêntico ao descrito neste artigo.
No PHC CS ao criar um Campo do Utilizador para uma tabela base da aplicação, o campo é
criado na própria tabela com o prefixo u_ no nome, para evitar conflitos com outros campos
existentes nessa tabela.
No PHC GO, é criada uma nova tabela que armazena os campos personalizados. Esta
abordagem permite que o nome dos campos permaneça exatamente como definido na
customização, sem o prefixo u_ que é comum em outros contextos.
Na tabela original associada ao ecrã, o sistema cria um campo virtual que funciona como uma
chave de ligação entre a entidade base e a nova tabela de utilizador, consolidando a relação
entre os dados originais e os campos personalizados.
Por exemplo, ao personalizar o ecrã de Clientes e ao adicionar os campos Zona2 e DataIni, e ao
definir o nome da entidade como cl2, o PHC GO cria uma nova tabela de utilizador com uma
estrutura semelhante à seguinte:
- clstamp: Liga a nova tabela de utilizador à tabela original de clientes.
- Zona2: Campo personalizado criado pelo utilizador.
- DataIni: Outro campo personalizado criado pelo utilizador.
Assim, a tabela cl2 funciona como uma extensão da tabela de Clientes, permitindo a gestão dos
novos campos diretamente no ecrã de clientes sem a necessidade de prefixos adicionais,
facilitando o acesso e a manipulação de dados customizados:
' Código PHC GO – VB.NET
<AttTable("u0000_cl2"), AttTableFlags(TableFlags.IsUserTable)>
Public Class u0000_cl2VO
Inherits BusinessVO
<AttLenght(25,0),AttForeignKey(GetType(ClVO)),AttIndex()>
Public Property [clstamp]() As String
<AttLenght(25,0),AttFieldStamp()>
Public Property [u0000_cl2stamp]() As String
<AttLenght(8,0)>
Public Property [dataini]() As DateTime
<AttLenght(30,0)>
Public Property [zona2]() As String
<AttParent(), XmlIgnore(), AttNotField()>
Public Property parentVO As FrameworkClVO
End Class
' There is no AttTable because it is a virtual table that exists only in memory
Public Class FrameworkClVO
Inherits ClVO
<AttCollection(GetType(u0000_cl2VO))>
Public Property u0000_cl2 As u0000_cl2VO
End Class
Para aceder ao valor de um campo customizado no PHC GO, precisamos especificar
corretamente o caminho que leva até à propriedade do campo, tendo em conta o contexto em
que estamos (entidade e ecrã). Este caminho reflete a estrutura de ligação entre a entidade
original e a tabela de utilizador onde os campos personalizados foram adicionados:
' Código PHC GO – VB.NET
' Example 1
Public Sub Test(itemVO as FrameworkClVO)
itemVO.u0000_cl2.zona2 = "My new zone 2"
End Sub
' Example 2
Public Sub Test(itemVO as ClVO)
' It will give a compilation error, because the compiler doesn't
' know at runtime there will be an add-on installed
' that turns ClVO into a FrameworkClVO
itemVO.u0000_cl2.zona2 = "My new zone 2"
' We must create a variable of the right type
' and perform a direct conversion
Dim myItem as FrameworkClVO = DirectCast(itemVO,FrameworkClVO)
itemVO.u0000_cl2.zona2 = "My new zone 2"
End Sub
Criar Ecrã de Utilizador no PHC GO
Ao criar um novo ecrã de utilizador no PHC GO, devemos preencher os seguintes campos na
área de cabeçalho do ecrã da seguinte forma:
- Nome da entidade
Preencher com o valor do campo Nome (Tabelas do Utilizador) do PHC CS.
Este será o nome da tabela tal como será exibido na aplicação, por exemplo, em listas que
mostram as tabelas existentes no software. Pode ser um nome que não siga as regras de
criação de tabelas na base de dados, como, por exemplo, ´Álbum´ com acento no ´A´.
O nome da tabela utilizado na base de dados é exibido no campo Tabela da entidade, que
é de leitura apenas. No nosso exemplo, este campo terá o valor u0000_Album.
É importante ter atenção ao alterar este campo após a instalação do add-on que contém
esta definição, pois o nome anterior já terá sido utilizado para criar a tabela na base de
dados. Qualquer alteração e nova instalação resultará na criação de uma nova tabela na
base de dados, uma vez que não existe atualização para a tabela previamente criada.
- Título do ecrã
Preencher com o valor que usamos no campo Título do ecrã (Ecrãs do Utilizador) do PHC
CS.
Este valor além de ser o título do ecrã será também o nome da entrada de menu que será
criada para aceder ao ecrã.
- Designação do registo
Preencher com o valor do campo Descrição (Tabelas do Utilizador) do PHC CS.
Outros Mapeamentos - Ecrãs de Utilizador
Nesta opção do PHC CS existem configurações cujo mapeamento possa não ser tão direto
como as anteriores, essas configurações são:
- Tabela principal
Como referido, no PHC GO não existe o conceito de criar primeiro a tabela de utilizador e depois nesta opção escolher essa tabela para associar ao ecrã.
Estes dois passos são feitos num único e o campo no PHC GO mais semelhante a esta opção do PHC CS é o Nome da entidade.
- Dados do ecrã, Altura, Comprimento
Não existe esta definição porque cada ecrã ocupa a área total que está reservada para assim fim.
Como não existe a possibilidade, na interface gráfica do PHC GO, de visualizar dois ecrãs principais ao mesmo tempo no tabulador do navegador de internet, existe de base a funcionalidade de a aplicação recordar o contexto anterior e o repor quando se regressa.
Por exemplo, ao estar no ecrã de clientes e alterar o cliente João Alberto, modificando o valor do campo “zona” para “centro”, é possível navegar para o ecrã de compras para realizar outra tarefa mais urgente, sem ser necessário gravar a alteração no ecrã de clientes.
Posteriormente, ao regressar ao ecrã de clientes, a aplicação mantém o contexto da alteração e apresenta o ecrã de edição com o valor “centro” no campo “zona”, a gravação na base de dados só é realizada quando o utilizador assim decidir e pressionar o botão de gravar.
- Possui botão para impressão monopágina
No PHC GO este conceito de monopágina está associado ao tipo de entidade e não ao ecrã, por isso esta opção não tem mapeamento.
- Possui botão para ligação ao word
No PHC GO não existe este conceito de ligação ao word, por isso esta opção não tem mapeamento.
- Aparece no menu principal dos ecrãs de utilizador ou dentro do grupo …
Esta opção é explicada mais á frente no grupo Dados Gerais - Menu.
- Acesso
Os acessos aos ecrãs no PHC GO são controlados pelos acessos que possam estar definidos para a entidade principal do ecrã que é o valor do campo Nome da entidade, os acessos são definidos via perfis disponíveis na opção de menu Definições – Acessos – Perfis.
Outros Mapeamentos - Tabelas de Utilizador
Nesta opção do PHC CS existem configurações cujo mapeamento possa não ser tão direto como as anteriores, essas configurações são:
- Tem ecrã de edição
Como referido, no PHC GO não existe o conceito de criar primeiro a tabela de utilizador e depois nesta opção escolher essa tabela para associar ao ecrã.
Estes dois passos são feitos num único e o campo no PHC GO mais semelhante a esta opção do PHC CS é o Nome da entidade.
Existe, no entanto, a possibilidade de criar uma tabela sem ecrã associado, isso é explicado mais baixo neste manual no tópico: Dados Gerais – Desenho - Campos internos (sem visualização).
- Permite apagar de seguida
É explicado mais baixo neste manual no tópico: Dados Gerais – Comportamento das ações core.
- Permite alterar de seguida
É explicado mais baixo neste manual no tópico: Dados Gerais – Comportamento das ações core.
- O ecrã tem mapas definidos
Os mapas definidos se chamam agora de listagens, e todos os ecrãs têm listagens sendo o acesso às mesmas feito via perfil de acessos e não via opção no ecrã, por isso esta opção não tem mapeamento no PHC GO.
- O ecrã tem mapas desenhados
Os mapas desenhados (IDUs) agora se chamam relatórios, e a ação de imprimir são agora três ações, Imprima, Descarregue e Envie para enviar a impressão por e-mail.
Devemos criar um novo comportamento em Dados Gerais – Comportamento das ações core com o tipo de ação pretendida, mas apenas se queremos negar, por omissão todos os ecrãs têm ações para trabalhar com relatórios seja para um único registo ou para vários.
- Tem filtros
Todos os ecrãs têm dois tipos de pesquisas, uma geral em que se coloca apenas texto e outra mais específica que permite criar um filtro com várias condições.
Estes dois tipos estão sempre disponíveis não sendo possível retirar essa funcionalidade a um ecrã, por isso esta opção não tem mapeamento no PHC GO.
- Tem impressão monopágina
No PHC GO este conceito está associado ao tipo de entidade e não ao ecrã, por isso esta opção não tem mapeamento no PHC GO.
- Campo ordem / Ordem é descendente
No PHC GO estas duas definições se fazem na configuração do componente de cada campo da entidade, podendo assim definir uma ordem por mais que um campo e aplicar o conceito de ascendente ou descendente separadamente por cada um dos campos incluídos na ordenação.
Na configuração do componente no separador geral devemos utilizar a opção Tipo de ordenação escolhendo um valor diferente de Nenhuma e especificar um número na opção Ordem que indica a posição desse campo na instrução Order By enviado para a base de dados.
De notar que o campo tipo de ordenação só fica disponível caso se ative a opção: É apresentado no modo de lista do ecrã, a razão inerente a esta situação é que o utilizador consiga perceber a ordenação que está a ser aplicada a determinada entidade quando estiver no seu ecrã respetivo, no modo de lista, a observar vários registos.
- É uma tabela de linhas ligada à tabela
Deve-se adicionar um componente do tipo Grelha de edição na opção Dados Gerais – Desenho na área Dados Gerais no separador onde queremos que essa coleção seja visível dentro do ecrã, ou na área Campos internos (sem visualização), se tratar-se de uma coleção interna sem visualização no ecrã.
Desenhar um ecrã de Utilizador
No PHC GO cada ecrã de utilizador ou de sistema só suporta uma customização, no caso de ecrãs de sistema, se na instalação do cliente final existir instalado mais que um add-on que tenham customizações para o mesmo ecrã, por exemplo, o ecrã de clientes, essas customizações são juntas e aplicadas uma única vez no ecrã.
No desenho do ecrã em PHC CS quando não existe nenhum objeto selecionado, a janela de propriedades fica posicionada no próprio ecrã e disponibiliza uma série de propriedades desse mesmo ecrã que são:
- Acesso
Já explicado mais acima em: Outros Mapeamentos – Acesso.
- Altura / Comprimento
Já explicado mais acima em: Outros Mapeamentos – Dados do ecrã Altura, Comprimento.
- Texto
No PHC GO corresponde ao campo Título do ecrã.
- Eventos
No PHC GO estes eventos do PHC CS são programados numa opção externa, recomenda-se a consulta do artigo: Usa PHC CS – Regras de Negócio.
- Botão (Maximizar / Minimizar)
- Centrado
- Cor de Fundo
- Ecrã Dimensionável
- Icon
- Imagem
- Rato (Icon / Ponteiro / Mensagem)
- Temas XP
Não existe mapeamento no PHC GO para nenhuma das opções acima mencionadas.
Dados Gerais – Desenho
Neste separador, definimos os campos que a nossa tabela terá na base de dados e o aspeto gráfico do ecrã para o utilizador. Cada objeto, agora denominado ´componente´, colocado aqui corresponde a um campo na base de dados da tabela associada ao ecrã, ou seja, a tabela indicada na opção Nome da Entidade.
Alguns componentes são meramente visuais, como o componente Texto ou o componente em branco, que serve apenas para ajustar o layout gráfico. No entanto, a maioria dos componentes são mapeados para campos na base de dados.
Quando o componente é do tipo Grelha de Edição, é criada na base de dados uma tabela de utilizador associada à grelha, onde as colunas da grelha representam os campos dessa tabela.
No nosso exemplo vamos ter componentes que serão os campos da nossa entidade álbum e um deles será uma grelha que corresponde à entidade relacionada música, porque um álbum é composto por várias músicas.
Neste separador de desenho existe três áreas de desenho:
- Campos internos (sem visualização)
Serve para criar campos na entidade que não têm representação gráfica, por exemplo será o local onde vai aparecer, automaticamente, o campo de valor único da entidade de álbuns u0000_albumstamp.
Á semelhança do PHC CS, existe vários campos de sistema em todas as entidades, como os campos de auditoria OUSRINIS, OUSRDATA, OUSRHORA e USRINIS, USRDATA, USRHORA entre outros adicionais específicos da plataforma.
Não é necessário criar nenhum componente para mapear estes campos, eles são criados automaticamente pela aplicação, embora em relação a estes últimos não são mostrados nesta área de campos internos.
Só uma nota nesta questão de campos de sistema, no caso do PHC GO não existe o campo MARCADA em todas as tabelas, esta funcionalidade é implementada de maneira diferente e dispensa a existência de um campo na base de dados.
Ainda nesta área de campos internos, se o componente usado for uma Grelha de edição indica que estamos a criar uma nova entidade na base de dados, também automaticamente relacionada com a entidade principal do ecrã, mas sem visualização no ecrã.
- Cabeçalho
Serve para colocar campos que queremos dar mais destaque visual, normalmente são campos que identificam claramente e por vezes, unicamente o registo.
- Dados Gerais
Semelhante ao pageframe do PHC CS, nesta área pode-se adicionar vários separadores que é idêntico às páginas adicionadas ao pageframe, e dentro de cada separador adiciona-se os componentes desejados.
Propriedades dos componentes
No PHC CS, ao desenhar ecrãs, temos uma barra de ferramentas que fornece diversos
componentes visuais. Estes componentes servem tanto para definir o layout gráfico do ecrã
quanto para criar uma ligação direta com os campos da base de dados na tabela associada.
Cada um desses componentes no PHC CS, tem várias propriedades que condicionam o seu
comportamento e aspeto visual, agrupadas nas categorias: Aparência, Dados, Eventos, Outras,
Tipo de Letra.
No PHC GO as propriedades que condicionam o comportamento e aspeto visual do
componente estão agrupadas nas categorias: Geral, Estado, um separador com o próprio
nome do (Componente), RGPD e Navegação.
Categoria Aparência
As propriedades desta categoria ajudam a definir o aspeto gráfico do ecrã. No PHC GO, existem regras mais específicas para este aspeto, com os componentes organizados em zonas. Dentro de cada zona, a organização segue uma estrutura de linhas, e cada linha é dividida em quatro colunas, onde os componentes são posicionados nos espaços pré-definidos.
- Esquerda / Topo
São propriedades de posicionamento eixo X / Y as zonas e as linhas do PHC GO definem a posição no eixo do Y.
As colunas de cada linha de uma determinada zona definem a posição no eixo do X, é possível adicionar um componente especial (em branco) que permite criar espaçamentos nas colunas, alinhando assim os restantes componentes no eixo do X dessa linha à esquerda ou à direita.
Cada componente dentro de uma linha pode ser configurado para ocupar, uma, duas, três ou a totalidade das colunas disponíveis que são quatro.
- Alinhamento
No PHC GO o alinhamento interno do componente é aplicado de forma automática, consoante o valor escolhido na opção Componente - Tipo de dados.
- Comprimento
Apesar de ser possível definir o comprimento do componente no PHC GO já o mesmo não é possível para a propriedade Altura do PHC CS.
- Estilo de Contorno
É definido pela aplicação do PHC GO consoante o campo esteja ou não na Área de desenho do Cabeçalho.
- Visível
Esta propriedade no PHC GO é programada, não no componente, mas sim na área Dados Gerais – Comportamento, explicada mais à frente.
Categoria Dados
As propriedades desta categoria ajudam a mapear o componente e o respetivo campo da entidade, a definir algumas regras de negócio simples e até o tipo de formatação aplicado ao valor do componente.
- Campo obrigatório
Permite criar uma regra de negócio automática, que obriga o campo a ser de preenchimento obrigatório, no PHC GO deve-se utilizar a opção Estado – Obrigatório.
- Formatação / Máscara
No PHC GO estas propriedades são aplicadas de forma automática, consoante o valor escolhido na opção Componente - Tipo de dados.
- Nome
No PHC CS é possível que o componente tenha um nome diferente no ecrã do que o nome do campo definido na propriedade Variável do Objeto, no caso do PHC GO o nome do componente é sempre igual ao nome do campo na base de dados, essa configuração é feita na opção Geral - Nome.
- Só de Leitura
Permite criar uma regra de negócio automática, que não permite a alteração do seu valor, no PHC GO deve-se utilizar a opção Estado – Readonly.
- Variável do Objeto
Esta propriedade faz o mapeamento do componente com um determinado campo da entidade na base de dados, no PHC GO esta configuração é feita na opção Geral - Nome.
- Expressão TSQL / Expressão XBASE
Estas propriedades no PHC CS servem para se conseguir criar campos virtuais no ecrã, que não usam a propriedade Variável do Objeto definindo a expressão para obter esses dados da base de dados no próprio componente.
Não existe à data da criação deste artigo a possibilidade de campos virtuais de utilizador para serem.
Categoria Eventos
As propriedades desta categoria permitem escrever código para reagir a intervenções do utilizador, por exemplo quando escreve um valor no campo, ou a eventos da aplicação como o atualizar os dados visíveis no ecrã.
No PHC GO, as propriedades desta categoria são programadas no backend, sendo que este tópico será abordado com mais detalhe no artigo: Usa PHC CS – Regras de Negócio. No entanto, a propriedade Evento Refrescar é programada nesta opção em: Dados gerais – Comportamento.
Categoria Outras
No PHC GO, o ecrã não é redimensionável, pelo que propriedades relacionadas com a alteração da posição ou do tamanho não se aplicam.
A propriedade desta categoria disponível no PHC GO é a definição de uma mensagem de ajuda junto ao ponteiro do rato, que se configura através da opção Componente – Tooltip.
Categoria Tipo letra
No PHC GO, os estilos associados ao texto dos componentes são fixos e geridos pela própria aplicação. É possível obter um efeito visual semelhante ao sublinhado, dependendo da posição do componente nas áreas de desenho, como Cabeçalho ou Dados Gerais, mas as opções de personalização limitam-se a esses ajustes.
Em relação ao texto inserido nas propriedades dos componentes, o PHC GO oferece, de forma nativa, a funcionalidade de tradução para os idiomas suportados. Ao digitar um texto, por exemplo, em português e gravar a customização, é automaticamente criada uma chave de tradução no separador Dados Gerais - Traduções, onde o texto pode ser definido nos diferentes idiomas.
Mapeamento dos componentes
- Texto
No PHC GO o componente equivalente é o Texto.
No PHC CS, o principal uso deste componente é fornecer um título aos componentes
inseridos no desenho do ecrã, por exemplo o componente Campos de Tabelas, para que o
utilizador possa compreender mais facilmente o significado de determinado valor visível no
ecrã.
No PHC GO, o título faz parte do próprio componente usado para mostrar determinado
campo da entidade, esse valor pode ser definido na configuração do componente na opção
Componente – Título.
Desta forma, no PHC GO, a necessidade de utilização do componente Texto é reduzida,
uma vez que, além de os componentes terem o seu próprio título, existe também a opção
de agrupar componentes por painéis, cada um com o seu próprio título, ajudando assim a
organizar o ecrã.
- Campos de tabelas
No PHC GO o componente equivalente é o Textbox.
Este componente é utilizado para mostrar campos da tabela, normalmente de
preenchimento livre, por exemplo, o campo nome do álbum.
Consoante o tipo de campo usado no PHC CS, na configuração do componente no PHC GO
na opção Componente - Tipo de dados devemos escolher o tipo que mais de adequa ás
nossas necessidades.
- FC, C
Indica a presença de um campo de texto String na base de dados, para texto simples,
como o nome de um álbum de música ou uma característica, pode-se selecionar o tipo
Texto. Caso o campo tenha uma função específica, pode-se optar por URL ou E-mail.
Se desejarmos armazenar um valor de hora, podemos escolher entre Hora incluindo
segundos (formato hh:mm:ss) ou Hora (sem segundos, no formato hh:mm).
Independentemente do formato, o campo de hora na base de dados terá sempre o
tamanho de 8, sem permitir ajuste de tamanho.
Se o tipo escolhido na opção Tipo de Dados permitir definir um valor no campo
Comprimento e esta opção for deixada em branco, o valor assumido será zero, e o
campo será criado na base de dados como VarChar(Max).
Quando o componente é TextBox e o comprimento é VarChar(Max) o valor será
armazenado numa única linha, sem quebras.
- FN e N
Indica a presença de um campo numérico na base de dados, para valores numéricos,
estão disponíveis os tipos Inteiro e Decimal. Para valores monetários,
independentemente de corresponderem à moeda definida na ficha da empresa ou a
moeda estrangeira, deve-se escolher o tipo Moeda.
Também há tipos numéricos específicos, como Percentagem e Quantidade (que segue
o valor de decimais para quantidade definido nos parâmetros gerais da aplicação).
Outros tipos disponíveis incluem Volume e Medidas.
- D
Indica a presença de um campo de data de calendário na base de dados, no PHC GO
deve ser escolhido o componente Datepicker.
De notar que á semelhança do PHC CS embora o campo seja criado na base de dados
como um DateTime que suporta a gravação de uma data e horas, o valor guardado
será apenas a parte da data sem as horas.
O componente usado nos ecrãs para este caso é um calendário que apenas atribui o
valor da data, significa que a gravação feita na base de dados só vai incluir essa parte e
as horas ficam sempre a zero.
Este tipo de campo é sempre criado na base de dados com o tamanho 10 não
permitindo definir o seu tamanho.
- Campo de ligação
No PHC GO o componente equivalente é o Autocomplete.
Na entidade álbum temos o campo singername que representa o nome da banda ou
cantor, este valor vem de uma lista que tem origem na entidade de bandas
u0000_singerVO (Bandas / Cantores).
Para construir a lista, na configuração do componente, preenchemos a opção runSearch
com o código da pesquisa a ser efetuada, e os campos a retornar da base de dados:
' Código PHC GO – VB.NET
Public Function runSearch(currentRecord As GenericVO) As QueryVO
Dim query As QueryVO = New QueryVO()
query.entityName = "u0000_singer"
query.SelectItems.add("nome")
query.SelectItems.add("u0000_singerstamp")
Return query
End Function
Esta função corre sempre que o utilizador clica para abrir a lista completa do componente,
ou quando digita valores no campo, sendo que a lista apresentada será filtrada
automaticamente pelos valores que o utilizador digitou.
A função recebe do frontend o registo atual na variável currentRecord que o utilizador está
a criar ou a alterar no momento em que interage com o componente, e pode ser útil para
condicionar a maneira como queremos que a procura seja efetuada na base de dados.
Retornamos dois campos da entidade u0000_singerVO, o campo nome usado para
mostrar a lista ao utilizador e que indicamos também na opção Campo para descrição, e o
identificador único do registo, o campo u0000_singerstamp cujo valor vamos utilizar para
guardar na base de dados, cujo valor vamos indicar também na opção Campo para valor.
O mapeamento para os respetivos campos na entidade u0000_albumVO é feito da
seguinte forma, o valor indicado na opção Campo para valor corresponde ao valor
indicado na opção Geral – Nome, que será o campo singerstamp.
O valor da opção Campo para descrição corresponde á opção Campo para
desnormalização que será o campo singername.
- Campos lógicos
No PHC GO o componente equivalente é o Lógico.
Indica a presença de um campo booleano de valor verdadeiro ou falso, correspondente a 1
ou 0 na base de dados, o tipo usado no PHC CS é o L.
- Campos com tabelas de utilizador (tabprg)
No PHC GO o componente equivalente é o Itens de lista dinâmica.
Indica a presença de um campo de texto, de preenchimento simples, semelhante ao
componente do PHC CS Campos de tabelas, mas com uma nuance de ser criada uma lista
de valores possíveis, para permitir escrever na primeira vez e nas seguintes selecionar o
valor já existente.
No PHC CS na propriedade Dados da tabela auxiliar, escrevemos o nome único do grupo
para a lista, no PHC GO devemos utilizar a opção GO Studio - Toolbox – Itens de Lista
Dinâmica, para criar a lista onde na opção ID Tabela definimos o seu nome.
Após isso, o valor que definimos para o nome da lista deve ser colocado neste componente
na opção Componente - Tabela de itens de lista dinâmica.
Um exemplo de uso deste componente é o campo que classifica o álbum em termos de
género musical genre, pretende-se que o utilizador não tenha de escrever essa informação
todas as vezes, se já existir na lista só tem de selecionar o item pretendido, Rock, Pop, etc.
- Filtros para grelhas
Este componente do PHC CS não existe na framework de add-ons do PHC GO.
- Campos com tabelas
No PHC GO o componente equivalente é o Autocomplete.
Indica a presença de um campo de texto, de preenchimento simples através da escolha de
um item de uma lista fixa de valores.
Esta lista é obtida através de registos existentes em outra entidade da base de dados,
devemos utilizar a explicação dada para o componente do PHC CS Campo de ligação.
- Campos com listas
No PHC GO o componente equivalente é o Autocomplete.
Este componente apresenta um campo de texto simples que permite o preenchimento por
meio da escolha de um item de uma lista fixa de valores, definida na configuração do
próprio componente.
Por exemplo, o campo state, que classifica o estado de um álbum, pode ter vários valores:
Ativo, que indica que o álbum está disponível na coleção; Abatido, que significa que o
álbum já não faz parte da coleção porque foi vendido ou oferecido; e Perdido, que indica
que o álbum já não está disponível, embora a causa para esse estado seja desconhecida.
Deve-se ativar a opção: Utiliza opções fixas, e na opção, Lista de títulos, indicar os três
estados separados por vírgula. Estes serão os valores a mostrar ao utilizador.
Em relação aos valores guardados na base de dados, podemos optar por escrever os
mesmos que indicamos para os estados, ou optar por guardar um código correspondente a
cada estado, em ambas as situações devemos preencher a opção Lista de valores também
separada por vírgula.
No nosso exemplo, optamos por guardar na base de dados um código, vamos utilizar
respetivamente os códigos 01, 02 e 03, independente da estratégia adotada, o campo
criado na entidade que vai guardar uma das opções da Lista de valores será sempre do tipo
String.
- Campos memos
No PHC GO o componente equivalente é o Textarea ou Rich text editor.
Indica a presença de um campo de texto na base de dados com a particularidade de aceitar
quebra de linha, ou seja, formatar o texto em várias linhas.
O componente Rich text editor suporta um editor de formatação/html.
Este tipo de campo é sempre criado na base de dados como VarChar(Max) não sendo
permitindo definir o seu tamanho.
- Campos de escolha seletiva
Este componente do PHC CS não existe na framework de add-ons do PHC GO.
- Botão
No PHC GO os botões são substituídos por ações do ecrã, que podem ser configuradas na
área Dados Gerais – Ações.
- Imagem
No PHC GO o componente equivalente é o Imagem.
As imagens no PHC GO são guardadas na tabela IFL que é partilhada por todas as outras
entidades existentes na aplicação.
As entidades que têm imagens, têm um campo, com o nome definido na opção Geral -
Nome que guarda o identificador único do registo da imagem guardado no campo iflstamp
da tabela de imagens.
No nosso exemplo a entidade de álbuns tem dois campos para guardar as imagens capa
frontal e traseira do álbum, nos campos imgfront e imgback respetivamente.
- Figura geométrica
Este componente do PHC CS não existe na framework de add-ons do PHC GO.
- Grelha
No PHC GO o componente equivalente é Grelha de Edição ou Tabela de consulta.
A Grelha de Edição, cria uma nova entidade na base de dados, o componente é usado para
quando existe uma entidade filha da entidade principal do ecrã, conforme exemplo dado
das músicas de um álbum.
A Tabela de consulta, é apenas de leitura e permite visualizar dados de outra entidade que
possa estar ou não relacionada com a entidade principal do ecrã, podemos até construir
uma expressão que retorna informação não de apenas uma entidade, mas sim de várias
entidades existentes na base de dados
- Análise Multi-Dimensional, Gráfico, Campo em árvore, Análise avançada (HTML)
Estes componentes do PHC CS não existem na framework de add-ons do PHC GO.
Dados Gerais – Ações
No PHC CS em todos os ecrãs existe uma área do lado direito, cujo conteúdo pode alternar
entre o modo Opções deste Ecrã e o modo Listagem.
No PHC GO existe também os dois modos, o modo de opções deste ecrã, que se chama Ações
do registo, e o modo Lista, em ambos os modos podemos criar novas ações para aplicar a um
registo ou a vários registos de seguida.
Nesta área pode-se criar as ações necessárias para aplicar aos registos da entidade, ou até para
aplicar a registos de outras entidades, depende do código e da configuração da ação.
A opção Ação de ecrã se ativa indica que a ação se aplica ao modo de listagem, se desativa
indica que a ação é de registo e se aplica ao modo de consulta.
Independente do modo onde a ação aparece, existe a função isActionAvailable que permite
escrever regras de negócio de frontend para determinar se a ação está disponível num
determinado contexto.
As ações podem ser executadas no frontend ou no servidor, a opção: Executa regra de negócio
determinada onde a ação é executada, se desativa indica que é uma ação de frontend, o código
de execução é definido na opção runAction.
Para ações de servidor é indicado na opção Identificador da regra de negócio qual o código de
servidor a executar, deve-se na opção GO Studio – Toolbox – Regras de Negócio criar uma
regra do tipo A Pedido, mais detalhes no artigo: Usa PHC CS – Regras de Negócio.
Dados Gerais – Comportamento
Neste separador podemos colocar código que corre no frontend para alterar o comportamento
dos componentes presentes no ecrã, através da seguinte função:
' Código PHC GO – Typescrip
function updateConfig(currentRecord: GenericVO): void
A função updateConfig recebe na variável currentRecord o registo atual, que pode ser
interpretado como o contexto em que o utilizador está inserido. Pode ser útil para consultar
valores do registo e condicionar alguma decisão.
Esta função é executada após a seleção de um registo no modo de lista do ecrã e antes da
exibição dos dados do registo selecionado.
A função, também é executada ao criar um novo registo ou ao alterar dados de um registo
existente, sendo neste caso da alteração, executado várias vezes conforme as alterações
efetuadas.
Este comportamento é ideal para ajustar dinamicamente componentes, alterando as suas
propriedades visuais, desde colocar em modo de leitura, esconder, tornar obrigatório o seu
preenchimento, entre outras.
Existe um SDK de frontend com várias funções utilitárias para facilmente modificar o
comportamento desejado no componente: Usa PHC - SDK de add-ons.
Nota: Para alterações de valor do componente, o que devemos alterar é o model associado, ou
seja, diretamente o campo no registo (currentRecord) que estamos a criar ou alterar, a
aplicação se encarrega de atualizar o valor do componente de acordo com a alteração
efetuada.
Atenção: Se o registo se encontra em modo de consulta, apenas propriedades visuais podem
ser alteradas, as propriedades de valor ligadas ao model não devem ser alteradas.
Por exemplo a opção do PHC CS Evento Refrescar pode ser programado nesta função:
' Código PHC GO – Typescrip
function updateConfig(currentRecord: GenericVO): void {
sdk.setReadonly('rarity', !sdk.User.esa);
}
Neste exemplo queremos colocar o campo que indica que se trata de um álbum raro, em modo
só de leitura para o caso do utilizador atual não ser administrador de sistema. Usamos a função
do SDK: setReadonly onde o primeiro parâmetro indica o componente a afetar.
O identificador do componente no ecrã é igual ao nome do campo na entidade, e o segundo
parâmetro um valor lógico que quando verdadeiro coloca o componente em modo de leitura
apenas.
Como desejamos condicionar esse atributo pelo facto de utilizador estar marcado na sua ficha
como sendo ou não administrador de sistema, usamos outra função do SDK que nos dá a
informação do utilizador atual, pela variável User, sendo que o campo na entidade de
utilizadores que guarda esta informação é o esa.
A informação acerca das entidades, respetivos campos e coleções pode ser consultada na
aplicação em: Definições – Gestão de Dados – Dicionário de Dados.
Dados Gerais - Comportamento das ações core
Neste separador podemos colocar código que corre no frontend para alterar o comportamento
das ações comuns a todos os ecrãs, devemos criar nesta área um comportamento por cada
ação presente na lista da opção Tipo de Ação que necessitarmos.
Como os ecrãs têm dois modos, lista e consulta, e podemos esconder ou desabilitar a ação, vai
existir dois tipos de funções, cada um com dois tipos de assinatura:
- Modo de lista e colocar invisível o componente:
' Código PHC GO – Typescript
Function isActionHidden(selectionStatus: DataTableSelectionStatus, currentSeries?:
GenericVO):Boolean
- Modo de consulta e colocar invisível o componente:
' Código PHC GO – Typescript
Function isActionHidden(currentRecord: GenericVO, currentSeries?: GenericVO):Boolean
- Modo de lista e colocar desabilitado o componente:
' Código PHC GO – Typescript
Function isActionDisabled(selectionStatus: DataTableSelectionStatus, currentSeries?:
GenericVO):Boolean
- Modo de consulta e colocar desabilitado o componente:
' Código PHC GO – Typescript
Function isActionDisabled(currentRecord: GenericVO, currentSeries?: GenericVO):Boolean
Modo de Lista:
No modo de lista, o utilizador pode selecionar mais que um registo antes de escolher
determinada ação, assim, a função recebe uma seleção na variável selectionStatus que tem
uma propriedade selected com os registos que foram escolhidos pelo utilizador:
Código PHC GO – Typescript
export interface DataTableSelectionStatus {
selected: any[];
selectedChildren: any[];
anySelectedInPage: boolean;
allSelectedInPage: boolean;
allSelected: boolean;
anySelected: boolean;
singleSelected: boolean;
countSelected: number;
}
' Código PHC GO – Typescript
Function isActionDisabled(selectionStatus: DataTableSelectionStatus, currentSeries?:
GenericVO):Boolean {
If (!sdk.User.esa)
{
return selectionStatus.selected.some(value => value.rarity === true);
}
return false;
}
Caso o utilizador não seja administrador de sistema !sdk.User.esa o método some percorre a
seleção e cada registo é enviado para a variável value, onde é verificado se esse registo é
considerado raro através da condição value.rarity === true.
Se a condição returnar verdadeiro, a função some pára a sua busca e retorna imediatamente.
Como retorna true a ação fica desabilitada, caso não seja encontrado um registo nestas
condições, a função retorna false no fim da execução e a ação fica ativa.
Modo de consulta:
' Código PHC GO – Typescript
Function isActionDisabled(currentRecord: GenericVO, currentSeries?: GenericVO):Boolean {
If (!sdk.User.esa)
{
return currentRecord[‘rarity’]
}
return false;
}
Neste modo recebemos o registo que estamos a consultar na variável currentRecord, e
acedemos ao valor do campo respetivo para saber se o álbum é ou não considerado raro.
Uma nota, no frontend, para aceder ao valor de um campo de uma variável que representa
uma entidade, se pode fazer via direta currentRecord.rarity ou usando como se fosse um array
currentRecord[‘rarity’].
Estes dois exemplos, modificam visualmente as ações no ecrã, evitando assim que o utilizador
tente fazer algo que não lhe é permitido.
Atenção: É no backend, onde acontece a execução da ação que o utilizador iniciou no
frontend, e já sabemos, essa ação pode ter sido pedida através de uma aplicação externa via
API do backend, portanto a regra de negócio, deve no mínimo, existir sempre no backend.
Exemplo de regra de servidor para a ação: Apagar.
' Código PHC GO – VB.NET
Public Function OnDelete(itemVO As U0000_AlbumVO, runWarningRules As Boolean) As List(Of
MessageVO)
Dim listMsg As List(Of MessageVO) = New List(Of MessageVO)
If itemVO.rarity
If not SDK.User.getCurrentInfo.esa
listMsg.Add(new MsgError("Only administrators have access to delete rare albums."))
End If
End If
Return listMsg
End Function
Dados Gerais - Menu
Neste separador podemos programar a opção do PHC CS em Supervisor - Framework PHC –
Ecrãs do Utilizador com o nome: Aparece no menu principal dos ecrãs de utilizador ou dentro
do grupo …
No PHC GO o ecrã tem que ser adicionado a um add-on, e esse add-on define um valor no seu
campo Nome e esse valor é usado para criar uma entrada no menu da aplicação, pertencente a
esse menu ficaram todos os ecrãs que estejam incluídos no add-on.
Para cada um dos ecrãs a entrada de menu criada irá ter o valor definido no campo Título do
ecrã, sendo este o comportamento por omissão, no entanto podemos alterar este
comportamento de diversas formas utilizando este separador.
- Não mostra no menu da aplicação
Quando ativa indica que não será criada uma opção no menu da aplicação para aceder ao
ecrã, no entanto a sua rota estará disponível para ser chamada no frontend.
Essa chamada pode ser através de SDK de frontend, o que vai causar que o ecrã apareça
visível ao utilizador, e via API do backend que controla a entidade associada ao ecrã.
Isto que dizer que a API desta entidade, apesar de o ecrã não aparecer no frontend, pode
ser chamada pelo frontend ou via Engine, permitindo assim gerir toda a operação
relacionada com essa entidade, como criar registos, gravar alterações, apagar registos, etc
- Ecrã de definições
É semelhante ao comportamento descrito no inicio, só que a entrada de menu em vez de
ser criada na raiz é criada abaixo da entrada de sistema já existente com o nome
Definições.
- Mostra em pasta da aplicação
É semelhante ao comportamento descrito na opção ecrã de definições só que permite
escolher qual o nome da entrada de menu de sistema já existente, onde desejamos criar
em segundo nível a nossa entrada.
Dados Gerais – Traduções
Ao colocar um componente no ecrã, este apresenta um título e uma ajuda (tooltip) visível para
o utilizador. A aplicação PHC GO suporta vários idiomas por padrão, incluindo Português,
Espanhol, Inglês, Português de Angola e Português de Moçambique. No momento do login, o
utilizador pode selecionar o idioma desejado para utilizar na aplicação.
Para que a tradução automática funcione corretamente, é necessário, durante a customização,
definir os textos correspondentes às propriedades do componente (como o título e a ajuda) e a
outras propriedades, como o nome e a descrição do ecrã, em todos os idiomas suportados.
Esta funcionalidade é facilitada através de uma grelha que contém uma coluna de chaves e
várias colunas correspondentes aos diferentes idiomas. As chaves são geradas
automaticamente à medida que os componentes são criados no desenho do ecrã, sendo
inicialmente preenchidas com o mesmo texto em todas as colunas de idioma. O utilizador
apenas precisa de ajustar os textos nos idiomas pretendidos.
Quando um componente possui dois textos, o título principal e a ajuda, são geradas duas
chaves semelhantes, com a chave da ajuda terminando em .TOOLTIP, por exemplo, para o
componente "Nome do cantor/banda de álbum", associado ao campo
U0000_Album.SingerName, são geradas as seguintes duas chaves:
- ENTITYDATAFIELD.U0000_ALBUM.SINGERNAME
- ENTITYDATAFIELD.U0000_ALBUM.SINGERNAME.TOOLTIP