> For the complete documentation index, see [llms.txt](https://docs.blazon.im/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.blazon.im/administrador/sincronismo/provisionamento/mapeamentos/usando-scripts-beanshell.md).

# Usando scripts BeanShell

Um script [BeanShell](https://beanshell.org/docs.html) é um programa na linguagem BeanShell, que pode ser usado para gerar o valor do mapeamento de um campo.

O uso de um script BeanShell representa a forma mais flexível e abrangente de geração de valores dinamicamente nos mapeamentos de provisionamento.

### Estrutura de um script BeanShell

O script pode ter várias linhas seguindo a sintaxe BeanShell, estilo Java, e o valor final da execução do script será o valor dado como retorno, através do comando '**return**'.

{% hint style="info" %}

#### Exemplo de script que busca o usuário com identificador 10L e retorna o seu nome de usuário

`User usuario = userServiceAPI.get(10L);`\
`return usuario.username;`
{% endhint %}

Quando o script é executado um contexto com, [objetos disponíveis](#objetos-disponiveis-no-contexto-do-script) e [serviços disponiveis](#servicos-disponiveis-no-contexto-do-script), é injetado para serem usados.

### Objetos disponíveis no contexto do script

Para cada um dos [eventos de provisionamento](/administrador/sincronismo/provisionamento.md#eventos-de-provisionamento) tem-se um **contexto**, com uma variável com o nome *entry*, com campos disponíveis para realizar o mapeamento.

Pode-se ver nas tabelas abaixo a relação do **evento de provisionamento** com os objetos disponíveis na variável *entry* para serem usados nos scripts BeanShell, no mapeamento de atributos:

### Criação de nova conta

<table><thead><tr><th width="130">Variável</th><th width="218">Objeto</th><th>Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/CeegNj8q17YtWZkEDjqD">AccountWrapper</a></td><td><code>return entry.account.accountIdentifier;</code></td></tr></tbody></table>

### Atualização de conta

<table><thead><tr><th width="130">Variável</th><th width="218">Objeto</th><th>Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/CeegNj8q17YtWZkEDjqD">AccountWrapper</a></td><td><code>return entry.account.accountIdentifier;</code></td></tr></tbody></table>

### Inativação de conta

<table><thead><tr><th width="130">Variável</th><th width="218">Objeto</th><th>Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/CeegNj8q17YtWZkEDjqD">AccountWrapper</a></td><td><code>return entry.account.accountIdentifier;</code></td></tr></tbody></table>

### Ativação de conta

<table><thead><tr><th width="130">Variável</th><th width="218">Objeto</th><th>Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/CeegNj8q17YtWZkEDjqD">AccountWrapper</a></td><td><code>return entry.account.accountIdentifier;</code></td></tr></tbody></table>

### Revogação de conta

<table><thead><tr><th width="130">Variável</th><th width="218">Objeto</th><th>Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/CeegNj8q17YtWZkEDjqD">AccountWrapper</a></td><td><code>return entry.account.accountIdentifier;</code></td></tr></tbody></table>

### Troca de senha

<table><thead><tr><th width="130">Variável</th><th width="218">Objeto</th><th>Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/CeegNj8q17YtWZkEDjqD">AccountWrapper</a></td><td><code>return entry.account.accountIdentifier;</code></td></tr></tbody></table>

### Concessão de direito

O evento de provisionamento de concessão de direito tem dois mapeamentos, um para o direito e outro para a conta. Isso ocorre porque um membro de direito é uma relação entre um direito e uma conta.

#### Mapeamento do direito

<table><thead><tr><th width="135">Variável</th><th width="213">Objeto</th><th width="399">Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/zZ0WBP76x8PTsnb4l0xy">EntitlementWrapper</a></td><td><code>return entry.entitlement.name;</code></td></tr></tbody></table>

#### Mapeamento da conta

<table><thead><tr><th width="130">Variável</th><th width="218">Objeto</th><th>Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/CeegNj8q17YtWZkEDjqD">AccountWrapper</a></td><td><code>return entry.account.accountIdentifier;</code></td></tr></tbody></table>

### Revogação de direito

O evento de provisionamento de revogação de direito também tem dois mapeamentos, um para o direito e outro para a conta. Isso ocorre porque um membro de direito é uma relação entre um direito e uma conta.

#### Mapeamento do direito

<table><thead><tr><th width="135">Variável</th><th width="213">Objeto</th><th width="399">Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/zZ0WBP76x8PTsnb4l0xy">EntitlementWrapper</a></td><td><code>return entry.entitlement.name;</code></td></tr></tbody></table>

#### Mapeamento da conta

<table><thead><tr><th width="130">Variável</th><th width="218">Objeto</th><th>Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/CeegNj8q17YtWZkEDjqD">AccountWrapper</a></td><td><code>return entry.account.accountIdentifier;</code></td></tr></tbody></table>

### Criação de direito

<table><thead><tr><th width="135">Variável</th><th width="213">Objeto</th><th width="399">Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/zZ0WBP76x8PTsnb4l0xy">EntitlementWrapper</a></td><td><code>return entry.entitlement.name;</code></td></tr></tbody></table>

### Atualização de direito

<table><thead><tr><th width="135">Variável</th><th width="213">Objeto</th><th width="399">Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/zZ0WBP76x8PTsnb4l0xy">EntitlementWrapper</a></td><td><code>return entry.entitlement.name;</code></td></tr></tbody></table>

### Remoção de direito

<table><thead><tr><th width="135">Variável</th><th width="213">Objeto</th><th width="399">Exemplo</th></tr></thead><tbody><tr><td>entry</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/zZ0WBP76x8PTsnb4l0xy">EntitlementWrapper</a></td><td><code>return entry.entitlement.name;</code></td></tr></tbody></table>

### Serviços disponíveis no contexto do script

Além da variável *entry*, no contexto de execução do script tem disponível a referência para vários serviços da API do Blazon, como destacados na tabela abaixo: &#x20;

<table><thead><tr><th width="206">Variável</th><th width="201">Serviço</th><th>Exemplo</th></tr></thead><tbody><tr><td>userServiceAPI</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/2oP4aPnCqc28N8svhDrP">Serviço de usuários</a></td><td><code>User usuario = userServiceAPI.get(10L);</code><br><code>return usuario.username;</code></td></tr><tr><td>accountServiceAPI</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/kmOzL0587HI0lvfk5vI7">Serviço de contas</a></td><td><code>Account conta = accountServiceAPI.get(20L);</code><br><code>return conta.accountIdentifier;</code></td></tr><tr><td>entitlementServiceAPI</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/DnLn0aSs9R9591Wqa12b">Serviço de direitos</a></td><td><code>Entitlement dir = entitlementServiceAPI.get(30L);</code><br><code>return dir.getName();</code></td></tr><tr><td>roleServiceAPI</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/rIZimDRITIDYBIIympjP">Serviço de papéis</a></td><td><code>Role papel = roleServiceAPI.get(40L);</code><br><code>return papel.name;</code></td></tr><tr><td>resourceServiceAPI</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/3VEP9TT8xTcEOSt22W44">Serviço de recursos</a></td><td><code>List&#x3C;User> owners = resourceServiceAPI.getOwners(25L);</code><br><code>return owners.get(0).getLastName();</code></td></tr><tr><td>organizationUnitServiceAPI</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/2Tb45GSt1WYjWxhqJGRk">Serviços de organizações</a></td><td><code>OrganizationUnit org = organizationUnitServiceAPI.get(12L);</code><br><code>return org.getType();</code></td></tr><tr><td>membershipEntitlementServiceAPI</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/PNzH3w2x7peh8X2QBWPL">Serviço de membros de direitos</a></td><td><code>MembershipEntitlement me = membershipEntitlementServiceAPI.get(22L);</code><br><code>return me.accountId;</code></td></tr><tr><td>membershipRoleServiceAPI</td><td><a href="/spaces/VoeYc99LmcxeqQ9av3Ly/pages/a5FM16Gq9qnuPN9SQ4ud">Serviço de membros de papéis</a></td><td><code>MembershipRole mr = membershipRoleServiceAPI.get(10L);</code><br><code>return mr.roleId;</code></td></tr></tbody></table>

### Exemplos de scripts de mapeamento

A tabela abaixo ilustra alguns exemplos de scripts beanShell:

| Script                                                                                                                                                                                        | Resultado                                                                                      |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `return entry.user.firstName;`                                                                                                                                                                | Retorna o valor do campo *firstName* do usuário.                                               |
| <p><code>lastName = entry.user.lastName;</code><br><code>if(lastName == null) {</code><br>       <code>return "";</code><br><code>}</code><br><code>return lastName.toUpperCase();</code></p> | Retorna o valor do campo last*Name* do usuário, caso exista. Se não, retorna uma string vazia. |
| `return entry.account.accountIdentifier;`                                                                                                                                                     | Retorna o valor do campo *accounIdentifier* da conta.                                          |
| <p><code>accId = entry.account.accountIdentifier;</code><br><code>return accId + "\_ID";</code></p>                                                                                           | Retorna o valor do campo *accounIdentifier* dda conta, concatenado com o termo "\_ID".         |
| `return entry.user.get('occupationCode');`                                                                                                                                                    | Retorna o valor do campo adicional *occupationCode* do usuário.                                |
| `return entry.entitlement.name;`                                                                                                                                                              | Retorna o valor do campo *name* do direito.                                                    |
| `return entry.user.department.name;`                                                                                                                                                          | Retorna o valor do campo *name* do departamento do usuário.                                    |
| <p><code>User user = userServiceAPI.get(10L);</code><br><code>return user.username;</code></p>                                                                                                | Retorna o valor do campo *username* do usuário de identificador 10L (long).                    |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.blazon.im/administrador/sincronismo/provisionamento/mapeamentos/usando-scripts-beanshell.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
