# Usando scripts BeanShell

Um script beanShell representa um programa na linguagem beanShell, que pode ser definido para gerar o valor do mapeamento de um atributo.

Segundo a [documentação do beanShell](http://beanshell.org/manual/bshmanual.html), o beanShell é um interpretador de programas em Java e permite adicionar variáveis no contexto da interpretação.

Todo script beanShell executado no mapeamento do provisionamento contem a variável com o nome '**entry**' que representa uma referência para o **objeto que está sendo provisionado**, no caso uma **conta**, ou um **direito** ou um **membro de direito**.

Essa referência contem os mesmos atributos descritos na tabela da seção [Objetos e atributos disponíveis](https://docs.blazon.im/administrador/sincronismo/provisionamento/mapeamentos/broken-reference) para o mapeamento de atributo.

{% hint style="info" %}

#### Nota

Além da variável **entry**, o script tem disponível a referência para vários serviços da API do Blazon, como:  **userServiceAPI, accountServiceAPI, entitlementServiceAPI, roleServiceAPI, resourceServiceAPI, passwordPolicyServiceAPI, organizationUnitServiceAPI, membershipEntitlementServiceAPI, membershipRoleServiceAPI**.
{% endhint %}

O script pode ter várias linhas e o valor final da execução do script será o valor dado como retorno, através do comando '**return**', ou o valor da ultima atribuição.

A tabela abaixo ilustra alguns exemplos de scripts beanShell:

| Descrição do valor do mapeamento de atributo                                                                             | Script sugerido                                                                                                                                                                               |
| ------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Atributo padrão 'firstName' do usuário da conta, no provisionamento de conta.                                            | `return entry.user.firstName;`                                                                                                                                                                |
| Atributo padrão 'lastName' do usuário da conta, em letras maiúsculas (caso exista), no provisionamento de conta          | <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> |
| Atributo padrão 'accountIdentifier' da conta, no provisionamento de membro de direito.                                   | `return entry.account.accountIdentifier;`                                                                                                                                                     |
| Atributo padrão 'accountIdentifier' da conta, no provisionamento de membro de direito, e concatenado com o termo "\_ID". | <p><code>accId = entry.account.accountIdentifier;</code><br><code>return accId + "\_ID";</code></p>                                                                                           |
| Atributo adicional 'occupationCode' do usuário da conta, no provisionamento de conta.                                    | `return entry.user.get('occupationCode');`                                                                                                                                                    |
| Atributo padrão 'name' do direito, no provisionamento de membro de direito.                                              | `return entry.entitlement.name;`                                                                                                                                                              |
| Atributo padrão 'name' do departamento do usuário da conta, no provisionamento de conta.                                 | `return entry.user.department.name;`                                                                                                                                                          |
