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, deve haver 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 aplicativo 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 a tabela Product também. Ela aparecerá vinculada à tabela OrderDetail, porque 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 Orders e selecionar o painel OrderDetails.
-
Clique em Mais > Padrões. A caixa de diálogo Padrões é aberta.
-
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, veja Vinculação implícita e explícita.
-
Clique em Salvar.
-
Se você voltar à pré-visualização da página Orders 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 Product, 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 Product (List).
-
Navegue até a regra Product (List) encontrando-a em App Workbench > Rules.
-
Na aba Columns, clique em + Column.
-
No campo Column or Expression, insira
P.UnitPrice. -
No campo Target, selecione UnitPrice.
-
Clique em Save.
-
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.
-
No painel Order Details, selecione Controls para ver a lista de controles presentes no painel.
-
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, em seguida, abrindo o designer ao vivo na gaveta de ações e selecionando o controle Product.
-
Na aba List Options, clique no botão Retrievals.
-
Na caixa de diálogo Retrievals, clique em + Add Retrieval.
-
No campo Panel Column, selecione UnitPrice. No campo (List Source) Column, 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. Após isso, 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
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 FirstName na tabela Employee 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 Finalidade, insira Validação.
-
No campo Alvo, certifique-se de que Funcionário está 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 à Esquerda, insira
E.FirstName. -
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. O diálogo Todos os Eventos (Funcionário (Fonte)) é aberto.
-
Encontre o evento Salvar e clique em Detalhe do Evento da Tabela.
-
No painel Validações, clique em Registrar.
-
No campo Tipo, certifique-se de que Regra está selecionado.
-
No campo Regra, selecione Funcionário (Primeiro Nome Obrigatório).
-
No campo Vinculação, certifique-se de que Implícito está 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 "O 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 precisa 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
O próximo passo é registrar nossa regra em um evento. Em vez de usar um dos eventos intrínsecos, criaremos um evento personalizado para que possa ser acionado pelo usuário a partir da interface.
-
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. No campo Refresh Scope, selecione Row Refresh. Isso garante que, após o botão ser clicado, a linha na interface seja atualizada imediatamente para mostrar a alteração, sem exigir uma atualização completa da página. 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 da interface (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 interface 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 Funcionários e acesse a lista de controles no painel Funcionários.
-
Clique em + Controle para adicionar um novo controle.
-
No campo Tipo de Controle, selecione Botão.
-
No campo Nome, insira
First Name Upper. Clique em Próximo. -
No campo Executar um Evento, selecione UpperFirstName, nosso evento recém-criado.
-
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 Lower CRUD
Para praticar, tente repetir estes 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.