GlideAgentWorkspace (g_aw) - Cliente

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 10 min. de leitura
  • A API g_aw fornece métodos que permitem que uma ação de IU ou client script abra um registro especificado em uma guia Espaço do agente.

    Não há nenhum construtor para esta classe. Acesse os métodos GlideAgentWorkspace usando o objeto global g_aw.

    GlideAgentWorkspace – closeRecord()

    Fecha o registro aberto no momento, como um formulário, em uma subguia dentro de Espaço do agente.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 2. Retorna
    Tipo Descrição
    Nenhum(a)
    O exemplo a seguir salva o conteúdo da guia e a fecha.
    função onClick(g_form) {
    function onClick(g_form) {
      g_form.save().then(function(){
        g_aw.closeRecord();
      });
    }
    O script de exemplo a seguir usa o método g_aw.closeRecord() para fechar um registro quando um botão é clicado em Espaço do agente. Você pode usar este script da seguinte forma:
    1. Adicione este script a uma Ação de IU (botão) configurada para Espaço do agente.
    2. Quando o botão for clicado, ele tentará fechar o registro atual.
    3. O registro em log básico indica sucesso ou falha.
    functioncloseCurrentRecord() {
        if (typeof g_aw !== 'undefined' && g_aw.closeRecord) {
            g_aw.closeRecord().then(function(response) {
                console.log(response.success ? 'Record closed successfully.' : 'Failed to close the record.');
            }).catch(function(error) {
                console.error('Error closing the record:', error);
            });
        }
    }
    Em um exemplo mais complexo, o método closeRecord() é aplicado em um client script em que um agente de suporte deseja fechar automaticamente um registro de incidente em Espaço do agente após executar uma ação específica, como resolver o incidente. As principais ações deste script são as seguintes:
    • Condição do gatilho: o script verifica se o estado do incidente está definido como "Resolvido" (estado = 6).
    • Validação do espaço: garante que o código seja executado somente em Espaço do agente usando typeof g_aw !== 'undefined'.
    • Manipulação de promessa: usa .then() e .catch() para lidar com a natureza assíncrona de closeRecord().
    • Manipulação de erros: fornece registro em log detalhado para tentativas bem-sucedidas e com falha.
    (function executeRule(current, gForm, gUser, gSNC) {
        // Check if the incident state is 'Resolved' (state = 6 in default ServiceNow setup)
        if (current.state == 6) {
            // Ensure we're in Agent Workspace
            if (typeof g_aw !== 'undefined' && g_aw.closeRecord) {
                g_aw.closeRecord().then(function(response) {
                    if (response.success) {
                        console.log('Incident record closed successfully in Agent Workspace.');
                    } else {
                        console.error('Failed to close the record:', response.errorMessage);
                    }
                }).catch(function(error) {
                    console.error('An error occurred while closing the record:', error);
                });
            }
        }
    })(current, gForm, gUser, gSNC);

    GlideAgentWorkspace - openRecord(cadeia de caracteres tabela, cadeia de caracteres sysId, parâmetros de objeto)

    Abre um registro especificado, como um formulário, em uma subguia dentro de Espaço do agente.

    Nota:
    Este método só está disponível no ambiente de client script Espaço do agente ou em uma ação de IU no campo de client script do espaço.
    Tabela 3. Parâmetros
    Nome Tipo Descrição
    tabela Cadeia de caracteres Nome da tabela que contém o registro a ser aberto.
    sysId Cadeia de caracteres SYS ID do registro a ser aberto.
    parâms Objeto Opcional. Pares de nome/valor dos parâmetros a serem passados para o registro.
    "params": {
      "readOnlyForm": Boolean;
      "defaultTab": "String";
      "hideDetails": Boolean
    }
    params.readOnlyForm Booliano Sinalizador que indica se todos os campos no registro aberto são somente leitura; independentemente da política de IU e das ACLs.
    • verdadeiro: todos os campos são somente leitura.
    • falso: os campos aderem à política de IU e às ACLs associadas.

    Padrão: falso

    params.defaultTab Cadeia de caracteres Nome da guia inicial a ser exibida no espaço. Você só pode especificar itens relacionados ou listas relacionadas.

    Se não for especificado, a guia de detalhes será exibida, a menos que hideDetails esteja definido como verdadeiro.

    Para obter mais informações sobre o método a ser usado para obter um nome de lista relacionada, consulte getRelatedListNames().

    params.hideDetails Booliano Sinalizador que indica se a guia de detalhes e as ações de IU devem ser ocultadas.
    • verdadeiro: somente o cabeçalho do formulário, todas as outras guias e a primeira guia disponível aparecem no formulário.
    • falso: a guia Detalhes e as ações de IU aparecem no formulário.

    Padrão: falso

    Tabela 4. Retornos
    Tipo Descrição
    Nenhum(a)

    Abra um registro sys_user em uma subguia.

    g_aw.openRecord('sys_user', '62826bf03710200044e0bfc8bcbe5df1'); 

    Abra um registro em uma subguia em que todos os campos são somente leitura.

    g_aw.openRecord('sys_user', '62826bf03710200044e0bfc8bcbe5df1', {readOnlyForm: true}); 

    Abra um registro em uma subguia e vá diretamente para a lista relacionada "Grupos".

    g_aw.openRecord('sys_user', '62826bf03710200044e0bfc8bcbe5df1', {defaultTab: "sys_user_grmember.user"});  

    Abra um registro em uma subguia, mas mostre somente o cabeçalho do formulário e outras guias.

    g_aw.openRecord('sys_user', '62826bf03710200044e0bfc8bcbe5df1', {hideDetails: true}); 
    O script de exemplo a seguir demonstra como um agente pode adicionar um botão a um incidente que abre uma solicitação de mudança relacionada em uma nova guia em Espaço do agente. As principais ações deste script são as seguintes:
    • Abertura de registro dinâmico: o script recupera o sys_id da solicitação de mudança relacionada do incidente atual.
    • Contexto do Espaço do agente: verifica se g_aw está disponível para confirmar se o script está sendo executado em Espaço do agente.
    • Parâmetros personalizados:
      • exibição: 'agent' abre o registro em uma exibição específica (opcional).
      • readOnly: verdadeiro abre o registro no modo somente leitura (opcional).
    • Manipulação de erros: usa .then() e .catch() para lidar com respostas e erros.
    function openRelatedChangeRequest() {
        // Get the sys_id of the related Change Request from the current incident
        var changeRequestSysId = g_form.getValue('change_request'); // Assuming 'change_request' is the field name
    
        if (changeRequestSysId && typeof g_aw !== 'undefined' && g_aw.openRecord) {
            g_aw.openRecord('change_request', changeRequestSysId, {
                view: 'agent', // Optional: Specify a custom view
                readOnly: true // Optional: Open the record in read-only mode
            }).then(function(response) {
                if (response.success) {
                    console.log('Change Request opened successfully.');
                } else {
                    console.error('Failed to open Change Request:', response.errorMessage);
                }
            }).catch(function(error) {
                console.error('Error opening Change Request:', error);
            });
        } else {
            console.warn('No related Change Request found or Agent Workspace is not available.');
        }
    }
    Nota:
    Você pode usar este script em sua própria instância anexando-o a uma Ação de IU (botão) no formulário de Incidente em Espaço do agente. Clicar no botão abre a solicitação de mudança relacionada em uma nova guia, melhorando o fluxo de trabalho do agente.

    GlideAgentWorkspace - setSectionExpanded(cadeia de caracteres "section_name", booliano expandido)

    Define uma seção de formulário para o estado expandido ou recolhido.

    Para um caso de uso, consulte .

    Tabela 5. Parâmetros
    Nome Tipo Descrição
    section_name Cadeia de caracteres Nome de uma seção de formulário em Espaço do agente.
    expandido Booliano Sinalizador que indica se uma seção deve ser expandida ou recolhida por padrão.
    • verdadeiro: a seção é expandida por padrão.
    • falso: a seção está recolhida por padrão.
    Tabela 6. Retornos
    Tipo Descrição
    Nenhum(a)

    O exemplo a seguir mostra como definir uma seção de formulário chamada related_records para recolher por padrão.

    function onLoad() {
       g_aw.setSectionExpanded('related_records', false);
    }
    O script de exemplo a seguir demonstra como um agente pode usar o método setSectionExpanded para abrir um incidente em que a seção "Anotações de trabalho" deve ser expandida automaticamente se o incidente tiver uma prioridade alta (por exemplo, Prioridade 1 ou 2). Para prioridades mais baixas, a seção permanece recolhida para reduzir a desordem visual.
    As principais ações deste script são as seguintes:
    • Lógica baseada em prioridade: o script verifica a prioridade do incidente usando g_form.getValue('priority').
    • Controle de seção dinâmica: expande a seção "Anotações de trabalho" se a prioridade for 1 (Crítica) ou 2 (Alta). Recolhe para prioridades mais baixas para manter uma IU mais limpa.
    • Verificação do Espaço do agente: garante que o script seja executado somente em Espaço do agente.
    javascriptCopyEdit(functiontoggleWorkNotesSection() {
        // Check if we're in Agent Workspace and the method is availableif (typeof g_aw !== 'undefined' && g_aw.setSectionExpanded) {
            // Get the incident priority from the formvar priority = g_form.getValue('priority');
    
            // Automatically expand the "Work Notes" section for high-priority incidents (1 or 2)var shouldExpand = (priority == '1' || priority == '2');
    
            // Expand or collapse the section based on priority
            g_aw.setSectionExpanded('Work Notes', shouldExpand);
        }
    })();
    Você pode adicionar este exemplo como um client script com o tipo definido como "onLoad" para incidentes em Espaço do agente. Verifique se o nome da seção corresponde exatamente ao que aparece no layout do formulário (por exemplo, "Anotações de trabalho").

    GlideAgentWorkspace - domainScopeProvider()

    Obtém os detalhes do escopo do domínio.

    O método domainScopeProvider() acessa quatro funções para retornar informações sobre o escopo do domínio. Para obter informações, consulte Domain scope.

    Função necessária – domain_expand_scope.

    Tabela 7. Funções
    Nome da Função Tipo de Retorno Descrição
    getDomainScope() Cadeia de caracteres Obtém o escopo do domínio.
    Valores possíveis:
    • falso: retorna informações básicas do domínio e não inclui informações sobre domínios primários, propriedades herdadas ou hierarquia de domínio.
    • verdadeiro: retorna informações detalhadas do escopo do domínio sobre o registro atual ou o contexto do espaço.

    Padrão: falso

    hasDomainChanged () Booliano Sinalizador que indica se o domínio foi alterado para o registro atual em comparação com o domínio original.
    Valores válidos:
    • verdadeiro: o domínio foi alterado.
    • falso: o domínio não foi alterado. Retorna informações básicas do domínio sem avaliar se o domínio foi alterado.

    Padrão: falso

    isDomainEnabledRecord() Booliano Sinalizador que indica se o método deve verificar se o registro atual está separado por domínio (habilitado para domínio).
    Valores válidos:
    • verdadeiro: o registro está habilitado para domínio (por exemplo, a separação de domínio se aplica a ele).
    • falso: o registro não está habilitado para domínio (por exemplo, ele existe globalmente sem restrições específicas de domínio).

    Padrão: falso

    alternarDomainScope() Booliano Sinalizador que indica se o contexto de escopo do domínio deve ser habilitado ou desabilitado para um registro.
    Valores válidos:
    • verdadeiro: exibe todos os dados disponíveis com base no domínio do usuário e nos domínios secundários.
    • falso: exibe somente os dados que correspondem ao domínio do registro atual.

    Padrão: verdadeiro

    Tabela 8. Retornos
    Tipo Descrição
    Nenhum(a)

    Exemplo

    O exemplo a seguir mostra como alternar o escopo do domínio entre a sessão do usuário e o registro como expandido (escopo da sessão) ou recolhido (escopo do registro) em um client script de local de trabalho de ação de IU.

    function onClick(g_form) {
        var provider = g_aw.domainScopeProvider();
        
        provider.toggleDomainScope();
    
        var domainScopeNow = provider.getDomainScope();
    
        if (domainScopeNow === 'SESSION')
            g_form.addInfoMessage(getMessage("Domain Scope Expanded"));
        else if (domainScopeNow === 'RECORD')
            g_form.addInfoMessage(getMessage("Domain Scope Collapsed"));
    }
    function onSubmit() {
          if (typeof g_aw === 'undefined' || !g_aw.domainScopeProvider || typeof g_scratchpad === 'undefined') return true;
          if (g_scratchpad._domainConfirmationPassed ||
              g_scratchpad._domainCheckErrorBypass || g_scratchpad._domainCheckPassed) return true;
          var provider = g_aw.domainScopeProvider();
          if (!provider || !provider.isDomainEnabledRecord || !provider.isDomainEnabledRecord()) return true;
      // if you change these messages, please change them in the above messages field var title = getMessage("Change Domain"); var message = getMessage("You are about to change the domain of this record which may result in data
          loss.We will copy the information we can but you may need to replace the lost data.Do you want to proceed ? ");
          var gFormRef = g_form;
          var popModalConfirm = function() {  g_modal.confirm(title, message , function(response) {
          if (response) {
              g_scratchpad._domainConfirmationPassed = true;
              gFormRef.submit(gFormRef.getActionName());
          }
      });
      return false;
      };
    
      var proceedWithSubmit = function() {
          gFormRef.submit(gFormRef.getActionName());
      };
    
      var hasDomainChanged = provider.hasDomainChanged();
      if (hasDomainChanged === false) return true;
      if (hasDomainChanged === true) return popModalConfirm();
      else {
          hasDomainChanged.then(function(isChanged) {
              if (isChanged)
                  return popModalConfirm();
              else {
                  g_scratchpad._domainCheckPassed = true;
                  proceedWithSubmit();
              }
          }, function(error) {
              g_scratchpad._domainCheckErrorBypass = true;
              proceedWithSubmit();
          });
          return false;
      }
    }
    O script de exemplo a seguir demonstra como um agente pode verificar em qual domínio está trabalhando ao manipular registros em Espaço do agente. As principais ações deste script são as seguintes:
    • Verificações básicas: typeof g_aw !=='undefined' garante que o script seja executado somente em Espaço do agente. g_aw.domainScopeProvider verifica se o método existe.
    • Manipulação assíncrona simples: usa .then() para processar o resultado quando as informações do domínio estão disponíveis. Usa .catch() para lidar com erros (por exemplo, se algo der errado ao buscar o domínio).
    • Alerta amigável: exibe um alerta com o nome do domínio (alert('Você está trabalhando no domínio: ...')), que é simples e fácil de entender. Se nenhuma informação de domínio for encontrada, ele alertará o usuário com "As informações de domínio não estão disponíveis".
    • Manipulação de erros: os erros são registrados no console usando console.error() para solução de problemas básicos.
    (function showDomainAlert() {
        // Check if we're in Agent Workspace and the domainScopeProvider is available
        if (typeof g_aw !== 'undefined' && g_aw.domainScopeProvider) {
            // Get the current domain information
            g_aw.domainScopeProvider().then(function(domainInfo) {
                if (domainInfo && domainInfo.name) {
                    // Show an alert with the current domain name
                    alert('You are working in the domain: ' + domainInfo.name);
                } else {
                    alert('Domain information is not available.');
                }
            }).catch(function(error) {
                console.error('Error getting domain scope:', error);
            });
        }
    })();

    Você pode adicionar este script como um client script "onLoad" em Espaço do agente. Quando um agente abrir um registro, um alerta será exibido mostrando o nome do domínio atual.