# ApplicationProxy - Substituindo informações em tempo de execução

**URL:** <https://community.latromi.com.br/t/applicationproxy-substituindo-informacoes-em-tempo-de-execucao/670>\
**Category:** Documentação\
**Tags:** latromi-web, infra\
**Created:** [Agosto 17, 2021, 5:14pm UTC](https://community.latromi.com.br/t/applicationproxy-substituindo-informacoes-em-tempo-de-execucao/670 "2021-08-17T17:14:04Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![daniel.giacomelli](https://community.latromi.com.br/user_avatar/community.latromi.com.br/daniel.giacomelli/32/1476_2.png) [@daniel.giacomelli](https://community.latromi.com.br/u/daniel.giacomelli)\
**Post date:** [Agosto 17, 2021, 5:14pm UTC](https://community.latromi.com.br/t/applicationproxy-substituindo-informacoes-em-tempo-de-execucao/670/1 "2021-08-17T17:14:04Z")

</div>

Eu alguns casos, pode ser necessário alterar alguma informação da conexão de banco de dados em tempo de execução. O exemplo mais comum seria usar o nome do usuário do sistema para fazer a autenticação no banco de dados.

Neste tópico vamos aprender a fazer isso, utilizando o arquivo de configuração `ApplicationProxy.xml`.

## Visão Geral

O _ApplicationProxy_ tem como objetivo permitir que algumas informações do sistema possam ser alteradas em tempo de execução, antes de serem utilizadas. Todas as requisição do site passam pelo processamento deste arquivo.

 ![image](https://community.latromi.com.br/uploads/default/original/1X/c68b88872b9ff273c197d07fc47f9fbe3dc9e508.png "Fluxo de requisições do site")

## O Arquivo

O arquivo `ApplicationProxy.xml` fica no servidor, na pasta raiz do site, e tem a seguinte estrutura:

```xml
<?xml version="1.0" encoding="utf-8"?>
<ApplicationProxy enabled="false" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Connections>
    <Connection id="0" users="*">
      <!--<NameFilter ignoreCase="true">Regular Expression</NameFilter>-->
      
      <Properties>
        <!-- Sobrescreve propriedades da Connection String (com suporte a uso de Variáveis Global) -->
        <Property name="Property Name">Value</Property>
      </Properties>
     
    </Connection>
  </Connections>
  <SessionMarks users="*">
    <UserCode>{?GVAR LATROMI.codigousuario}</UserCode>
    <UserName></UserName>
  </SessionMarks>
</ApplicationProxy>

```

## Configuração

### Habilitando e desabilitando

Use o atributo `enabled` do elemento raiz para habilitar ou desabilitar o processamento do ApplicationProxy.

- Valores permitidos: **true** ou **false**.
- Valor padrão: **false**.

### Modificando uma Conexão de Banco de Dados

Uma conexão de banco de dados pode ser modificada usando o elemento `Connection`, que pode se repetir várias vezes dentro do elemento `Connections`.

Caminho completo:

> ApplicationProxy → Connections → Connection

#### Filtros

A primeira coisa a se fazer para modificar uma conexão é determinar quando ela deve ser modificada. Para isso podemos usar os seguintes filtros:

- **Nomes de Usuários**  
Nome dos usuários que devem ter a conexão modificada. Usuários que não estejam nessa lista vão ignorar o ApplicationProxy. Informe `*` (asterisco) para selecionar todos os usuários ou informe uma lista com o nome dos usuários (login) separados por `,` (vírgula).

- **Nome da Conexão**  
Expressão regular para casar com o nome da conexão. Informe a expressão regular no elemento `NameFilter` e informe **true** ou **false** no atributo `ignoreCase` para especificar se as diferenças entre letras maiúsculas e minúsculas devem ser ignoradas.

- **Id da Conexão**  
Informe o ID da Conexão, gravado internamente na tabela de conexões do sistema. Este filtro é menos recomendado pois exige que o ID seja consultado no banco de dados, pois ele não é exibido no sistema. Informe 0 (zero) para ignorar este filtro.

#### Modificando Propriedades

As propriedades da conexão são modificadas usando o elemento `Property`, que pode se repetir várias vezes dentro do elemento `Properties`

Caminho completo:

> ApplicationProxy → Connections → Connection → Properties → Property

Para preencher uma propriedade, informe o nome dela no atributo `name` e o valor no interior do elemento. Por exemplo:

```xml
<Property name="Nome da propriedade">Valor</Property>

```

Os valore utilizados podem ser fixos, Parâmetros de Sessão ou Variáveis Globais.  
Abaixo um exemplo de como substituir o nome do usuário da conexão pelo nome do usuário do sistema:

```xml
<Property name="Username">SESSION.LoginUsuario</Property>

```

A seguir, a lista de propriedades que podem ser alteradas

| Nome | Descrição |
| --- | --- |
| Host | Servidor do banco de dados |
| Port | Porta do servidor de banco de dados |
| Database | Nome do banco de dados |
| Username | Usuário de autenticação |
| Password | Senha do usuário |

### Modificando os Parâmetros de Sessão

Assim como os dados de conexão, também é possível modificar os parâmetros de sessão do usuário. Isso afeta o uso dos parâmetro do grupo “SESSION” no sistema.

Use o elemento `SessionMarks` para modificar os parâmetro de sessão.

Caminho completo:

> ApplicationProxy → SessionMarks

#### Filtros

A primeira coisa a se fazer para modificar uma parâmetro de sessão é determinar para quais usuários ele deve ser modificado. Para isso, usamos o filtro a seguir:

- **Nomes de Usuários**  
Nome dos usuários que serão afetados. Usuários que não estejam nessa lista vão ignorar o ApplicationProxy. Informe `*` (asterisco) para selecionar todos os usuários ou informe uma lista com o nome dos usuários (login) separados por `,` (vírgula).

#### Modificando Propriedades

A modificação dos parâmetros de sessão está restrita a apenas dois campos:

- **Código do Usuário**  
Código externo do usuário, referente ao parâmetro `SESSION.CodigoUsuario`. Esta informação pode ser modificando especificando um valor no elemento `UserCode`.

- **Nome de Usuário**  
Nome do usuário, referente ao parâmetro `SESSION.LoginUsuario`. Esta informação pode ser modificando especificando um valor no elemento `UserName`.

Abaixo um exemplo modificando o código e o nome do usuário de “admin” para “ROOT”:

```xml
<SessionMarks users="admin">
   <UserCode>1</UserCode>
   <UserName>ROOT</UserName>
</SessionMarks>

```

Se não quiser modicar nenhum parâmetro de sessão basta comentar deixando o código entre `<!--` e `-->` ou simplesmente remover do XML.

Ao informar os valor dos elementos, lembre-se que caracteres especiais de um Xml, como por exemplo abertura e fechamento de tag, precisam ser "escapados" antes de serem informados.
