---
sourceDocument: Referência de API do Xanadu
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/pt-BR/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - pt-BR

ft:publication_title :

    - Referência de API do Xanadu

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# ScopedCacheManager - com escopo

# ScopedCacheManager - com escopo {#ariaid-title1}

* Versão de lançamento: Xanadu
* 
* Atualizado 1 de ago. de 2024
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 7 min. de leitura

A API ScopedCacheManager fornece métodos para recuperar, definir e liberar dados de cache para aplicações com escopo.

Esta API requer o plug-in Scoped Cache (com.glide.scopedcache) e é executada no namespace `sn_scoped_cache`. O plug-in está instalado e ativado por padrão.

Esses métodos exigem que um ou mais caches com escopo e pares de cache com escopo sejam definidos. Para obter mais informações sobre como criar caches com escopo, consulte o [Guia do desenvolvedor da API ScopedCacheManager](https://servicenow-prod.fluidtopics.net/lfTobFL45VBM1WkKegdpwQ#scoped-caches "Os caches com escopo permitem que os clientes armazenem dados personalizados na memória para acesso mais rápido e definam quando eles serão invalidados. Isso pode ser útil quando o trabalho com dados leva mais tempo para obterisso do zero, como os resultados de uma consulta em várias tabelas. Use a API ScopedCacheManager para recuperar, definir e liberar dados de cache para aplicações com escopo.").  
O uso desta API com caches com escopo oferece várias vantagens, incluindo:

* Cache de cadeias de caracteres em aplicações com escopo que estão na memória entre transações.
* Cache de dados da aplicação com escopo na memória e liberação desses dados com base nas mudanças na tabela subjacente.
* Definir e usar dados de cache fora do ciclo de vida da transação.
* Armazenar em cache a saída de operações ou cálculos dispendiosos para acesso rápido no futuro.
{#ScopedCacheManagerAPI__ul_kjm_gnl_w5b}

## ScopedCacheManager -- FlushScopedCache(Catálogo de cadeia de caracteres, Chave de cadeia de caracteres) {#ariaid-title2}

Limpa um cache inteiro ou uma única entrada de um cache.
{#ScpdCchMgr-flushScopedCache_S_S__table_yxh_w35_4tb__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo \[sys_scoped_cache\]. |
| chave | Cadeia de caracteres | Opcional. Chave de cache. Defina este parâmetro para liberar uma única entrada de um cache. |
[Tabela 1. Parâmetros]

{#ScpdCchMgr-flushScopedCache_S_S__table_yxh_w35_4tb} {#ScpdCchMgr-flushScopedCache_S_S__table_zxh_w35_4tb__entry__2}

| Tipo | Descrição |
|-|-|
| Nenhum(a) |   |
[Tabela 2. Retorna]

{#ScpdCchMgr-flushScopedCache_S_S__table_zxh_w35_4tb}  
O exemplo a seguir mostra como liberar a chave "abc" de um cache chamado myCache. Para liberar o cache inteiro, omita o parâmetro de chave.

    sn_scoped_cache.ScopedCacheManager.flushScopedCache("myCache", "abc");

## ScopedCacheManager -- get(catálogo de cadeia de caracteres, chave de cadeia de caracteres) {#ariaid-title3}

Obtém um valor de um cache.
{#ScpdCchMgr-get_S_S__table_b5d_z35_4tb__entry__3}{#ScpdCchMgr-get_S_S__sCachedMgrAPI-ph-entry-key}

| Nome | Tipo | Descrição |
|-|-|-|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo \[sys_scoped_cache\]. |
| chave | Cadeia de caracteres | Chave de cache. |
[Tabela 3. Parâmetros]

{#ScpdCchMgr-get_S_S__table_b5d_z35_4tb} {#ScpdCchMgr-get_S_S__table_c5d_z35_4tb__entry__2}

| Tipo | Descrição |
|-|-|
| Cadeia de caracteres | Entrada de cache. |
[Tabela 4. Retorna]

{#ScpdCchMgr-get_S_S__table_c5d_z35_4tb}  
O exemplo a seguir mostra como contar o número de registros de incidentes com descrições resumidas com um número de caracteres maior que a chave (50). Nesse caso, há 6 registros de incidentes com descrições resumidas com mais de 50 caracteres. Este valor é armazenado no cache como uma cadeia de caracteres reutilizável, portanto, você não precisa fazer um cálculo sempre que quiser recuperar o valor.

    var cache2 = "Cache 2"; // column pair type

    // Re-populate the column cache
    for (var i = 0; i < 100; i+=10) {
        var inc = new GlideRecord('incident');
        inc.query();
        var counter = 0;
        while (inc.next()) {
            if (inc.getValue('short_description').length > i)
            counter++;
        }
        sn_scoped_cache.ScopedCacheManager.put(cache2, i.toString(), counter.toString());
    }

    // script to get values from column cache
    gs.info(sn_scoped_cache.ScopedCacheManager.get(cache2, "50"));

Saída:

    scoped_app: 6

## ScopedCacheManager -- getCacheEntryDetails(Catálogo de cadeia de caracteres, Chave de cadeia de caracteres) {#ariaid-title4}

Obtém detalhes de entrada de cache, incluindo tamanho de byte, tipo de objeto e valor de entrada.
{#ScpdCchMgr-getCacheEntryDetails_S_S__table_b5d_z35_4tb__entry__3}{#ScpdCchMgr-getCacheEntryDetails_S_S__sCachedMgrAPI-ph-entry-key}

| Nome | Tipo | Descrição |
|-|-|-|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo \[sys_scoped_cache\]. O nome do catálogo deve ser prefixado com o nome do escopo e um caractere de acento circunflexo. Por exemplo, "test_cache" no escopo global tem o prefixo `"global^test_cache"`. |
| chave | Cadeia de caracteres | Chave de cache. |
[Tabela 5. Parâmetros]

{#ScpdCchMgr-getCacheEntryDetails_S_S__table_b5d_z35_4tb} {#ScpdCchMgr-getCacheEntryDetails_S_S__table_c5d_z35_4tb__entry__2}

| Tipo | Descrição |
|-|-|
| Cadeia de caracteres | Cadeia de caracteres no formato\<ObjectType\> `(`\<EntrySize\> ):\<Value.toString()\> . |
[Tabela 6. Retorna]

{#ScpdCchMgr-getCacheEntryDetails_S_S__table_c5d_z35_4tb}  
O exemplo a seguir mostra como exibir detalhes de entrada de cache para um cache com escopo chamado `test_cache`.

    sn_scoped_cache.ScopedCacheManager.put("test_cache", "key1", "val1");
    gs.info(sn_scoped_cache.ScopedCacheManager.getCacheEntryDetails("global^test_cache", "key1"));

Saída:

    java.lang.String (48):
    val1

## ScopedCacheManager -- prefixFlush (Catálogo de cadeia de caracteres, Prefixo de cadeia de caracteres) {#ariaid-title5}

Limpa todas as entradas de cache que têm chaves que começam com um prefixo especificado.
{#ScpdCchMgr-prefixFlush_S_S__table_b5d_z35_4tb__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo \[sys_scoped_cache\]. |
| prefixo | Cadeia de caracteres | Prefixo pelo qual pesquisar chaves ao limpar o cache. |
[Tabela 7. Parâmetros]

{#ScpdCchMgr-prefixFlush_S_S__table_b5d_z35_4tb} {#ScpdCchMgr-prefixFlush_S_S__table_c5d_z35_4tb__entry__2}

| Tipo | Descrição |
|-|-|
| Nenhum(a) |   |
[Tabela 8. Retorna]

{#ScpdCchMgr-prefixFlush_S_S__table_c5d_z35_4tb}  
O exemplo a seguir mostra como liberar valores de cache para chaves com o prefixo `a`.

    sn_scoped_cache.ScopedCacheManager.put("test_cache", "aKey1", "val1");
    sn_scoped_cache.ScopedCacheManager.put("test_cache", "aKey2", "val2");
    sn_scoped_cache.ScopedCacheManager.put("test_cache", "bKey1", "val3");

    sn_scoped_cache.ScopedCacheManager.prefixFlush("test_cache", "a");

    gs.info(sn_scoped_cache.ScopedCacheManager.get("test_cache", "aKey1"));
    gs.info(sn_scoped_cache.ScopedCacheManager.get("test_cache", "aKey2"));
    gs.info(sn_scoped_cache.ScopedCacheManager.get("test_cache", "bKey1"));

Saída:

    *** Script: null
    *** Script: null
    *** Script: val3

## ScopedCacheManager -- put(Catálogo de cadeia de caracteres, Chave de cadeia de caracteres, Valor de cadeia de caracteres) {#ariaid-title6}

Coloca um valor em um cache com escopo para caches que são do tipo Tabela ou Par de colunas de tabela.
{#ScpdCchMgr-put_S_S_S__table_rzq_235_4tb__entry__3}{#ScpdCchMgr-put_S_S_S__sCachedMgrAPI-ph-entry-key}{#ScpdCchMgr-put_S_S_S__sCachedMgrAPI-parm-ph-value}

| Nome | Tipo | Descrição |
|-|-|-|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo \[sys_scoped_cache\]. |
| chave | Cadeia de caracteres | Chave de cache. |
| valor | Cadeia de caracteres | Entrada de cache. |
[Tabela 9. Parâmetros]

{#ScpdCchMgr-put_S_S_S__table_rzq_235_4tb} {#ScpdCchMgr-put_S_S_S__table_szq_235_4tb__entry__2}

| Tipo | Descrição |
|-|-|
| Nenhum(a) |   |
[Tabela 10. Retorna]

{#ScpdCchMgr-put_S_S_S__table_szq_235_4tb}  
O exemplo a seguir mostra como definir e recuperar uma chave chamada "abc" para um cache chamado myCache. O cache é emparelhado com a tabela Incidente \[incidente\]. O exemplo também mostra como o cache é liberado após a atualização do campo de descrição de um registro de incidente.

    //put value in cache for key "abc"
    gs.info("put key 'abc' into cache with value 'value1'");
    sn_scoped_cache.ScopedCacheManager.put("myCache", "abc", "value1");

    // retrieve value from cache for key "abc"
    gs.info("value of 'abc' in cache: ");
    gs.info(sn_scoped_cache.ScopedCacheManager.get("myCache", "abc")+"\n");

    //update an incident record (add string to the description field)
    gs.info("Updating incident record.");
    var gr = new GlideRecord("incident");
    gr.get("<incident_sys_id>");
    gr.description= "test12345";
    if (gr.update()) {
        gs.info("Record updated successfully.\n");
    };

    //retrieve the value from cache for key "abc"
    gs.info("Retrieving 'abc' from cache. Value should be null because a table pair was updated.");
    gs.info(sn_scoped_cache.ScopedCacheManager.get("myCache", "abc"));

Saída:

    scoped_app: put key 'abc' into cache with value 'value1'
    scoped_app: value of 'abc' in cache: 
    scoped_app: value1

    scoped_app: Updating incident record.
    scoped_app: Record updated successfully.

    scoped_app: Retrieving 'abc' from cache. Value should be null because a table pair was updated.
    scoped_app: null

## ScopedCacheManager -- putMultiRow(Catálogo de cadeia de caracteres, Chave de cadeia de caracteres, Valor de cadeia de caracteres, IDs de matriz) {#ariaid-title7}

Coloca uma entrada no cache e define todos os registros com os sys_ids especificados como uma origem de liberação para essa entrada. Este método se destina a caches que são do tipo Tabela ou Par de colunas de tabela.
{#ScpdCchMgr-putMultiRow_S_S_S_A__table_b5d_z35_4tb__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| catálogo | Cadeia de caracteres | O catálogo a ser liberado. Nome do cache definido na tabela Caches com escopo \[sys_scoped_cache\]. |
| chave | Cadeia de caracteres | Chave de cache para a nova entrada. |
| valor | Cadeia de caracteres | Valor da nova entrada. |
| IDs | Matriz | Lista de sys_ids dos registros a serem usados como origens de liberação para a entrada. Esses registros podem ser de tabelas diferentes. |
[Tabela 11. Parâmetros]

{#ScpdCchMgr-putMultiRow_S_S_S_A__table_b5d_z35_4tb} {#ScpdCchMgr-putMultiRow_S_S_S_A__table_c5d_z35_4tb__entry__2}

| Tipo | Descrição |
|-|-|
| Nenhum(a) |   |
[Tabela 12. Retorna]

{#ScpdCchMgr-putMultiRow_S_S_S_A__table_c5d_z35_4tb}  
O exemplo a seguir mostra como usar um incidente e um registro de usuário como pontos de liberação. A chave test_cache INC0000060 é liberada quando um dos registros especificados é atualizado.

    // This example requires a table-row pair for the "incident" and "sys_user" tables assigned to a cache named test_cache
    var inc1ID = "1c741bd70b2322007518478d83673af3";
    var userID = "681ccaf9c0a8016400b98a06818d57c7";

    // update to email should invalidate the entry
    gs.info("initial put");
    putCacheEntry();
    gs.info("cache value for INC0060: " + sn_scoped_cache.ScopedCacheManager.get("test_cache", "INC0000060"));
    var gr = new GlideRecord("sys_user");
    gr.get(userID);
    gr.setValue("email", "a" + gr.getValue("email"));
    gr.update();
    gs.info("updated user email");
    gs.info("cache value: " + sn_scoped_cache.ScopedCacheManager.get("test_cache", "INC0000060"));

    // update to incident number should invalidate the entry.
    gs.info("second put");
    putCacheEntry();
    gs.info("cache value: " + sn_scoped_cache.ScopedCacheManager.get("test_cache", "INC0000060"));
    var gr = new GlideRecord("incident");
    gr.get(inc1ID);
    gr.setValue("number", gr.getValue("number") + "1");
    gr.update();
    gs.info("updated incident number");
    gs.info("cache value: " + sn_scoped_cache.ScopedCacheManager.get("test_cache", "INC0000060"));

    function putCacheEntry() {
        var incGr = new GlideRecord("incident");
        incGr.get(inc1ID);
        var userGr = new GlideRecord("sys_user");
        userGr.get(userID);
        // the cache stores that the incident is assigned to a specific user. So if the incident or user record changes, we should flush.
        sn_scoped_cache.ScopedCacheManager.putMultiRow("test_cache",incGr.getValue("number"), userGr.getValue("email"), [inc1ID, userID]);
    }

Saída:

    *** Script: initial put
    *** Script: cache value for INC0060: employee@example.com
    *** Script: Updating Joe Employee's primary email device based on change to user record email address
    *** Script: updated user email
    *** Script: cache value: null
    *** Script: second put
    *** Script: cache value: aemployee@example.com
    *** Script: updated incident number
    *** Script: cache value: null

## ScopedCacheManager -- putRow(Catálogo de cadeia de caracteres, Chave de cadeia de caracteres, Valor de cadeia de caracteres, sysId de cadeia de caracteres) {#ariaid-title8}

Coloca um valor em uma única linha (tabela) de um cache. Use este método para caches que são tipos de linha de tabela ou linha de tabela e pares de colunas.
{#ScpdCchMgr-putRow_S_S_S_S__table_rzq_235_4tb__entry__3}{#ScpdCchMgr-putRow_S_S_S_S__sCachedMgrAPI-ph-entry-key}{#ScpdCchMgr-putRow_S_S_S_S__sCachedMgrAPI-parm-ph-value}

| Nome | Tipo | Descrição |
|-|-|-|
| catálogo | Cadeia de caracteres | Nome do cache definido na tabela Caches com escopo \[sys_scoped_cache\]. |
| chave | Cadeia de caracteres | Chave de cache. |
| valor | Cadeia de caracteres | Entrada de cache. |
| sysId | Cadeia de caracteres | Opcional. Sys_id de uma linha em uma tabela, ou seja, o registro que está sendo rastreado. |
[Tabela 13. Parâmetros]

{#ScpdCchMgr-putRow_S_S_S_S__table_rzq_235_4tb} {#ScpdCchMgr-putRow_S_S_S_S__table_szq_235_4tb__entry__2}

| Tipo | Descrição |
|-|-|
| Nenhum(a) |   |
[Tabela 14. Retorna]

{#ScpdCchMgr-putRow_S_S_S_S__table_szq_235_4tb}  
O exemplo a seguir usa um tipo de cache de par de linhas de tabela chamado incident_cache. O cache adiciona o ID do solicitante do incidente e as entradas de cache associadas ao sys_id do registro alterado são apagadas.

    // build the cache:
    var number = 'INC0009009';
    var inc = new GlideRecord('incident');
    inc.addQuery('number', number);
    inc.query();
    inc.next();
    var entry = inc.caller_id.getDisplayValue();
    sn_scoped_cache.ScopedCacheManager.putRow("incident_cache", inc.getValue('number'), entry, inc.getValue('sys_id'));
    gs.info(sn_scoped_cache.ScopedCacheManager.get("incident_cache", number));

    // when the incident is altered, the cache entry will be flushed.
    inc = new GlideRecord('incident');
    inc.addQuery('number', number);
    inc.query();
    inc.next();
    inc.setValue('short_description', inc.getValue('short_description') + "a");
    inc.update();
    gs.info(sn_scoped_cache.ScopedCacheManager.get("incident_cache", number));

Saída:

    scoped_app: John Jones
    scoped_app: null


