Artigo Clube Delphi 76 - Implentando fórmulas na aplicação

Saiba como agregar valor ao seu sistema através da personalização de cálculos internos.

Esse artigo faz parte da revista Clube Delphi Edição 76. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler esse artigo em PDF.

Componentes

Implementando fórmulas na aplicação

Agregando valor ao seu sistema através da personalização de cálculos internos

Customização é uma das palavras da vez e a cada dia mais o mercado exige que os produtos além de ter qualidade, sejam flexíveis, personalizados e tenham preços competitivos. Agora, como fazer para oferecer um sistema de qualidade, com preço competitivo e que sirva para diversos clientes com regras de negócios diferentes?

A resposta é: parametrização. Uma das maneiras de parametrizar o sistema é possibilitar que os cálculos sejam definidos através de fórmulas criadas pelos próprios clientes. E para demonstrar como utilizar fórmulas dentro de um sistema, neste artigo criaremos uma aplicação simples de compra e venda onde os cálculos do valor total do movimento e do item serão obtidos através do resultado da fórmula parametrizada.

Será usado o Evaluator da biblioteca de componentes JEDI, que é um avaliador de expressões para realizar o cálculo das fórmulas do programa, ou seja, ela decodifica e substitui expressões por seus respectivos valores numéricos.

Além disso, teremos uma tela para cadastro da fórmula digitada herdada de um formulário básico de cadastro, demonstrando assim também como utilizar herança de formulários dentro do Delphi.

Obs.: O objetivo deste artigo é demonstrar como tornar uma aplicação flexível e personalizável, não se atendo a princípios básicos, como criar um banco de dados, fazer conexão com banco, criar formulários na aplicação ou relacionamentos Master/Detail.

A classe TEvaluator

A classe TEvaluator é definida na unit JclExprEval da biblioteca JEDI e é uma classe avaliadora de expressões. Ela, assim como as outras classes de avaliadores de expressão da JCL, é descendente da classe TEasyEvaluator, também definida na mesma unit. A declaração das duas classes está descrita na Listagem 1.

Listagem 1. Declaração das classes TEasyEvaluator e TEvaluator

...

TEasyEvaluator = class(TObject)

 private

   FOwnContext: TExprHashContext;

   FExtContextSet: TExprSetContext;

   FInternalContextSet: TExprSetContext;

 protected

   property InternalContextSet: TExprSetContext

     read FInternalContextSet;

 public

   constructor Create;

   destructor Destroy; override;

   procedure AddVar(const AName: string;

     var AVar: TFloat32); overload;

   procedure AddVar(const AName: string;

     var AVar: TFloat64); overload;

   procedure AddVar(const AName: string;

     var AVar: TFloat80); overload;

   procedure AddConst(const AName: string;

     AConst: TFloat32); overload;

   procedure AddConst(const AName: string;

     AConst: TFloat64); overload;

   procedure AddConst(const AName: string;

     AConst: TFloat80); overload;

   procedure AddFunc(const AName: string;

     AFunc: TFloat32Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TFloat64Func); overload;

   procedure AddFunc(const AName: string;

     AFunc: TFloat80Func); overload;"

[...] continue lendo...
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados