Como habilitar ou desabilitar o campo de uma tabela mediante uma condição (script)

AMANDA DE ANDRD
Giga Contributor

Mais uma dúvida, 

Tenho uma tabela, que possui os campos" data limite",  "data atendimento" e "justificativa". 

Eu criei o script em anexo para configurar a "data de atendimento" através de uma Regrea de Negócio (está funcionando normalmente). 

Agora eu preciso complementar o código, para que traga o seguinte resultado:

Se a "data de atendimento" estiver menor que a "data limite", o campo "justificativa" não precisa ser ativado. 

Mas se a "data do atendimento" for maior que a "data limite"  o campo "justificativa precisa ser preenchido" de forma mandatória. 

Mais uma vez agradeço

1 ACCEPTED SOLUTION

Vivi Brasil
Kilo Sage

Olá Amanda,

A regra de negócio (Business Rule) executa do lado do server e pode atender o propósito que você utilizou, de abortar uma transação e exibir uma mensagem ao usuário, mas ela não definirá o campo como obrigatório no formulário. Para definir regras de obrigatoriedade e edição de campos no formulário, há algumas formas:

  • Data Policies: executadas no server-side e forçam regras de obrigatoriedade por ex. de maneira mais abrangente, é mais seguro pois cobre todo o sistema, mas é preciso considerar o uso com cautela e realizar testes, pois outras origens ou regras podem ser impactadas (dependendo de como uma Data Policy estiver definida, ela pode impedir por exemplo uma Integração de atualizar algo no registro)

  • UI Policies: executadas no client-side (navegador), e não requerem necessariamente um script, através dos operadores disponíveis lhe permitem comparar condições entre os campos, em campos de data há opções como: "is more than", "is less than", "is relative"... dentre outras. Permite aplicar regras (UI Policy Actions) para tornar campos obrigatórios, visíveis e/ou editáveis.
    PS: a UI Policy é executada no formulário (e não na aba Lista), portanto, é preciso tomar cuidado se os usuários tiverem permissão para atualizar os campos na aba Lista (se eles podem editar as células dos registros na Lista)
  • Client Scripts: executados no client-side (navegador) e também lhe permitem tornar campos obrigatórios, visíveis e/ou editáveis, mas por ser um script lhe dá flexibilidade para utilizar outros métodos também e fazer condições mais complexas. Algo que também o diferencia da UI Policy, é a possibilidade de criar um Client Script com o type "onCellEdit", que aplica-se à aba Lista, ou seja, permite tornar o campo obrigatório também na Lista

Vale ressaltar que quando uma regra é executada somente no client-side, um usuário que possua conhecimento em web pode forçar um bypass através do navegador dele.

Dependendo da situação, para restringir o acesso de edição aos campos no formulário e na aba lista, cabe o uso de ACLs (Access Control List), que também é um meio seguro como a Data Policy (também roda no server side), mas creio que não é bem este o propósito aqui, por isso não mencionarei a ACL.

Aqui há alguns comparativos entre Client Script x UI Policy, que podem ajuda-la a definir o que mais se adequa ao seu cenário (não há um caminho certo ou errado, depende muito do cenário):

Obrigada,
Viviane Brasil

View solution in original post

4 REPLIES 4

Vivi Brasil
Kilo Sage

Olá Amanda,

A regra de negócio (Business Rule) executa do lado do server e pode atender o propósito que você utilizou, de abortar uma transação e exibir uma mensagem ao usuário, mas ela não definirá o campo como obrigatório no formulário. Para definir regras de obrigatoriedade e edição de campos no formulário, há algumas formas:

  • Data Policies: executadas no server-side e forçam regras de obrigatoriedade por ex. de maneira mais abrangente, é mais seguro pois cobre todo o sistema, mas é preciso considerar o uso com cautela e realizar testes, pois outras origens ou regras podem ser impactadas (dependendo de como uma Data Policy estiver definida, ela pode impedir por exemplo uma Integração de atualizar algo no registro)

  • UI Policies: executadas no client-side (navegador), e não requerem necessariamente um script, através dos operadores disponíveis lhe permitem comparar condições entre os campos, em campos de data há opções como: "is more than", "is less than", "is relative"... dentre outras. Permite aplicar regras (UI Policy Actions) para tornar campos obrigatórios, visíveis e/ou editáveis.
    PS: a UI Policy é executada no formulário (e não na aba Lista), portanto, é preciso tomar cuidado se os usuários tiverem permissão para atualizar os campos na aba Lista (se eles podem editar as células dos registros na Lista)
  • Client Scripts: executados no client-side (navegador) e também lhe permitem tornar campos obrigatórios, visíveis e/ou editáveis, mas por ser um script lhe dá flexibilidade para utilizar outros métodos também e fazer condições mais complexas. Algo que também o diferencia da UI Policy, é a possibilidade de criar um Client Script com o type "onCellEdit", que aplica-se à aba Lista, ou seja, permite tornar o campo obrigatório também na Lista

Vale ressaltar que quando uma regra é executada somente no client-side, um usuário que possua conhecimento em web pode forçar um bypass através do navegador dele.

Dependendo da situação, para restringir o acesso de edição aos campos no formulário e na aba lista, cabe o uso de ACLs (Access Control List), que também é um meio seguro como a Data Policy (também roda no server side), mas creio que não é bem este o propósito aqui, por isso não mencionarei a ACL.

Aqui há alguns comparativos entre Client Script x UI Policy, que podem ajuda-la a definir o que mais se adequa ao seu cenário (não há um caminho certo ou errado, depende muito do cenário):

Obrigada,
Viviane Brasil

Muito obrigada, 

Deu certinho. 

 

Sds

Que bom que deu certo Amanda! Eu quem agradeço pelo seu retorno. 😃

gabrielterra
Giga Contributor

Oi Amanda, uma dica "low-code" seria passar os dados do client para o server é usar uma BR do tipo Display, onde tu nem precisará usar scripts, pois a BR já possui o campo condition para fazer a primeira etapa da sua regra.

Depois, basta usar a variável g_scratchpad (link abaixo) para passar o resultado para ser utilizado em sua ui policy/client script.

ScriptingWithDisplayBusinessRules