image

Access unlimited bootcamps and 650+ courses

50
%OFF
Article image
Dio Education
Dio Education15/06/2023 11:16
Share

Entendendo a Base do Aplicativo Reactive

    Entidades/Entities 

     

    Entidades são elementos que permitem que você persista informações no banco de 

    dados e implemente seu modelo de banco de dados. Você pode pensar neles como 

    tabelas ou visualizações de banco de dados. 

     

    Uma Entidade é definida através de Atributos de Entidade que armazenam as informações relacionadas a ela. Exemplos de atributos de entidade são: Nome, Endereço, CEP, Cidade e assim por diante. 

     

    Chave primária (identifier) 

    No OutSystems, uma chave primária é chamada de Identificador de Entidade. 

     

    Quando uma Entidade é criada, um atributo chamado Id é adicionado automaticamente como Identificador de Entidade. Por predefinição, é do tipo de dados Long Integer e o seu valor é calculado automaticamente em sequência (um AutoNumber em OutSystems).  

     

    Dessa forma, você não precisa implementar nenhuma lógica específica para identificar exclusivamente cada registo de entidade. 

     

    Você pode usar outros tipos de dados como Identificadores de Entidade ou 

    desativar a AutoNumeração em um atributo. Nesses casos, você precisa implementar a lógica para identificar exclusivamente cada registo de entidade. 

     

    Para definir outro atributo como Identificador de Entidade, basta acessar esse atributo, clicar com o botão direito do mouse e defini-lo como identificador. 

     

    Em OutSystems não é possível ter chaves compostas porque apenas um atributo pode ser o Identificador de Entidade. Mas você pode usar índices para criar chaves alternativas (veja mais abaixo sobre índices). 

     

    Atributos Sequenciais 

     

    Os atributos sequenciais são úteis para os atributos do Identificador de Entidade. É uma maneira fácil de garantir que cada registo tenha uma chave primária exclusiva. Ao criar novos registos no banco de dados com Entity Actions, a plataforma calcula automaticamente um novo valor sequencial e único. 

     

    Só pode haver um atributo sequencial por Entidade. 

      

    Impactos ao Mudar Entidades 

    Quando você cria um novo atributo de entidade, a plataforma gerência automaticamente a atualização de todos os registros armazenados no banco de dados para você. O novo atributo é adicionado aos registros e definido com o valor padrão para seu tipo de dados. 

     

    Quando você define um atributo de entidade como obrigatório, ele é validado automaticamente na interface do usuário pela plataforma. No entanto, no banco de dados, são criados atributos obrigatórios permitindo valores nulos, portanto, no nível do banco de dados não há validação para atributos obrigatórios. 

     

    Quando você exclui uma entidade ou um atributo de entidade, a plataforma é permissiva e permite que você faça isso quer esteja sendo usado ou não, mas você deve corrigir os elementos onde está sendo usado. No banco de dados, a entidade ou atributo de entidade não é excluído pela plataforma. 

     

    Entidades estáticas 

    Uma Entidade Estática consiste em um conjunto de valores nomeados.  

    Pense em Entidades Estáticas como valores literais armazenados em um banco de dados cujo 

    escopo é sempre global.  

     

    A pasta Registros da Entidade Estática contém os dados e os Atributos definem a estrutura dos dados. A única ação disponível para as Entidades Estáticas é a ação Get<StaticEntity>, pois OutSystems gerencia a persistência de dados para você. 

     

    Ao modelar seus dados, lembre-se de que as Entidades Estáticas só podem conter chaves estrangeiras de outras Entidades Estáticas. 

     

    Atributos padrão 

    O Service Studio cria os seguintes atributos automaticamente: 

     

    • Identidade (Id)  
    • Identifica um registro e é sempre único. O uso da numeração automática não é recomendado, pois pode gerar problemas em cenários complexos. 
    • Etiqueta (Label)  
    • Contém um valor a ser exibido em um aplicativo. 
    • Ordem (Order) 
    • Define a ordem de exibição dos registros para o usuário final. 
    • Está ativo (IsActive) 
    • Define se um registro está disponível durante o tempo de execução. 
    • Por exemplo, os registros com Is_Active definido como false não são usados quando o scaffolding usa a Entidade Estática. 

      

    Relacionamentos de Entidade 

    Os relacionamentos são criados definindo um único atributo de referência (também conhecido como "chave estrangeira" na terminologia do banco de dados). Seu tipo de dados é <Entity> Identifier o que corresponde ao tipo do Identificador da outra entidade.  

     

    O atributo de referência é mostrado com um ícone diferente ( ou , dependendo do tipo de relacionamento) que também é visível nos Diagramas de Entidade. 

     

    A entidade onde o atributo de referência deve ser criado depende da cardinalidade (Um para Um, Um para Muitos, Muitos para Muitos) e da opcionalidade (obrigatória ou opcional) do relacionamento.  

     

    Um relacionamento pode ser: 

     

    • Um a um 
    • Um para muitos 
    • Muitos para muitos 

     

     

    Um-para-Um 

    Um relacionamento Um para Um entre duas entidades indica que um registro em Entity A corresponde a um registro em Entity B e um registro em Entity B tem apenas um registro associado em Entity A . 

     

    Exemplo

    Para implementar esse relacionamento, a chave primária do ContactPhoto deve ser 

    um atributo de referência para a chave primária do Contact : 

     

    image 

      

    Um-para-Muitos 

     

    Um relacionamento um para muitos entre duas entidades indica que um registro em Entity A corresponde a vários registros em Entity, B mas um registro em Entity B tem apenas um registro associado em Entity A . 

     

    Exemplo

    A Company tem um ou mais Contact . Um Contact pertence a um Company . Para implementar esse relacionamento, o atributo de referência deve estar na entidade Contact : 

     

    image 

      

    Muitos-para-Muitos 

    Um relacionamento muitos para muitos entre duas entidades indica que um registro 

    em Entity A corresponde a vários registros em Entity B e um registro em Entity B pode ter mais de um registro associado em Entity A . 

     

    Exemplo

    A Contact pode passar de Company . Por sua vez, a Company pode ter mais de 

    um Contact . Para implementar esse relacionamento, uma terceira Entidade deve ser 

    criada, CompanyContact , com pelo menos os seguintes atributos: 

    • Id 
    • CompanyId 
    • ContactId 

     

    image 

     

    Regras de Excluir Dados 

    Ao criar relacionamentos entre as Entidades em seu módulo, você deve definir qual tipo de integridade referencial deseja utilizar ao excluir registros . 

    O seguinte Diagrama de Entidades define a relação entre Clientes (Entidade A principal) e Encomendas (Entidade B relacionada), onde um Cliente pode ter várias Encomendas, e uma Encomenda pertence a um e apenas a um Cliente. O atributo de referência , que corresponde na terminologia do banco de dados a uma chave estrangeira, é o atributo CustomerId em Entity Order . 

     

    image 

    Neste exemplo, especificar a integridade referencial é definir o que acontece com os Pedidos de um Cliente quando esse Cliente é excluído. Para especificar a integridade referencial em um relacionamento entre duas Entidades, você precisa editar o atributo de referência da Entidade relacionada e definir a propriedade Excluir Regra para um dos seguintes valores: Protect , Delete ou Ignore

     

    image 

    Proteger 

    Definir a regra de exclusão para Protect evitar a exclusão de registros da Entidade principal enquanto houver registros associados na Entidade relacionada. Esse comportamento é garantido por uma restrição de banco de dados criada no atributo de referência. Se você tentar excluir um registro na Entidade principal que  ainda possui registros associados na Entidade relacionada, o Platform Server retornará uma exceção de banco de dados e a operação não será executada. 

     

    Excluir 

    Definir a Regra de exclusão para Delete garante que, quando um registro da Entidade principal for excluído, todos os registros associados nas Entidades relacionadas também serão excluídos. Esse mecanismo é comumente conhecido como Exclusão em Cascata. Esse comportamento é garantido por uma restrição de banco de dados criada no atributo de referência. 

     

    Ignorar 

    Definir a Regra de Excluir para Ignore permite excluir registros da Entidade principal mantendo os registros associados na Entidade relacionada. O Ignore valor não garante integridade referencial e, portanto, nenhuma restrição de banco de dados é criada. Da mesma forma , quando você altera a propriedade Delete Rule de um valor anterior para Ignore , o índice automático correspondente é excluído (a menos que você tenha alterado manualmente 

    qualquer uma de suas propriedades). Se o atributo de chave estrangeira fizer referência a uma Entidade externa exposta por uma Extensão, o único valor possível para a propriedade Delete 

    Rule será Ignore, pois a integridade referencial não pode ser garantida.  

     

    Obtenção de Dados 

    Muitas vezes você precisa buscar dados de um banco de dados para, por exemplo, mostrá-los na tela. Uma maneira eficiente de buscar dados de bancos de dados no OutSystems é usar um Aggregate. 

     

    Veja como você pode buscar dados em seu aplicativo usando um Aggregate. Os agregados são uma maneira prática de obter dados e não exigem conhecimento de bancos de dados. Como este é um aplicativo simples, você pode referenciar os dados diretamente do módulo principal. 

     

    Exemplo: 

    Ao criar as Entidades, elas ficam disponíveis no Service Studio em Data > Entities > Database . Outro modo é usar as que existe de teste da Outsystems, chamado de Samples. 

     

    image

      

    Publique o aplicativo clicando no botão Publicar com 1 clique. Essa etapa é opcional, mas permite que o aplicativo mostre a visualização dos dados posteriormente. 

     

    image

    É hora de carregar alguns dados para a Tela. Vá para Interface > Fluxos de interface do usuário > Fluxo principal e clique com o botão direito do mouse na tela inicial . Selecione Buscar dados do banco de dados. Uma nova tela de edição Agregada é aberta e há um aviso de que você precisa de alguns dados. 

    Com o Aggregate ainda aberto, navegue até Data > Entities > Database > OutSystemsSampleDataDB. Arraste a Entidade Sample_Employee para a janela Agregar. Se você estiver usando seus dados em vez de dados de amostra OutSystems, arraste alguma outra Entidade. O Service Studio mostra a visualização de dados em colunas e usa o nome da 

    entidade para nomear o agregado. 

     

    image 

     

    Volte para Interface > UI Flows > Main Flow > Home e observe o GetEmployees Aggregate na tela. Expanda o Agregado para ver as Entidades e, em seguida, expanda as Entidades para listar os Atributos. Há também um aviso de que você não está usando os dados em nenhum lugar. 

    image

      

    Mostrar dados em um widget 

    Depois de buscar dados do banco de dados, use um dos muitos widgets OutSystems para mostrar os dados aos usuários. Continuando da seção anterior, neste exemplo você cria uma lista com os sobrenomes dos funcionários. 

     

    Abra sua tela inicial para edição. Para fazer isso, clique duas vezes em Home em Interface > UI Flows > Main Flow. Na barra de pesquisa, procure o widget Lista e arraste o widget para a Tela. O Service Studio agora mostra um widget de lista vazio. 

    image 

     

     

    Clique no widget Lista para selecioná-lo e vá para as propriedades. No campo Origem , selecione GetEmployees.List . Com isso, você informa ao aplicativo qual fonte de dados usar com este widget. 

    image

     

    Com seu widget de Lista conectado a uma fonte de dados, adicione alguns Atributos para mostrar os dados na Lista. Expanda a Entidade para ver os Atributos, em Interface > UI Flows > Main Flow > Home > GetEmployees > Sample_Employee . Arraste um Atributo, por exemplo, LastName para o widget Lista. Isso diz ao widget para listar todos os sobrenomes que estão no banco de dados. 

    image

     

    Publique seu aplicativo e carregue-o no navegador. Há um widget de lista listando os sobrenomes dos funcionários. 

     

    Client Variables/ Site Properties 

    O que é Client Variables?  

    Uma variável de cliente é uma variável de configuração que permite armazenar longa vida e informações específicas do usuário. 

     

    image 

     

    Restrito a tipos de dados básicos e Identificadores de Entidade. Os valores são armazenados no navegador, mantido no Login e são redefinidos para o padrão ao sair da sessão. 

     

    Evite armazenar objetos sensíveis ou informação confidencial. 

    Quando usar variáveis de cliente: 

    • Cache de valores acessados com frequência 
    • Nome de usuário 
    • Configurações/configurações do usuário 
    • Pesquisar palavra-chave 
    • Itens por página 
    • Layout selecionado (por exemplo, grade vs. tabela). 

     

    Site Properties 

    O que é? 

    Variável global que tem um valor constante ou um valor que não muda com 

    frequência. 

     

    Como usar 

    Neste exemplo, há uma tela com um agregado chamado GetEmployees. Essa agregação recupera registros de uma entidade Employee, com um máximo de registros padrão. O máximo de registros é definido por uma propriedade de site chamada MaxRecords. 

     

    Na guia Dados, clique com o botão direito do mouse em Propriedades do site e selecione Adicionar propriedade do site. Defina o nome da propriedade do site como MaxRecords e seu 

    tipo de dados Integer, na propriedade de valor padrão, insira 10 . 

     

    image

    Selecione o agregado GetEmployees e defina o Max. Records para Site.MaxRecords. 

     

    image

    Clique no botão Publicar com 1 clique para publicar seu aplicativo e clique em Abrir no navegador. 

    Abra uma tela que usa o agregado GetEmployees. Verifique se os registros recuperados são 10 ou menos. No Service Studio, clique em Module Management no Service Center: 

     

    image 

    No Service Center, verifique se você está no módulo correto. Se não estiver, clique em Factory e depois em Modules e selecione seu módulo Clique em Propriedades do Site e verifique se ele lista a propriedade do site MaxRecords. 

     

    image 

    Clique em MaxRecords e altere seu valor efetivo para 5. Ao fazer isso, você está alterando o valor de MaxRecords em tempo de execução e a agregação agora recuperará 5 registros em vez dos 10 padrão. 

     

    image 

    Clique em Aplicar e atualize a página do seu aplicativo. Os MaxRecords exibidos devem adotar o novo valor. 

     

    Client Actions 

    Ação que executa a lógica no lado do cliente. 

     

    Ação do cliente exposta 

    Uma Ação não pode ser exposta quando: 

     

    Tem um parâmetro que é definido usando uma Entidade/Estrutura que não está 

    exposta. Possui um parâmetro que é definido usando uma Entidade/Estrutura que 

    é reutilizada de outro módulo. 

     

    Caso a execução dos módulos Produtor e Consumidor seja sob diferentes Provedores 

    de Usuários, os módulos possuem sessões diferentes. Neste caso, as variáveis 

    associadas à sessão podem conter valores diferentes entre os módulos. 

     

    Propriedades 

     • Nome: Identifica um elemento no escopo onde está definido, como uma tela, ação ou módulo. 

    Obrigatoriedade: Sim 

    • Descrição: Texto que documenta o elemento. Útil para fins de documentação. O tamanho máximo desta propriedade é de 2.000 caracteres.  

    • Publico: Defina como Sim para permitir que o elemento seja adicionado como dependência por outros módulos. 

    Obrigatoriedade: Sim 

    Valor Padrão: Não 

    • Função: Defina como Sim para definir a ação como uma função. As funções devem retornar um valor e podem ser usadas em expressões. Esta propriedade só está disponível em ações de escopo global. As ações do cliente definidas como funções só podem ser usadas em expressões de ação do cliente. 

    Obrigatoriedade: Sim 

    Valor Padrão: Não 

    • Icone: Imagem a ser exibida para ajudar a identificar este elemento. As dimensões recomendadas para o ícone são 32 × 32 pixels. 

    Obrigatoriedade: Sim 

    • Nome Original: Nome do elemento conforme definido no módulo que o implementa (módulo produtor). Esta propriedade é somente leitura. Esta propriedade só é visível para elementos referenciado. 

    Obrigatoriedade: Sim 

     

    Server Actions 

    Ação que executa a lógica no lado do servidor. 

     

    Ação do cliente exposta 

    Uma Ação não pode ser exposta quando: 

     

    Tem um parâmetro que é definido usando uma Entidade/Estrutura que não está 

    exposta. Possui um parâmetro que é definido usando uma Entidade/Estrutura que 

    é reutilizada de outro módulo. 

     

    Caso a execução dos módulos Produtor e Consumidor seja sob diferentes Provedores 

    de Usuários, os módulos possuem sessões diferentes. Neste caso, as variáveis 

    associadas à sessão podem conter valores diferentes entre os módulos. 

     

    • Nome: Identifica um elemento no escopo onde está definido, como uma tela, ação ou módulo. 

    Obrigatoriedade: Sim 

    • Descrição: Texto que documenta o elemento. Útil para fins de documentação. O tamanho máximo desta propriedade é de 2.000 caracteres. 

    • Publico: Defina como Sim para permitir que o elemento seja adicionado como dependência por outros módulos. 

    Obrigatoriedade: Sim 

    Valor Padrão: Não 

    • Função: Defina como Sim para definir a ação como uma função. As funções devem retornar um valor e podem ser usadas em expressões. Esta propriedade só está disponível em ações de escopo global. As ações do cliente definidas como funções só podem ser usadas em expressões de ação do cliente. 

    Obrigatoriedade: Sim 

    Valor Padrão: Não 

    • Icone: Imagem a ser exibida para ajudar a identificar este elemento. As dimensões recomendadas para o ícone são 32 × 32 pixels. 

    Obrigatoriedade: Sim 

    • Nome Original: Nome do elemento conforme definido no módulo que o implementa (módulo produtor). Esta propriedade é somente leitura. Esta propriedade só é visível para elementos referenciado 

    Obrigatoriedade: Sim 

    Avançado 

    • Cache em minutos: O conteúdo ou resultados de tempo máximo são armazenados na memória. Quando indefinido, nada é armazenado em cache. 

     

     Autor: Thiago Mari - OutSystems Expert

     

     

     

     

    Share
    Comments (0)