Ir para o conteúdo

Introdução ao App Builder - Aula 7: Mais sobre regras

Esta é a sétima aula da série de tutoriais Introdução ao App Builder.

Temos utilizado regras para desenvolver nossa aplicação Northwinds desde a Aula 3, mas agora vamos aprofundar nosso entendimento sobre elas, conhecendo alguns conceitos adicionais relacionados às regras e seu uso.

Regras padrão

Se você deseja que certos dados sejam adicionados por padrão a novos registro(s) assim que forem criados, precisa usar o que chamamos de regra padrão. Por exemplo, se você está adicionando um novo produto, é necessário ter um preço padrão.

As regras padrão são criadas na mesma área do App Builder onde você constrói outras regras, mas antes de criarmos nossa primeira regra padrão, vamos dar uma olhada em outro conceito importante: junções.

Junções

Ao criar regras, às vezes é necessário extrair dados de duas tabelas separadas. Para fazer isso, unimos as tabelas, usando o que chamamos de junção. Existem três tipos de junções: interna, externa à esquerda e externa à direita.

Tipos de junção

  • Junção interna: Uma junção interna retorna apenas os valores que existem em ambas as tabelas.

  • Junção externa à esquerda: Uma junção externa à esquerda retorna todos os valores da tabela da esquerda, independentemente de aparecerem ou não na tabela da direita.

  • Junção externa à direita: Uma junção externa à direita retorna todos os valores da tabela da direita, independentemente de aparecerem ou não na tabela da esquerda.

Criar uma regra padrão

Vamos criar uma regra padrão para o exemplo que usamos acima: não queremos que os usuários finais da nossa aplicação Northwinds definam um preço unitário. Portanto, criaremos uma regra que puxa os preços unitários da fonte de dados.

Na Aula 6, já configuramos os controles de Preço Unitário na interface do usuário da aplicação para serem somente leitura, então agora criaremos uma regra que dita especificamente esse valor.

  1. Vá para App Workbench > Regras e clique em + Regra.

  2. Seguindo as convenções de nomenclatura do App Builder, dê o nome OrderDetail (Default UnitPrice).

  3. No campo Propósito, selecione Padrão.

  4. No campo Alvo, selecione a tabela OrderDetail.

  5. Clique em Criar.

  6. Assim que o App Builder criar a regra, você verá a tabela OrderDetail na aba Tabelas. Precisaremos das colunas OrderID e ProductID.

  7. Ainda na aba Tabelas, clique em + Tabelas e selecione também a tabela Product. Ela aparecerá vinculada à tabela OrderDetail, pois estão conectadas por um relacionamento de chave estrangeira.

  8. Selecione a coluna UnitPrice na tabela Product.

  9. O App Builder escreverá automaticamente a junção, mas clique na aba Junções para garantir que não haja erros:

    Joins

  10. Como em todas as regras, é sempre uma boa prática validá-la clicando no botão Resultados. Você deve ver três colunas, sendo uma o preço unitário de um determinado produto.

Adicionar uma regra padrão a um painel

As regras padrão devem estar conectadas a um painel para ter efeito. Então, vamos voltar à tela de edição da página Pedidos e selecionar o painel OrderDetails.

  1. Clique em Mais > Padrões. A caixa de diálogo Padrões se abre.

  2. Clique em Registrar e outra caixa de diálogo será aberta, com algumas opções:

    1. No campo Tipo, selecione Regra.

    2. No campo Regra, selecione OrderDetail (Default UnitPrice).

    3. No campo Vinculação, selecione Implícita.

      Nota

      Para saber mais sobre as duas opções de vinculação, consulte Vinculação implícita e explícita.

    4. Clique em Salvar.

Se você voltar à pré-visualização da página Pedidos agora e tentar adicionar uma nova entrada no painel Detalhes do Pedido, verá que agora o Preço Unitário é preenchido automaticamente quando você faz uma seleção no campo Produto, o que significa que sua regra padrão está funcionando.

List retrieves

List retrieves são uma forma de expandir a funcionalidade dos controles de lista. Um controle de lista regular permite que você extraia o valor de ID de um registro específico. Um list retrieve permite que você também extraia outros valores. Vamos demonstrar como os list retrieves funcionam melhorando nossa regra existente Product (List).

  1. Navegue até a regra Product (List) encontrando-a em App Workbench > Rules.

  2. Na aba Columns, clique em + Column.

  3. No campo Column or Expression, insira P.UnitPrice.

  4. No campo Target, selecione UnitPrice.

  5. Clique em Save.

  6. Agora vamos atualizar o controle que usa essa regra. Navegue até a tela de edição da página Orders encontrando-a em App Workbench > Pages.

  7. No painel Order Details, selecione Controls para ver a lista de controles presentes no painel.

  8. Clique duas vezes na linha do controle Product.

    Nota

    Você também pode acessar essas mesmas opções visualizando a página Orders com o botão View Page, depois abrindo o designer ao vivo no painel de ações e selecionando o controle Product.

  9. Na aba List Options, clique no botão Retrievals.

  10. Na caixa de diálogo Retrievals, clique em + Add Retrieval.

  11. No campo Panel Column, selecione UnitPrice. No campo (List Source) Column, selecione UnitPrice.

  12. Clique no ícone de confirmação para salvar e sair da caixa de diálogo.

O App Builder levará alguns momentos para salvar. Depois que isso acontecer, retorne à pré-visualização da página Orders e tente editar um dos produtos na página Order Details, você verá que o controle Unit Price é atualizado automaticamente com base na sua seleção.

Validation rules

Outro tipo de regra que você pode utilizar são as regras de validação. Como o nome sugere, elas podem ser aplicadas a certas colunas para garantir que apenas dados de um tipo específico possam ser armazenados nelas. As regras de validação podem ser aplicadas diretamente a tabelas na camada de dados ou a objetos de negócios na camada de negócios.

Vamos demonstrar como as regras de validação funcionam criando uma que rejeita quaisquer descontos superiores a 10%. Para isso, vamos usar uma cláusula WHERE.

  1. Vá para App Workbench > Rules.

  2. Clique em + Rule para criar uma nova regra.

  3. Seguindo as convenções de nomenclatura do App Builder, dê o nome OrderDetail (Validação de Desconto).

  4. No campo Purpose, selecione Validation.

  5. No campo Target, selecione OrderDetail.

  6. Clique em Create.

  7. Na aba Where, clique em + Where Clause. Um diálogo se abre onde você pode criar cláusulas WHERE:

    Where clause dialog

  8. No campo Left Expression, insira OD.Discount.

  9. No campo Operator, selecione >.

  10. No campo Right Expression, insira .1.

  11. Clique em Save e saia do diálogo. O App Builder criou a regra de validação.

Agora que a regra de validação foi criada, vamos garantir que ela se aplique ao objeto de negócios para o qual a criamos.

  1. Vá para App Workbench > Rules.

  2. Selecione OrderDetail (Source), o objeto de negócios que contém os valores de desconto.

  3. Clique em Events. Um diálogo chamado All Events se abre.

  4. Na linha Save, você pode ver quais ações ocorrem quando o usuário final salva um novo registro. É aí que precisamos aplicar a regra de validação que acabamos de criar. Clique em Rule Event Detail nessa linha.

  5. No painel Validations, clique em Register. O diálogo Validation se abre:

    Validation dialog

  6. No campo Type, selecione Rule.

  7. No campo Rule, selecione OrderDetail (Validação de Desconto), a regra de validação que acabamos de criar.

  8. No campo Binding, selecione Implicit.

    Nota

    Para saber mais sobre as duas opções de vinculação, consulte Vinculação implícita e explícita.

  9. No campo Mensagem, insira qual mensagem será exibida para os usuários finais se eles tentarem inserir dados inválidos. Este campo é obrigatório.

  10. Deixe os outros campos com seus valores padrão e clique em Salvar para sair da caixa de diálogo.

Retorne à pré-visualização da página Pedidos e tente adicionar um novo produto no painel Detalhes do Pedido com um desconto maior que 10%. Quando você tentar salvar, deverá ver um erro aparecer, junto com a mensagem de erro que você digitou.

Parâmetros de nível de aplicativo

Em vez de limitar o desconto que os usuários podem aplicar diretamente por meio de uma regra como fizemos agora, também podemos tornar o limite de desconto um valor que os usuários podem modificar. A maneira de fazer isso é adicioná-lo como um parâmetro de nível de aplicativo e armazená-lo na tabela Parâmetro.

  1. Em App Workbench > Páginas, navegue até a página Parâmetro, que criamos na Aula 4.

  2. Na aba Painel, encontre o campo Fonte do Painel e clique no ícone da tabela. Isso o levará à tela de edição da tabela Parâmetro.

  3. Na aba Colunas, adicione uma nova coluna clicando em + Coluna.

  4. Dê o nome DiscountMaximum.

  5. No campo Lógico, selecione Número.

  6. No campo Físico, selecione Decimal.

  7. Clique em Salvar.

  8. Agora, vamos adicionar a nova coluna ao objeto de negócios que é baseado na aba Parâmetro. Você pode encontrá-lo em App Workbench > Regras ou retornando à tela anterior e clicando no ícone de lógica de negócios ao lado do campo Fonte do Painel.

  9. Uma vez que você esteja na tela de edição da regra Parâmetro (Fonte), vá para a aba Tabelas e encontre a nova coluna DiscountMaximum na lista de colunas da tabela Parâmetro. Clique na marca de seleção para selecioná-la.

  10. Agora retorne à página Parâmetro, seja encontrando-a em App Workbench > Páginas ou retornando à tela anterior. Adicione a nova coluna DiscountMaximum à lista de controles no painel Parâmetro.

  11. Agora, na pré-visualização da página Parâmetro, use o botão Editar para escolher o desconto máximo que desejar. Por exemplo, insira .3 para permitir descontos de até 30%.

Edite a regra de validação para usar o novo valor do parâmetro

Embora queiramos permitir que nossos usuários determinem o desconto máximo, a regra de validação que criamos anteriormente usa um desconto máximo fixo e codificado, portanto, ainda não tolerará descontos superiores a 10%. Vamos editá-la para usar qualquer valor que inserirmos na página Parâmetro. Siga estas etapas:

  1. Vá para App Workbench > Regras e abra a regra OrderDetail (Validação de Desconto).

  2. Na aba Tabelas, clique em + Tabelas.

  3. Clique em Adicionar para a tabela Parâmetro.

  4. Agora que a tabela Parâmetro também está sendo exibida na aba Tabelas, selecione a coluna DiscountMaximum.

  5. Vá para a aba Onde. Precisamos editar a cláusula WHERE que criamos porque não queremos mais usar um valor codificado aqui. Clique no ícone de lápis para editá-la.

  6. No campo Expressão da Direita, insira P.DiscountMaximum. O App Builder levará um momento para salvar.

  7. Agora, volte à pré-visualização da página Pedidos. Se você tentar adicionar um novo produto no painel Detalhes do Pedido, verá que agora é permitido dar descontos de até 30%.

Se você tentar dar um desconto acima de 30% agora, não será permitido. No entanto, a mensagem de erro ainda diz o limite anterior, 10%, porque também codificamos isso quando criamos a regra de validação pela primeira vez. Para evitar ter que editar a mensagem toda vez que o limite mudar, vamos usar substituição dinâmica para que a mensagem seja atualizada automaticamente junto com o limite.

  1. Em App Workbench > Regras, navegue até a regra OrderDetail (Fonte).

  2. Esta regra atualmente apenas puxa dados da tabela OrderDetail, então na aba Tabelas, clique em + Tabela e selecione a tabela Parâmetro. Quando ela aparecer, selecione a coluna DiscountMaximum.

  3. Agora a regra tem acesso ao último desconto máximo e será capaz de "ver" quando ele mudar. É uma boa prática dar um Alias que usaremos para nos referir a ele na mensagem, então insira MaxDiscount nesse campo. Para garantir que o número será exibido corretamente na interface do usuário, vá para a aba Columns e defina-o como Percent.

  4. Em seguida, navegue de volta para a mensagem de erro que escrevemos anteriormente, indo para o painel Rule e clicando em Events. Quando o diálogo abrir, encontre a linha Save e clique em Rule Event Detail. A validação que implementamos é mostrada no painel Validations. Clique para editá-la.

  5. Finalmente, no campo Message, substitua o valor fixo 10% por {{ MaxDiscount }}. Colocar o alias entre chaves duplas fará com que o App Builder aplique a substituição dinâmica para mostrar o desconto máximo atual em vez de um valor fixo e imutável.

Regras CRUD

O último tipo de regra que discutiremos são as regras CRUD, que são usadas para atualizar dados em grandes quantidades. As regras CRUD podem ser usadas para criar, inserir, atualizar ou excluir registros, e você frequentemente precisará fazer isso em suas aplicações do App Builder. Vamos ver como trabalhar com regras CRUD e, no processo, conheceremos duas funções importantes. Vamos trabalhar na página Employees desta vez.

Criar uma regra CRUD Superior

  1. Vá para App Workbench > Rules.

  2. Clique em + Rule.

  3. Dê o nome Employee (FirstName Upper Update).

  4. No campo Purpose, selecione CRUD.

  5. Um novo campo, Action, aparece. Selecione Update.

  6. No campo Target Layer, selecione Data Layer.

  7. No campo Target, selecione Employee.

  8. Clique em Create.

  9. Na aba Tables, o App Builder selecionará automaticamente a coluna EmployeeID, que é a chave primária da tabela Employee. Não precisamos de nenhuma outra, então vá em frente e clique em + Column.

  10. Quando o diálogo Add Column abrir, insira a seguinte sintaxe no campo Column or Expression: Upper(E.FirstName).

    Nota

    Esta sintaxe invoca a função de banco de dados Upper(), que recebe uma string como argumento para ser capitalizada e, em seguida, retornada. Várias outras funções de banco de dados estão disponíveis para uso com o App Builder.

  11. No campo Alias, insira UpperFirstName.

  12. No campo Target, selecione FirstName.

  13. Clique em Save.

Uma vez que o App Builder salva a nova regra, verifique se está funcionando clicando em Results no painel Rule. A função Upper pega o nome de cada funcionário e o reescreve usando todas as letras maiúsculas.

Anexar a nova regra CRUD Upper a um evento

É sempre melhor colocar suas regras CRUD nas tabelas, pois isso ajuda a agilizar e organizar os eventos, especialmente se você precisar fazer atualizações ou alterações no futuro.

  1. Localize a regra Employee (Source) em App Workbench > Rules e abra-a.

  2. Clique em Events.

  3. Quando o diálogo All Events abrir, clique em + Rule Event.

  4. Dê o nome Upper First Name. Você pode deixar os outros campos com seus valores padrão. Clique em Save.

  5. Quando você voltar ao diálogo All Events, o novo evento que você acabou de criar deve estar disponível. Clique no botão Rule Event Detail.

  6. No painel Actions, clique em Register.

  7. Quando o diálogo Action abrir, use o campo Rule para selecionar Employee (FirstName Upper Update), a regra CRUD que criamos anteriormente. Clique em Save.

  8. Você verá então a página de confirmação, mostrando detalhes sobre o novo evento:

    UpperFirstName event

    Observe o painel Bindings. Ele mostra quais colunas usamos para vincular os registros na camada de UI (o campo Source Column) aos registros na regra (o campo Rule Column). Com essa vinculação em vigor, a regra será executada apenas contra registros na UI com valores correspondentes. Sem a vinculação, a regra afetaria todas as linhas retornadas na regra CRUD.

Agora que criamos um evento, vamos adicionar um botão que o executa em nossa página.

  1. Navegue até a tela de edição da página Funcionários e acesse a lista de controles no painel Funcionários.

  2. Clique em + Controle para adicionar um novo controle.

  3. No campo Tipo de Controle, selecione Botão.

  4. No campo Nome, insira Primeiro Nome Maiúsculo. Clique em Próximo.

  5. No campo Executar um Evento, selecione UpperFirstName, nosso evento recém-criado.

  6. Clique em Próximo e depois em Concluir.

Agora, acesse a pré-visualização da página Funcionários e teste o novo botão. Ao clicar nele, o primeiro nome de um funcionário deve aparecer em letras maiúsculas.

Hora da prática: Crie uma regra CRUD em minúsculas

Para praticar, tente repetir esses passos que acabamos de seguir, mas desta vez criando um botão que faz o processo oposto. Usando a função de banco de dados Lower(), crie um botão que altera os nomes dos funcionários para serem listados em letras minúsculas.

Revisão e conclusão

Nesta lição, expandimos muito nosso conhecimento sobre regras no App Builder, aprendendo sobre regras padrão, de validação e CRUD, bem como parâmetros de nível de aplicativo e recuperações de lista. Isso conclui esta série de tutoriais.

Seu aplicativo Northwinds agora está funcional! Ele exibe informações sobre clientes, os pedidos que eles fazem, funcionários, fornecedores e transportadoras de maneira organizada e eficiente. Os conceitos e técnicas que você aprendeu durante sua construção podem ser aplicados para construir qualquer outro aplicativo.