Manuais
PHC GO Ecrãs e Tabelas
 

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