Software Development Kit
to the Delphi-Win32 and Free Pascal compilers
Home > Wiki > br/Arquivo de configuracao

br/Arquivo de configuracao

english (en) | português (br)

Um aplicativo PressObjects (POA, do inglês, PressObjects Application) pode ter um um arquivo de configuração que lhe fornece informações e configurações para seus serviços em tempo de execução. Este arquivo pode configurar as propriedades published dos serviços. Como um exemplo, para brokers de persistência, ele pode fornecer configurações como o caminho do banco de dados, nome de usuário e senha.

Contents

Nome do arquivo

O nome de arquivo padrão é derivado do nome da aplicação Press, mudando apenas sua extensão para o valor da constante SPressConfigFileExt.

Para usar um nome de arquivo diferente, mude o valor da propriedade PressApp.ConfigFileName na seção initialization de qualquer unit.

Local do arquivo

A aplicação Press verifica a existência do arquivo de configuração na mesma pasta do executável.

Momento de leitura do arquivo

O arquivo de configuração é carregado durante a inicialização do aplicativo Press, logo antes do aplicativo começar sua execução, mas após a seção initialization de todas as units.

Inicialização das configurações do serviço

As propriedades de configuração do serviço são atualizadas com os valores do arquivo de configuração, quando uma instância do serviço é requisitada pela primeira vez.

Formato do arquivo

O formato do arquivo de configuração é similar a um arquivo 'INI'. É dividido em seções, iniciadas por um cabeçalho circundado por colchetes []. Um cabeçalho é composto pelo nome do serviço e, opcionalmente, um sub-nome separado por ponto (.). Cada seção pode conter items, sendo cada item correspondente a uma propriedade published do serviço. Comentários podem ser incluídos e deve ser precedidos de '#' ou '//'. Qualquer entrada, após estes símbolos, numa linha é ignorada.

Um exemplo para o aplicativo demo Phonebook.exe, a seguir:

no arquivo "PhoneBook.cf"

[OPFBroker]
// Informa ao serviço OPFBroker para usar o broker IBX
DefaultServiceName := 'IBX';
#DefaultServiceName := 'SQLdb';

[OPFBroker.SQLdb]
// Estas configurações não são utilizadas
Connector.Database.ConnectorType := 'firebird';
Connector.Database.DatabaseName := 'localhost:G:\Database\IBX\PO\Phonebook.fb';
Connector.Database.UserName := 'sysdba';
Connector.Database.Password := 'masterkey';

[OPFBroker.IBX]
// Inclua as configurações necessárias ao broker IBX
Connector.Database.DatabaseName := 'localhost:G:\Database\IBX\PO\Phonebook.gdb';
Connector.UserName := 'sysdba';
Connector.Password := 'masterkey';

Funções definidas pelo usuário

O usuário pode criar funções reconhecidas pelo parser do arquivo de configuração. Por exemplo, para descriptografar uma senha.

Declaração

interface

uses
  PressConfig;

type
  TDecryptFnc = class(TPressConfigFunction)
  protected
    function GetValue: string; override;
  end;

implementation

function TDecryptFnc.GetValue: string;
begin
  // Params.Count tem o número de parâmetros
  // Params[n] tem o parâmetro n (iniciado em zero) como string
  // Preencha o valor da variável Result com o resultado da função  
end;

initialization
  TDecryptFnc.RegisterFunction('Decrypt');

Crie uma classe descendente de TPressConfigFunction (está na unit PressConfig), sobreponha (override) a função GetValue e registre a classe usando o método de classe RegisterFunction, então passe o nome da função como parâmetro para este método.

Usando sua função

dentro do arquivo de configuração

Connector.Password := Decrypt(twofish, 'aabb');

Implementação

O arquivo de configuração não faz parse dos argumentos. Então Params[0] tem a string 'twofish' e Params[1] tem a string 'aabb' entre aspas simples. A função PressUnquotedStr (na unit PressUtils) remove as aspas de valores string.

O resultado também é string. Se a propriedade esperar um inteiro ou enumeração, traduza-a para uma representação em string:

  • para um valor inteiro ou ponto flutuante, use IntToStr ou FloatToStr
  • para um valor de enumeração, use GetEnumName (na unit TypInfo)