Introdução ao App Builder - Apêndice B: A camada de negócios no App Builder (Avançado)
Este é o segundo apêndice da série de tutoriais Introdução ao App Builder. Esses apêndices complementam as lições da série e fornecem informações mais detalhadas sobre os conceitos introduzidos.
Nesta lição, vamos explorar mais a fundo a camada de negócios do App Builder, a área onde criamos objetos de negócios ou regras.
Uniões
Uniões, introduzidas na Lição 7, são usadas quando trabalhamos com regras que extraem dados de mais de uma tabela na camada de dados. O App Builder é capaz de construir as uniões automaticamente com base nas suas seleções de tabelas de origem para suas regras.
Uniões são um conceito semelhante, mas combinam dados verticalmente, ou seja, empilham os resultados de duas consultas, produzindo uma lista de resultados de mais de uma tabela, desde que tenham uma determinada coluna com o mesmo nome.
Para demonstrar como uma união funciona, vamos criar manualmente uma união que mostra todos os países que existem na fonte de dados Northwinds. Existem duas tabelas, Fornecedor e Cliente, que contêm uma coluna chamada País, então vamos combinar as entradas de ambas.
-
Em App Workbench > Regras, clique em + Regra.
-
Quando a tela de criação de regra aparecer:
-
No campo Nome, insira Fornecedor (Países para Fornecedor e Cliente).
-
No campo Finalidade, selecione Objeto de Negócio.
-
Certifique-se de que Fornecedor esteja selecionado no campo Alvo.
-
Clique em Criar.
-
-
O App Builder criará a regra. Por padrão, ele adiciona a tabela alvo e seleciona sua chave primária. No entanto, nesta regra, estamos apenas interessados nos países presentes nas tabelas, então desmarque a chave primária, SupplierID, e selecione a coluna País.
-
Precisamos adicionar a outra tabela que contém informações sobre países, então clique em + Tabelas.
-
Encontre a tabela Cliente e clique em Adicionar. O App Builder adicionará a tabela Cliente e você poderá vê-la na aba Tabelas ao lado de Fornecedor.
-
Vá para a aba Joins.
-
O App Builder criou um join, mas ajuste-o para torná-lo do tipo que você deseja. Certifique-se de que Supplier esteja selecionado no campo Left e que o campo Type diga Union.
-
Alguns países aparecem mais de uma vez. Para evitar resultados repetidos, vá para o painel Rule e clique em More > Edge Case. Na caixa de diálogo Edge Case Settings, marque a caixa de seleção Select Distinct.
-
Clique na aba SQL se você quiser ver a sintaxe da sua união:

-
Para ver seus resultados, clique no botão Results no painel Rule.
Regras CRUD
Introduzimos as regras CRUD na Lição 7, mas agora vamos dar uma olhada mais de perto nelas.
O acrônimo CRUD significa "Criar, Ler, Atualizar, Excluir". Isso significa que as regras CRUD são o que os desenvolvedores do App Builder usam para inserir, recuperar, alterar ou apagar registros das tabelas presentes na fonte de dados.
Camada de destino: negócios vs. dados
Ao criar uma regra CRUD, você deve selecionar uma camada de destino: seja a camada de negócios ou a camada de dados. Essa escolha é crítica e tem implicações significativas.
Direcionar para a camada de negócios é a abordagem recomendada para a maioria das operações. Quando sua regra CRUD direciona para a camada de negócios (por exemplo, o objeto de negócios Order (Source)), ela age como um usuário interagindo com o aplicativo. Isso aciona todos os eventos intrínsecos (Salvar, Atualizar, etc.) associados a esse objeto de negócios. Isso significa que todas as suas regras de validação configuradas, ações personalizadas e rastreamento de auditoria leve serão executados automaticamente. Essa abordagem garante a integridade e a consistência dos dados com a lógica do seu aplicativo. Também permite que você use manipuladores de sucesso e falha para o evento.
Direcionar para a camada de dados ignora toda a lógica de negócios. Quando você direciona para a camada de dados (por exemplo, a tabela Order), sua regra interage diretamente com o banco de dados. Ela não acionará nenhum evento intrínseco, validações ou rastreamento de auditoria configurados no objeto de negócios. Esta é uma abordagem de "porta dos fundos", útil para operações em massa de alto desempenho onde você deseja intencionalmente ignorar a lógica de negócios.
Você pode ver essa diferença visualmente no fluxo de trabalho visual; uma regra que visa a camada de negócios mostrará subprocessos para sua lógica de eventos, enquanto uma que visa a camada de dados não mostrará.
Nota
O App Builder também suporta regras XP CRUD, que são regras especializadas para gravar dados entre duas fontes de dados diferentes. Essas regras sempre são executadas pela camada de negócios para garantir que toda a lógica seja aplicada. Veja CRUD (regra) para mais informações.
Atualização CRUD
Primeiro, vamos ver como criar uma regra de atualização CRUD. Isso significa modificar registros existentes em uma tabela. Para demonstrar, vamos criar uma regra que aumenta todas as quantidades dos produtos pedidos.
-
Em App Workbench > Regras, clique em + Regra.
-
No campo Nome, insira
OrderDetail (Quantidade + 1). -
No campo Finalidade, selecione CRUD.
-
No campo Ação, selecione Atualizar.
-
Em Camada Alvo, selecione Camada de Dados. (Para esta atualização em massa simples, vamos ignorar a lógica de negócios).
-
No campo Alvo, selecione OrderDetail.
-
Clique em Criar. O App Builder levará alguns segundos para criar a regra.
-
Na aba Tabelas, a tabela OrderDetail aparecerá, com sua chave primária, OrderDetailID, selecionada. Selecione a coluna Quantidade também clicando na sua caixa de seleção.
-
Vamos adicionar uma nova coluna com um alias para nos ajudar a visualizar que a regra está funcionando. Vá para a aba Colunas e clique em + Coluna. Quando a caixa de diálogo Coluna - Adicionar Coluna abrir, insira as seguintes informações:
-
No campo Coluna ou Expressão, insira
OD.Quantity + 1. -
No campo Alias, insira um nome legível. Usaremos
QuantidadePlus. -
No campo Alvo, selecione Quantidade. Isso informa ao App Builder para gravar o resultado dessa expressão na coluna Quantidade.
-
Clique em Salvar.
-
-
Na aba Colunas, você verá agora tanto Quantidade quanto QuantidadePlus. A coluna original OD.Quantity também será direcionada para Quantidade por padrão. Precisamos desmarcá-la para evitar ambiguidade:
-
Encontre a linha OD.Quantity na lista de Colunas.
-
Clique no dropdown Target. Um botão X aparece ao lado. Clique nele para desmarcar a coluna.
Isso garante que apenas nossa expressão QuantityPlus seja usada para atualizar a coluna Quantity. Se ambas fossem marcadas, a que tivesse o índice mais alto "vencería", levando a um comportamento imprevisível.
-
-
A regra está pronta. No painel Rule, clique no painel Results para vê-la funcionando. Note que a coluna extra que você adicionou aumenta todas as quantidades em um:

Hora da prática: Crie uma regra de atualização CRUD
Pense em como você criaria uma regra de atualização CRUD semelhante à que criamos acima, mas com o efeito oposto, ou seja, uma regra que modifica todas as entradas na coluna Quantity da tabela OrderDetail subtraindo um.
CRUD excluir
Regras de exclusão CRUD são usadas para apagar registros das tabelas. No entanto, como é fácil usar elementos da interface para excluir registros individuais, as regras de exclusão CRUD são tipicamente usadas apenas para excluir muitos registros de uma vez. Para demonstrar, vamos criar uma regra de exclusão CRUD que exclui todos os detalhes do pedido associados a um pedido individual, a fim de eliminar a necessidade de excluir todos os detalhes do pedido separadamente quando um pedido é cancelado.
-
Em App Workbench > Rules, clique em + Rule.
-
No campo Name, insira
OrderDetail (Excluir OrderDetail para Pedido). -
No campo Purpose, selecione CRUD.
-
No campo Action, selecione Delete.
-
Em Target Layer, selecione Data Layer.
-
No campo Target, selecione OrderDetail.
-
Clique em Create.
-
Na aba Tables, o App Builder adicionou a tabela OrderDetail e selecionou sua chave primária, OrderDetailID. Mantenha isso selecionado, pois direcionar a chave primária é a maneira mais eficiente e segura de realizar uma operação de exclusão. Selecione também a coluna OrderID; usaremos esta coluna na próxima seção para vincular a regra a um pedido específico.
Anexar regras CRUD a eventos
As regras CRUD podem ser usadas apenas na camada de aplicação quando estão anexadas a eventos, que são processos incorporados em tabelas ou objetos de negócios que são executados em resposta a certas ações, como salvar um registro. Todas as tabelas e objetos de negócios possuem intrinsecamente quatro eventos: salvar, atualizar, excluir e inserir, que são executados à medida que você altera registros no App Builder.
Vamos ativar as regras CRUD que criamos, adicionando-as a um evento intrínseco ou criando nossos próprios eventos personalizados. Ao contrário dos eventos intrínsecos, os eventos personalizados devem ser anexados a um controle na camada de aplicação para serem executados. As regras CRUD que estamos criando exigirão eventos personalizados para serem executadas quando quisermos.
Primeiro, vamos criar um evento personalizado para associar à nossa regra de exclusão CRUD, para que, quando um pedido for excluído, os detalhes do pedido relacionado também sejam excluídos.
-
Em App Workbench > Regras, localize e selecione a tabela Pedido (Fonte).
-
No painel Regra, clique em Eventos. A caixa de diálogo Todos os Eventos (Pedido (Fonte)) é aberta.
-
Como estamos criando um evento personalizado, clique em + Evento de Regra. A página Evento é aberta, onde você pode adicionar os detalhes do novo evento:
-
Em Informações do Evento, no campo Nome, insira
Excluir Detalhes do Pedido. -
Em Mensagens, no campo Confirmação, insira uma mensagem que será mostrada aos usuários antes da execução do evento. A mensagem deve ser informativa, declarando claramente o que acontecerá se o usuário prosseguir. Aqui está um exemplo:

-
Deixe os outros campos com suas seleções padrão e clique em Salvar. O App Builder criará o evento.
Nota
Veja Opções de detalhes do evento para uma descrição completa de todos os campos.
-
-
O evento foi criado, e o App Builder mostra a tela de configuração dele:

Observe que ainda não há regras anexadas. As regras CRUD, como as que estamos trabalhando, são anexadas a eventos no painel Ações. Clique no botão Registrar lá. A caixa de diálogo Ação se abre:
-
No campo Tipo, selecione Regra.
-
No campo Regra, selecione OrderDetail (Excluir OrderDetail para Pedido), a regra de exclusão CRUD que criamos anteriormente.
-
Você pode deixar os outros campos com suas seleções padrão. Clique em Salvar. A caixa de diálogo para a ação mostrará mais detalhes:

-
No painel Vinculações, clique em + Vinculação. Selecione OrderID como a Coluna de Origem e OrderID como a Coluna da Regra.
Nota
Este passo de vinculação é crítico, pois filtra os resultados da sua regra pelo registro do painel contra o qual você executou o evento. Se deixado "não vinculado", a regra de exclusão afetaria todos os registros na tabela OrderDetail. Ao vincular a Coluna de Origem (OrderID do registro do painel Pedido (Fonte)) à Coluna da Regra (OrderID em nossa regra de exclusão), adicionamos um filtro implícito (por exemplo,
WHERE OrderID = 10248).Isso garante que apenas os registros OrderDetail que correspondem a esse OrderID específico sejam excluídos. Se essa vinculação fosse omitida, acionar o evento excluiria todos os registros da tabela OrderDetail.
-
Clique em Salvar.
-
-
O evento personalizado agora está pronto para ser implementado.
Leitura adicional
Além do que é mostrado neste exemplo, a configuração de eventos do App Builder também pode incluir o seguinte:
- Onde os eventos são configurados: Os eventos podem ser configurados na camada de negócios (objetos de negócios) ou na camada de dados (tabelas). Registrar eventos na camada de negócios permite uma lógica distinta por interface, enquanto os eventos da camada de dados são globais. Leia mais em Onde os eventos são configurados.
- Herdabilidade de eventos: Objetos de negócios podem herdar a lógica de eventos da tabela subjacente ou de outras fontes. Leia mais em Herdabilidade de eventos.
Hora da prática: Crie CRUDs e eventos personalizados
-
Crie um evento intitulado Quantidade + 1 no objeto de negócios OrderDetail (Fonte) e adicione o CRUD OrderDetail (Quantidade + 1) como uma ação.
-
Crie outro evento no mesmo local do exercício anterior, mas use a regra CRUD Quantidade - 1.
Uma vez que você tenha criado esses eventos personalizados e os associado às regras CRUD, estará pronto para implementá-los na aplicação.
Acionar eventos
Anexamos as regras CRUD que criamos a eventos personalizados. Portanto, para adicioná-los à nossa aplicação, precisamos usar um controle que acionará, ou disparará, o evento. Em contraste, quando uma regra está associada a um dos eventos intrínsecos (salvar, inserir, atualizar ou excluir), não precisamos fazer isso.
Existem vários tipos de controle disponíveis, mas usaremos controles de botão para acionar nossos eventos personalizados. Para começar, vamos adicionar a regra Order Detail (Excluir OrderDetail do Pedido) a um botão no painel Pedido da página Pedido.
-
Na página inicial do App Workbench, clique no botão para executar sua aplicação em seu estado atual. O App Builder abrirá em uma nova aba.
-
Na pré-visualização do aplicativo, navegue até a página Pedidos.
-
Clique no ícone de hambúrguer para abrir a gaveta de ações e selecione Designer Ao Vivo.
-
Clique no painel Pedidos. Isso fará com que o designer ao vivo mostre opções de edição para ele.
-
Na aba Pedidos - Painel, clique em + Controle. A caixa de diálogo Adicionar um Controle se abre:
-
Pule o campo Coluna porque não estamos adicionando dados ao painel. No campo Tipo de Controle, selecione Botão.
-
No campo Nome, insira Excluir Detalhes do Pedido.
-
No campo Tipo de Controle, selecione Primário.
-
Clique em Próximo. A caixa de diálogo Adicionar um Controle avançará para a próxima etapa, Navegação.
-
No campo Executar um Evento, selecione Excluir Detalhes do Pedido, o evento personalizado que criamos.
-
No campo Ação Após o Evento, selecione Permanecer.
-
Clique em Próximo.
-
Confirme se os detalhes estão corretos e clique em Concluir.
-
-
O App Builder adicionará o botão às linhas no painel Pedidos. Saia do designer ao vivo e certifique-se de que você pode ver um botão que diz Excluir Detalhes do Pedido para cada linha no painel.

-
Teste o botão clicando nele. Se você configurou tudo corretamente, apenas os detalhes do pedido que você selecionou serão excluídos.
Hora da Prática: CRUDs e eventos
Ainda na página Pedidos, adicione dois botões ao painel Detalhes do Pedido. Um deles deve acionar o evento personalizado Quantidade + 1, e o outro deve disparar o evento Quantidade - 1 que criamos anteriormente.
Regras de Subconsulta
As regras de subconsulta são intermediárias entre uma tabela e suas regras. As regras de subconsulta são usadas para calcular ou ajustar os dados e passar essa nova informação para qualquer objeto em que sejam colocadas.
Vamos demonstrar criando uma regra de subconsulta. Ela será usada para encontrar o máximo Número do Pedido da tabela Pedido e, em seguida, adicionar um a ele. Mais tarde, criaremos uma regra CRUD com o propósito de copiar um pedido, e ela dependerá dessa subconsulta para funcionar.
-
Em App Workbench > Regras, clique em + Regra.
-
No campo Nome, insira
Pedido (Número do Pedido + 1). -
No campo Propósito, selecione Subconsulta.
-
No campo Alvo, selecione Pedido.
-
Clique em Criar. O App Builder criará a nova regra.
-
O App Builder selecionará automaticamente a chave primária da tabela Pedido, mas não precisaremos dela para esta regra. Desmarque-a na aba Tabelas.
Por que desmarcar OrderID?
Ao usar uma função agregada como faremos aqui, adicionar qualquer outra coluna à consulta (como OrderID) fará com que o banco de dados aplique uma cláusula
GROUP BYpara essa coluna.Se incluíssemos OrderID, a expressão encontraria o máximo OrderNumber por OrderID. Isso retornaria apenas o OrderNumber para cada pedido, o que não é o que queremos.
Para encontrar o único máximo OrderNumber em toda a tabela, não devemos incluir outras colunas em nossa consulta. É por isso que usamos uma subconsulta: para realizar esse cálculo agregado primeiro, para que possa ser usado em outra regra.
-
Na aba Colunas, clique em + Coluna. A caixa de diálogo Coluna - Adicionar Coluna será aberta.
-
No campo Coluna ou Expressão, insira a expressão
Max(O.OrderNumber) + 1. A sintaxeMax()invoca a Função Max, que encontra o maior valor na colunaO.OrderNumber. Em seguida, um é adicionado a ele. -
No campo Alias e Alvo, insira um alias apropriado para esta coluna, como
MaxOrderNumber. -
No campo Tipo de Dado Lógico, selecione Número, já que OrderNumber não é um valor UUID, mas um número natural.
-
Clique em Salvar.
-
Verifique se a regra está funcionando corretamente clicando no botão Resultados. Deve haver apenas uma linha com um número de pedido, que deve ser um número maior do que o maior número de pedido atualmente presente na tabela Order.
Agora, vamos criar uma regra CRUD capaz de copiar um pedido. Esta regra CRUD dependerá da regra de subconsulta que acabamos de criar para funcionar.
-
Em App Workbench > Regras, clique em + Regra.
-
No campo Nome, insira
Pedido (Copiar Pedido). -
No campo Propósito, selecione CRUD.
-
No campo Ação, selecione Inserir.
-
No campo Camada de Alvo, selecione Camada de Dados.
-
No campo Alvo, selecione Pedido.
-
Clique em Criar. O App Builder criará a regra.
Uma vez que a regra é criada, você precisa configurar seus detalhes.
-
Na aba Tabelas, o App Builder adicionou automaticamente a tabela Pedido, mas precisaremos de mais. Clique em + Tabelas.
-
Selecione a regra de subconsulta que criamos para esse propósito, Pedido (NúmeroDoPedido + 1). Clique em Adicionar.
-
Agora vamos selecionar as colunas que precisaremos:
-
Da tabela Pedido, selecione todas as colunas, exceto as colunas criadas para auditoria leve. Estamos incluindo IDCliente, IDFuncionário e IDTransportadora para tornar o pedido copiado mais completo.
-
Da regra de subconsulta Pedido (NúmeroDoPedido + 1), selecione sua única coluna, NúmeroMáximoDoPedido.
-
-
Na aba Colunas, precisamos configurar os alvos da regra. O alvo de uma regra define qual coluna na tabela base receberá o valor da expressão de origem.
-
Encontre a linha OON.NúmeroMáximoDoPedido e, no dropdown Alvo, selecione NúmeroDoPedido. Isso mapeia nosso novo número incrementado para a coluna correta.
-
Encontre a linha IDPedido. Certifique-se de que seu dropdown Alvo esteja como Nenhum. Isso inclui IDPedido na regra, permitindo-nos usá-lo para vinculação, mas impede que a regra tente copiar o IDPedido original, o que violaria a restrição da chave primária.
-
Verifique se todas as outras colunas (como IDCliente, DataDoPedido, etc.) estão direcionando para suas colunas correspondentes.
Leitura adicional
Saiba mais sobre este conceito em Alvo em regras de objeto de negócios.
-
-
Clique em Resultados no painel Regra para validar se a regra está funcionando corretamente.
Agora criamos a regra que copia pedidos existentes. Vamos anexá-la a um evento personalizado.
-
Em App Workbench > Regras, localize e selecione a tabela Pedido (Fonte).
-
No painel Regra, clique em Eventos. O diálogo Todos os Eventos (Pedido (Fonte)) é aberto.
-
Clique em + Evento de Regra. A página Evento é aberta, onde você pode adicionar os detalhes do novo evento:
-
Em Informações do Evento, no campo Nome, insira
Copiar Pedido. -
Em Mensagens, no campo Confirmação, insira a mensagem de confirmação que será exibida aos usuários antes da execução do evento.
-
Deixe os outros campos com suas seleções padrão e clique em Salvar.
Leitura adicional
Leia sobre os outros campos em Opções de detalhes do evento.
-
-
O evento foi criado. No painel Ações, clique em Registrar para adicionar nossa nova regra. A caixa de diálogo Ação se abre:
-
No campo Tipo, selecione Regra.
-
No campo Regra, selecione Pedido (Copiar Pedido).
-
No painel Vinculações, clique em + Vinculação e selecione OrderID como a Coluna de Origem e OrderID como a Coluna da Regra. Usar o OrderID (uma chave primária) para vinculação é mais confiável do que usar OrderNumber, que pode não ser único.
-
-
Agora que a nova regra está configurada e anexada a um evento, adicione um botão ao painel Pedidos na página Pedidos que a aciona. Repita os passos que seguimos na seção Acionar eventos, mas desta vez adicione a nova regra Pedido (Copiar Pedido).
-
Por fim, verifique se seu novo botão está funcionando conforme o esperado visitando a pré-visualização da página Pedidos e clicando nele.
Validações
Regras de validação são usadas para garantir que os dados inseridos no App Builder sejam válidos antes de serem salvos. Na Aula 7, cobrimos uma validação simples de "campo obrigatório". Agora, vamos explorar um cenário de validação mais complexo, incluindo lógica personalizada e mensagens de erro dinâmicas.
Como outras regras, as regras de validação devem estar anexadas a um evento para serem usadas. A escolha do evento depende do caso de uso:
-
Evento intrínseco: Use isso quando quiser que a validação seja executada automaticamente durante operações padrão (por exemplo, impedir um salvamento se os dados forem inválidos).
-
Evento personalizado: Use isso quando quiser acionar a validação sob demanda a partir de um controle específico (por exemplo, um clique em botão).
Vamos criar uma regra de validação para garantir que um desconto em um pedido nunca seja superior a 10%. Queremos que isso seja executado toda vez que um registro OrderDetail for salvo, então vamos anexá-lo ao evento de salvamento intrínseco.
-
Em App Workbench > Regras, clique em + Regra.
-
No campo Nome, insira
OrderDetail (Validar Desconto). -
No campo Finalidade, selecione Validação.
-
No campo Alvo, selecione OrderDetail.
-
Clique em Criar.
-
Na aba Tabelas, selecione a coluna Desconto (você pode desmarcar OrderDetailID).
-
Na aba Onde, clique em + Cláusula Onde. Um diálogo se abre onde você pode criar cláusulas
WHERE:
-
No campo Expressão da Esquerda, insira
OD.Desconto. -
No campo Operador, selecione
>. -
No campo Expressão da Direita, insira
0.1.
-
-
Clique em Salvar.
A regra agora está criada. Ela foi projetada para encontrar dados "ruins" (registros onde o desconto é superior a 10%).
Anexar a regra de validação
Agora, vamos anexar nossa regra de validação ao evento de salvamento intrínseco para OrderDetail.
-
Em App Workbench > Regras, encontre o objeto de negócios OrderDetail (Fonte) e abra-o.
-
No painel Regra, clique em Eventos. O diálogo Todos os Eventos (OrderDetail (Fonte)) se abre.
-
Encontre o evento de salvamento e clique em Detalhe do Evento da Regra.
-
No painel Validações, clique em Registrar. O diálogo Validação se abre:

-
No campo Tipo, selecione Regra.
-
No campo Regra, selecione OrderDetail (Validar Desconto), a regra de validação que acabamos de criar.
-
No campo Vinculação, selecione Implícita.
Nota
A vinculação implícita valida os dados que estão atualmente "na memória" na tela do usuário. Este é o valor que o usuário digitou, antes de ser salvo no banco de dados. Usamos a vinculação implícita aqui porque queremos impedir que o usuário salve um novo registro enquanto o valor do Desconto é inválido (ou seja, maior que 10%). Por outro lado, a vinculação explícita valida os dados que já estão salvos no banco de dados.
Para ilustrar, imagine que um registro foi salvo com um desconto inválido de 50%. Um usuário abre esse registro, corrige o campo Desconto para um valor válido como 7% e o envia. Se o evento de validação usar vinculação explícita, ele verificará o banco de dados, verá o valor original de 50% e falhará na validação. No entanto, se o evento de validação usar vinculação implícita, ele verificará o valor em memória (7%), verá que não é maior que 10% e passará na validação, permitindo o salvamento.
Leia mais em Vinculação implícita e explícita.
-
No campo Falha, selecione Falhar nos dados retornados.
Nota
As validações do App Builder podem ser configuradas de duas maneiras. O padrão, que estamos usando, é Falhar nos dados retornados. Isso significa que a regra de validação é escrita para encontrar os dados ruins (por exemplo, Desconto é maior que 10%). Se a regra encontrar algum registro que corresponda a esse critério "ruim", ela falha e mostra a mensagem de erro. A alternativa é Falhar sem dados retornados, que é usada quando uma regra é escrita para encontrar dados bons.
-
No campo Mensagem, insira uma mensagem descritiva, mas simples, algo como:
Desconto não pode ser maior que 10%. Este campo não pode ser deixado vazio. -
Clique em Salvar para sair da caixa de diálogo.
A validação está anexada. Para testá-la, vá para a pré-visualização da página Pedidos, selecione um pedido e tente editar um item Detalhe do Pedido para ter um desconto maior que 10%. Quando você clicar para salvar, deverá ver a mensagem de erro que você escreveu.
Hora da prática: Substituição dinâmica em mensagens de validação
Em vez de limitar o desconto que os usuários podem aplicar diretamente por meio de uma regra como fizemos, 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.
-
Em App Workbench > Páginas, navegue até a página Parâmetro, que foi criada na Aula 4.
-
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.
-
Na aba Colunas, adicione uma nova coluna clicando em + Coluna.
-
Dê o nome
DiscountMaximum. -
No campo Lógico, selecione Número.
-
No campo Físico, selecione Decimal.
-
Clique em Salvar.
-
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.
-
Uma vez 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.
-
Agora retorne à página Parâmetro, seja encontrando-a em App Workbench > Páginas ou voltando à tela anterior. Adicione a nova coluna DiscountMaximum à lista de controles no painel Parâmetro.
-
Agora, na pré-visualização da página Parâmetro, use o botão Editar para escolher qualquer desconto máximo que desejar. Por exemplo, insira
.3para permitir descontos de até 30%.
Leitura adicional
Para mais técnicas sobre como garantir a integridade dos dados, veja Dicas de validação.
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 maiores que 10%. Vamos editá-la para usar qualquer valor que inserirmos na página Parâmetro. Siga estas etapas:
-
Vá para App Workbench > Regras e abra a regra OrderDetail (Validação de Desconto).
-
Na aba Tabelas, clique em + Tabelas.
-
Clique em Adicionar para a tabela Parâmetro.
-
Agora que a tabela Parameter também está sendo exibida na aba Tables, selecione a coluna DiscountMaximum.
-
Vá para a aba Where. Precisamos editar a cláusula
WHEREque criamos porque não queremos mais usar um valor fixo aqui. Clique no ícone de lápis para editá-la. -
No campo Right Expression, insira
P.DiscountMaximum. O App Builder levará um momento para salvar. -
Agora, volte à pré-visualização da página Orders. Se você tentar adicionar um novo produto no painel Order Details, verá que agora é permitido conceder 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 fixamos isso quando criamos a regra de validação. 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.
-
Em App Workbench > Rules, navegue até a regra OrderDetail (Source).
-
Esta regra atualmente só puxa dados da tabela OrderDetail, então na aba Tables, clique em + Table e selecione a tabela Parameter. Quando ela aparecer, selecione a coluna DiscountMaximum.
-
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
MaxDiscountnesse campo. Para garantir que o número será exibido corretamente na interface, vá para a aba Columns e defina como Percent. -
Em seguida, navegue de volta para a mensagem de erro que escrevemos anteriormente, indo até 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.
-
Finalmente, no campo Message, substitua o
10%fixo 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.
Aprendizado adicional
Isso conclui esta análise detalhada sobre a camada de negócios do App Builder. Veja o Apêndice A para uma visão mais detalhada da camada de dados, ou o Apêndice C para a camada de UI.