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.

-
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, vamos criar uma regra que puxe 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 vamos criar uma regra que ditará especificamente esse valor.
-
Vá para App Workbench > Regras e clique em + Regra.
-
Seguindo as convenções de nomenclatura do App Builder, dê o nome
OrderDetail (Default UnitPrice). -
No campo Propósito, selecione Padrão.
-
No campo Alvo, selecione a tabela OrderDetail.
-
Clique em Criar.
-
Assim que o App Builder criar a regra, você verá a tabela OrderDetail na aba Tabelas. Precisaremos das colunas OrderID e ProductID.
-
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.
-
Selecione a coluna UnitPrice na tabela Product.
-
O App Builder escreverá automaticamente a junção, mas clique na aba Junções para garantir que não haja erros:

-
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 para 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.
-
Clique em Mais > Padrões. A caixa de diálogo Padrões se abre.
-
Clique em Registrar e outra caixa de diálogo será aberta, com algumas opções:
-
No campo Tipo, selecione Regra.
-
No campo Regra, selecione OrderDetail (Default UnitPrice).
-
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.
-
Clique em Salvar.
-
Se você voltar à pré-visualização da página Pedidos agora e tentar adicionar uma nova entrada no painel Order Details, 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ê obtenha o valor de ID de um registro específico. Um list retrieve permite que você também obtenha outros valores. Vamos demonstrar como os list retrieves funcionam melhorando nossa regra existente de Produto (Lista).
-
Navegue até a regra Produto (Lista) encontrando-a em App Workbench > Regras.
-
Na aba Colunas, clique em + Coluna.
-
No campo Coluna ou Expressão, insira
P.UnitPrice. -
No campo Alvo, selecione UnitPrice.
-
Clique em Salvar.
-
Agora vamos atualizar o controle que utiliza essa regra. Navegue até a tela de edição da página Pedidos encontrando-a em App Workbench > Páginas.
-
No painel Detalhes do Pedido, selecione Controles para ver a lista de controles presentes no painel.
-
Clique duas vezes na linha do controle Produto.
Nota
Você também pode acessar essas mesmas opções visualizando a página Pedidos com o botão Visualizar Página, depois abrindo o designer ao vivo na gaveta de ações e selecionando o controle Produto.
-
Na aba Opções da Lista, clique no botão Recuperações.
-
Na caixa de diálogo Recuperações, clique em + Adicionar Recuperação.
-
No campo Coluna do Painel, selecione UnitPrice. No campo Coluna (Fonte da Lista), selecione UnitPrice.
-
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 Pedidos e tente editar um dos produtos na página Detalhes do Pedido, você verá que o controle Preço Unitário é atualizado automaticamente com base na sua seleção.
Validation rules
As regras de validação são usadas para garantir que os dados obrigatórios sejam sempre fornecidos e que os dados inseridos no App Builder sejam válidos. As regras de validação são configuradas na camada de negócios.
Neste exemplo, criaremos uma regra de validação para tornar o Primeiro Nome na tabela Funcionário um campo obrigatório. Siga estas etapas:
-
Em App Workbench > Regras, clique em + Regra.
-
No campo Nome, insira
Funcionário (Primeiro Nome Obrigatório). -
No campo Propósito, insira Validação.
-
No campo Alvo, certifique-se de que Funcionário esteja selecionado.
-
Clique em Criar.
-
Quando o App Builder criar a regra, ele mostrará automaticamente a tabela Funcionário na aba Tabelas, com a chave primária, EmployeeID, selecionada. Selecione também a coluna Primeiro Nome.
-
Na aba Onde, clique em + Cláusula Onde.
-
No campo Expressão da Esquerda, insira
E.PrimeiroNome. -
No campo Operador, selecione
É NULO. -
Clique em Salvar.
A regra agora está criada.
Anexar a regra de validação a um evento
As regras de validação devem ser anexadas a um evento para serem utilizadas. Para este caso de uso, queremos que a validação seja executada toda vez que um usuário tentar salvar um registro de funcionário. Portanto, vamos anexá-la ao evento de salvamento intrínseco.
-
Em App Workbench > Regras, encontre o objeto de negócios Funcionário (Fonte) e abra-o.
-
No painel Regra, clique em Eventos. A caixa de diálogo Todos os Eventos (Funcionário (Fonte)) é aberta.
-
Encontre o evento Salvar e clique em Detalhe do Evento da Regra.
-
No painel Validações, clique em Registrar.
-
No campo Tipo, certifique-se de que Regra esteja selecionado.
-
No campo Regra, selecione Funcionário (Primeiro Nome Obrigatório).
-
No campo Vinculação, certifique-se de que Implícito esteja selecionado.
Nota
Leia mais sobre o que este campo significa em Apêndice B.
-
No campo Mensagem, insira uma mensagem descritiva a ser exibida aos usuários quando essa validação falhar. Algo simples, como "Primeiro nome é obrigatório", deve ser suficiente.
-
Deixe os outros campos com suas seleções padrão e clique em Salvar.

-
A validação foi criada e anexada aos eventos de salvamento na tabela Employee. Para testá-la, visite a pré-visualização da página Employees e tente adicionar uma nova entrada no painel Employees sem um primeiro nome. Você deve ver a mensagem que você inseriu.
Hora da prática: Crie outra regra de validação
Seguindo os mesmos passos acima, crie outra regra de validação para tornar a coluna LastName da tabela Employee obrigatória também. Após criar a regra de validação, anexe-a ao evento de salvamento intrínseco e teste-a.
Regras CRUD
O último tipo de regra que vamos discutir 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.
Crie uma regra CRUD superior
-
Vá para App Workbench > Rules.
-
Clique em + Rule.
-
Dê o nome
Employee (FirstName Upper Update). -
No campo Purpose, selecione CRUD.
-
Um novo campo, Action, aparece. Selecione Update.
-
No campo Target Layer, selecione Data Layer.
-
No campo Target, selecione Employee.
-
Clique em Create.
-
Na aba Tables, o App Builder selecionará automaticamente a coluna EmployeeID, que é a chave primária da tabela Employee. Não precisamos de mais nenhuma, então vá em frente e clique em + Column.
-
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 a 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.
-
No campo Alias, insira
UpperFirstName. -
No campo Target, selecione FirstName.
-
Clique em Save.
Assim que o App Builder salvar 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.
-
Localize a regra Employee (Source) em App Workbench > Rules e abra-a.
-
Clique em Events.
-
Quando o diálogo All Events abrir, clique em + Rule Event.
-
Dê o nome
Upper First Name. Você pode deixar os outros campos com seus valores padrão. Clique em Save. -
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.
-
No painel Actions, clique em Register.
-
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.
-
Você verá então a página de confirmação, mostrando detalhes sobre o novo evento:

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 execute em nossa página.
-
Navegue até a tela de edição da página Employees e acesse a lista de controles no painel Employees.
-
Clique em + Control para adicionar um novo controle.
-
No campo Control Type, selecione Button.
-
No campo Name, insira
First Name Upper. Clique em Next. -
No campo Execute an Event, selecione UpperFirstName, nosso evento recém-criado.
-
Clique em Next e depois em Finish.
Agora, acesse a pré-visualização da página Employees e teste o novo botão. Ao clicar nele, o primeiro nome de um funcionário deve aparecer em letras maiúsculas.
Practice time: Create a Lower CRUD rule
Para praticar, tente repetir estes passos que acabamos de seguir, mas desta vez criando um botão que faz o processo oposto. Usando a Lower() database function, crie um botão que altera os nomes dos funcionários para serem listados em letras minúsculas.
Review and wrap-up
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.