---
sourceDocument: Segurança da plataforma Yokohama
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/pt-BR/yokohama/platform-security

 Release :

    - yokohama

ft:locale :

    - pt-BR

ft:publication_title :

    - Segurança da plataforma Yokohama

ft:clusterId :

    - psec

bundleId :

    - psec

workflow :

    - Platform


---

# Como lidar com campos não mapeados

# Como lidar com campos não mapeados {#ariaid-title1}

* Versão de lançamento: Yokohama
* 
* Atualizado 30 de jan. de 2025
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 3 min. de leitura

Você pode lidar com campos não mapeados na personalização do SCIM de maneiras diferentes.

Durante a personalização do SCIM, os campos que não fazem parte das tabelas sys_user e sys_user_group podem ser mapeados executando as funções a seguir.

## Personalizar SCIM (criar ou atualizar) {#handling-umapped-fields__section_j5j_y3k_jtb}

Você pode criar ou atualizar o Cliente de SCIM.

* O administrador do SCIM pode adicionar scripts personalizados nos scripts onBefore e onAfter para campos que não estão mapeados na definição de ETL ou no RTE.
* O administrador do SCIM pode substituir mapeamentos de RTE adicionando scripts personalizados nos scripts onBefore e onAfter.
* Você pode invocar uma API passível de script nos scripts de RTE onBefore ou onAfter para acessar a solicitação de entrada e executar transformações em outras tabelas, listas e atributos não mapeados.
* Você pode usar o método sn_auth.SCIM2Util.getScimProviderCustomizationContext() para fornecer o contexto de solicitação SCIM que contém o objeto scimResource. O scimResource no contexto representa o seguinte em cada operação:
  * POST: o recurso do SCIM enviado na carga da solicitação.
  * PUT: o recurso do SCIM atual do banco de dados substituído pelo recurso do SCIM enviado na carga da solicitação.
  * PATCH: o recurso do SCIM atual do banco de dados depois de executar as operações de patch.
  {#handling-umapped-fields__ul_ylz_ksd_mtb}

{#handling-umapped-fields__ul_dtj_rfp_gtb}  
A seguir está um exemplo de um script onAfter.

    (function onAfter(source, target, importLog) {

        var ctx = sn_auth.SCIM2Util.getScimProviderCustomizationContext();
        gs.info("scim context ee: " + JSON.stringify(ctx.scimResource));

        var roles = ctx.scimResource.roles;
        if(roles) {
            var removingRolesGR = new GlideRecord("sys_user_has_role");
            removingRolesGR.addQuery("user", target.sys_user[0].sys_id);
            removingRolesGR.query();
            removingRolesGR.deleteMultiple();

        for (var i = 0; i < roles.length; i++) {
            var addingRolesGR = new GlideRecord("sys_user_has_role");
            addingRolesGR.setValue("user", target.sys_user[0].sys_id);
            addingRolesGR.setValue("role", roles[i].value);
            addingRolesGR.setValue("state", "active");
            addingRolesGR.insert();
            }
            }
            var customUserExtn = new global.SCIMProviderCustomization().getCustomExtensionUrn('User');
            var salary = ctx.scimResource[customUserExtn].salary;
            if (salary) {
                var gr = new GlideRecord("u_user_salary");
                gr.addQuery("user", target.sys_user[0].sys_id);
                gr.query();
                if (gr.next()) {
                    gr.setValue("salary", salary);
                    gs.info("scim update: " + gr.update());
                } else {
                gr.setValue("salary", salary);
                gr.setValue("user", target.sys_user[0].sys_id);
                gr.insert();
                }
               }

    })(source, target, importLog);

## Personalizar a resposta do SCIM {#handling-umapped-fields__section_p1f_nhp_gtb}

Para as chamadas de API GET, qualquer resposta de retorno para o cliente de SCIM pode ser personalizada usando o script, estendendo o script SCIMProviderCustomization.

Ao estender o script, o autor pode substituir os métodos customizeUserResponse e customizeGroupResponse para modificar as respostas dos recursos de Usuário e Grupo.

A propriedade com.snc.integration.scim2.provider.customization.script.id permite que o plug-in SCIM use o script que deve ser usado para personalização de resposta.  
Veja a seguir um exemplo de extensão do script base.

    var SCIMCustomizationScript = Class.create();
    SCIMCustomizationScript.prototype = Object.extendsObject(SCIMProviderCustomization, {
        initialize: function() {
            SCIMProviderCustomization.prototype.initialize.call(this);
        },
        customizeUserResponse: function(context) {
            try {
                var rolesGR = new GlideRecord("sys_user_has_role");
                rolesGR.addQuery("user", context.scimResource.id);
                rolesGR.query();
                var i = 0;
                context.scimResource.roles = [];
                while (rolesGR.next()) {
                    context.scimResource.roles[i] = {
                        display: rolesGR.getElement('role.name').getValue(),
                        value: rolesGR.getElement('role.sys_id').getValue()
                    };
                    i++;
                }
                var userGR = new GlideRecord("u_user_salary");
                userGR.addQuery("user", context.scimResource.id);
                userGR.query();
                if (userGR.next()) {
                    var salary = userGR.getValue("salary");
                    if (salary) {
                        var customExtensionValue = SCIMProviderCustomization.prototype.getCustomExtensionNodeValue.call(this, "User", context);
                        customExtensionValue.salary = salary;
                        SCIMProviderCustomization.prototype.setCustomExtensionNodeValue.call(this, "User", context, customExtensionValue);
                    }
                }
            } catch (ex) {
                gs.error("err: " + ex);
            }
            return context;
        },
        customizeGroupResponse: function(context) {
            return context;
        },
        type: 'SCIMCustomizationScript'
    });

Nota:  
* O parâmetro que os métodos customizeUserResponse e customizeGroupResponse contêm é um objeto de contexto com um atributo chamado scimResource. Este atributo tem todos os atributos de um objeto de recurso de usuário ou grupo.
* Uma inclusão de script personalizada só pode ser criada e exibida pelo administrador.
* Se um recurso de usuário ou grupo for modificado, você deverá retornar o contexto.
* Se não houver modificação de qualquer atributo no objeto de recurso, defina com.snc.integration.scim2.provider.customization.script.id como vazio ou retorne como nulo.
* Se determinados atributos forem persistentes por meio do script onAfter, eles deverão ser preenchidos com valores de banco de dados no objeto scimResource dentro do script personalizado. Esta ação é necessária para que o sistema possa fazer o seguinte:
  * Para obter o objeto scimResource correto em scripts onAfter durante a operação PUT e PATCH.
  * Para incluir os atributos que persistiram por meio do script onAfter na resposta de retorno para o cliente.
  {#handling-umapped-fields__ul_dcw_ph5_mtb}
{#handling-umapped-fields__ul_flt_zhp_gtb}

## Funções de ajuda {#handling-umapped-fields__section_ss3_s3p_gtb}

A seguir estão algumas das funções de ajuda para personalização do SCIM. Essas funções permitem que você obtenha ou defina diferentes tipos de informações.
{#handling-umapped-fields__table_stg_qck_mtb__entry__2}

| Função | Finalidade |
|-|-|
| SCIMProviderCustomization.prototype.getCustomExtensionUrn.call(this, "User"); | Obter o valor do esquema de extensão personalizado. |
| SCIMProviderCustomization.prototype.getServiceNowExtensionUrn.call(this, "User"); | Obter o valor do esquema da extensão da ServiceNow. |
| SCIMProviderCustomization.prototype.getCustomExtensionNodeValue.call(this, "User", context); | Obter o nó do esquema personalizado da resposta. |
| SCIMProviderCustomization.prototype.getServiceNowExtensionNodeValue.call(this, "User", context); | Obter o nó do esquema personalizado da ServiceNow da resposta. |
| SCIMProviderCustomization.prototype.setCustomExtensionNodeValue.call(this, "User", context, customExtensionValue); | Definir o nó do esquema personalizado na resposta. |
[Tabela 1. Funções de ajuda]

{#handling-umapped-fields__table_stg_qck_mtb}  
A seguir está um exemplo de uso da função de ajuda:

    var customExtensionUrn = 
    SCIMProviderCustomization.prototype.getCustomExtensionUrn.call(this, "User"); 
    var customExtensionValue = 
    SCIMProviderCustomization.prototype.getCustomExtensionNodeValue.call(this, "User", context); 
    customExtensionValue.age = "18";
    SCIMProviderCustomization.prototype.setCustomExtensionNodeValue call(this, "User", context, customExtensionValue); 

Nota:  
O RTE oferece suporte à configuração de dados em tabelas diferentes das tabelas sys_user e sys_user_group.

