GlideAgentWorkspace (g_aw) - Client

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 10 minutes de lecture
  • L’API g_aw fournit des méthodes qui permettent à une action d’interface utilisateur ou à un script client d’ouvrir un enregistrement spécifié dans un Espace de travail d'agent onglet.

    Il n’existe aucun constructeur pour cette classe. Accédez aux méthodes GlideAgentWorkspace à l’aide de l’objet global g_aw .

    GlideAgentWorkspace : closeRecord()

    Ferme l’enregistrement actuellement ouvert, tel qu’un formulaire, dans un sous-onglet au sein de Espace de travail d'agent.

    Tableau 1. Paramètres
    Nom Type Description
    Aucun
    Tableau 2. Renvoie
    Type Description
    Néant
    L’exemple suivant enregistre le contenu de l’onglet, puis le ferme.
    fonction onClick(g_form) {
    function onClick(g_form) {
      g_form.save().then(function(){
        g_aw.closeRecord();
      });
    }
    L’exemple de script suivant utilise la méthode g_aw.closeRecord() pour fermer un enregistrement lorsqu’un bouton est cliqué dans Espace de travail d'agent. Vous pouvez utiliser ce script comme suit :
    1. Ajouter ce script à une action d’interface utilisateur (bouton) configurée pour Espace de travail d'agent.
    2. Lorsque vous cliquez sur le bouton, il tente de fermer l’enregistrement actuel.
    3. La journalisation de base indique la réussite ou l’échec.
    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);
            });
        }
    }
    Dans un exemple plus complexe, la méthode closeRecord() est appliquée dans un script client dans lequel un agent d’assistance veut fermer automatiquement un enregistrement Espace de travail d'agent d’incident après avoir effectué une action spécifique, telle que la résolution de l’incident. Les actions clés de ce script sont les suivantes :
    • Condition de déclenchement : le script vérifie si l’état de l’incident est défini sur « Résolu » (état = 6).
    • Validation de l’espace de travail : garantit que le code s’exécute uniquement à l’aide Espace de travail d'agentdu type de g_aw !== 'non défini'.
    • Gestion des promesses : Utilise .then() et .catch() pour gérer la nature asynchrone de closeRecord().
    • Gestion des erreurs : fournit une journalisation détaillée des tentatives réussies et échouées.
    (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(Table de chaînes, SysId de chaîne, Paramètres d’objet)

    Ouvre un enregistrement spécifié, tel qu’un formulaire, dans un sous-onglet dans Espace de travail d'agent.

    Remarque :
    Cette méthode n’est disponible que dans l’environnement Espace de travail d'agent de script client ou dans une action d’interface utilisateur sur le champ de script client de l’espace de travail.
    Tableau 3. Paramètres
    Nom Type Description
    table Chaîne Nom de la table qui contient l’enregistrement à ouvrir.
    sysId Chaîne ID système de l’enregistrement à ouvrir.
    paramètres Objet Facultatif. Paires nom/valeur des paramètres à transmettre à l’enregistrement.
    "params": {
      "readOnlyForm": Boolean;
      "defaultTab": "String";
      "hideDetails": Boolean
    }
    params.readOnlyForm Booléen Marqueur indiquant si tous les champs de l’enregistrement ouvert sont en lecture seule ; indépendamment de la politique d’interface utilisateur et des ACL.
    • vrai : tous les champs sont en lecture seule.
    • faux : les champs adhèrent à la politique d’interface utilisateur et aux ACL associés.

    Valeur par défaut : false

    params.defaultTab Chaîne Nom du premier onglet à afficher dans l’espace de travail. Vous pouvez uniquement spécifier des éléments connexes ou des listes connexes.

    S’il n’est pas spécifié, l’onglet Détails s’affiche sauf si hideDetails la valeur est définie sur vrai.

    Pour plus d’informations sur la méthode à utiliser pour obtenir un nom de liste connexe, consultez getRelatedListNames().

    params.hideDetails Booléen Marqueur indiquant s’il faut masquer l’onglet Détails et les actions d’interface utilisateur.
    • vrai : seuls l’en-tête du formulaire, tous les autres onglets et le premier onglet disponible apparaissent sur le formulaire.
    • faux : l’onglet Détails et les actions d’interface utilisateur s’affichent sur le formulaire.

    Valeur par défaut : false

    Tableau 4. Renvoie
    Type Description
    Néant

    Ouvrez un enregistrement sys_user dans un sous-onglet.

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

    Ouvrez un enregistrement dans un sous-onglet où tous les champs sont en lecture seule.

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

    Ouvrez un enregistrement dans un sous-onglet et accédez directement à la liste connexe « Groupes ».

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

    Ouvrir un enregistrement dans un sous-onglet, mais afficher uniquement l’en-tête du formulaire et les autres onglets.

    g_aw.openRecord('sys_user', '62826bf03710200044e0bfc8bcbe5df1', {hideDetails: true}); 
    L’exemple de script suivant montre comment un agent peut ajouter un bouton à un incident qui ouvre une demande de changement associée dans un nouvel onglet dans Espace de travail d'agent. Les actions clés de ce script sont les suivantes :
    • Ouverture dynamique d’enregistrement : le script récupère la sys_id de la demande de changement connexe à partir de l’incident actuel.
    • Contexte d’Espace de travail d’agent : vérifie si g_aw est disponible pour confirmer l’exécution du script dans Espace de travail d'agent.
    • Paramètres personnalisés :
      • Vue : « Agent » ouvre l’enregistrement dans une vue spécifique (facultatif).
      • readOnly : true ouvre l’enregistrement en mode lecture seule (facultatif).
    • Gestion des erreurs : utilise .then() et .catch() pour gérer les réponses et les erreurs.
    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.');
        }
    }
    Remarque :
    Vous pouvez utiliser ce script dans votre propre instance en joignant ce script à une action d’interface utilisateur (bouton) sur le formulaire Incident dans Espace de travail d'agent. Un clic sur le bouton ouvre la demande de changement associée dans un nouvel onglet, améliorant ainsi le workflow de l’agent.

    GlideAgentWorkspace : setSectionExpanded(chaîne section_name, booléen développé)

    Définit une section de formulaire sur l’état développé ou réduit.

    Pour un cas d’utilisation, reportez-vous à la section .

    Tableau 5. Paramètres
    Nom Type Description
    section_name Chaîne Nom d’une section de formulaire dans Espace de travail d'agent.
    développé Booléen Marqueur indiquant si une section doit être développée ou réduite par défaut.
    • true : la section est développée par défaut.
    • false : la section est réduite par défaut.
    Tableau 6. Renvoie
    Type Description
    Néant

    L’exemple suivant montre comment définir une section de formulaire nommée related_records pour qu’elle soit réduite par défaut.

    function onLoad() {
       g_aw.setSectionExpanded('related_records', false);
    }
    L’exemple de script suivant montre comment un agent peut utiliser la méthode setSectionExpanded pour ouvrir un incident où la section « Notes de travail » doit automatiquement se développer si l’incident a une priorité élevée (par exemple, Priorité 1 ou 2). Pour les priorités inférieures, la section reste réduite pour réduire l’encombrement visuel.
    Les actions clés de ce script sont les suivantes :
    • Logique basée sur les priorités : le script vérifie la priorité de l’incident à l’aide de g_form.getValue('priority').
    • Contrôle de section dynamique : développe la section « Notes de travail » si la priorité est de 1 (critique) ou 2 (élevée). Le réduit pour les priorités inférieures afin de maintenir une interface utilisateur plus propre.
    • Vérification de l’espace de travail d’agent : garantit que le script ne s’exécute que dans Espace de travail d'agent.
    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);
        }
    })();
    Vous pouvez ajouter cet exemple en tant que script client avec le type défini sur « onLoad » pour les incidents dans Espace de travail d'agent. Assurez-vous que le nom de la section correspond exactement à ce qu’il apparaît dans la mise en page du formulaire (par exemple, « Notes de travail »).

    GlideAgentWorkspace : domainScopeProvider()

    Obtient les détails du champ d’application du domaine.

    La méthode domainScopeProvider() accède à quatre fonctions pour renvoyer des informations sur le champ d’application du domaine. (pour en savoir plus, consultez Domain scope) ;

    Rôle requis – domain_expand_scope.

    Tableau 7. Fonctions
    Nom de fonction Type de retour Description
    getDomainScope() Chaîne Obtient le champ d’application de domaine.
    Valeurs possibles :
    • false : renvoie les informations de base sur le domaine et n’inclut pas d’informations sur les domaines parents, les propriétés héritées ou la hiérarchie des domaines.
    • vrai : renvoie des informations détaillées sur le champ d’application du domaine concernant l’enregistrement actuel ou le contexte de l’espace de travail.

    Valeur par défaut : false

    hasDomainChanged() Booléen Marqueur indiquant si le domaine a changé pour l’enregistrement actuel par rapport à son domaine d’origine.
    Valeurs valides :
    • vrai : le domaine a changé.
    • false : le domaine n’a pas changé. Renvoie les informations de base sur le domaine sans évaluer si le domaine a changé.

    Valeur par défaut : false

    isDomainEnabledRecord() Booléen Marqueur indiquant si la méthode doit vérifier si l’enregistrement actuel est séparé par domaine (activé par domaine).
    Valeurs valides :
    • vrai : l’enregistrement est activé pour le domaine (par exemple, Séparation de domaine s’applique à lui).
    • faux : l’enregistrement n’est pas activé pour le domaine (par exemple, il existe globalement sans restrictions spécifiques au domaine).

    Valeur par défaut : false

    toggleDomainScope() Booléen Marqueur indiquant s’il faut activer ou désactiver le contexte du champ d’application de domaine pour un enregistrement.
    Valeurs valides :
    • vrai : affiche toutes les données disponibles en fonction du domaine de l’utilisateur et des domaines enfants.
    • faux : afficher uniquement les données qui correspondent au domaine de l’enregistrement actuel.

    Par défaut : true

    Tableau 8. Renvoie
    Type Description
    Néant

    Exemple

    L’exemple suivant montre comment basculer le champ d’application de domaine entre la session utilisateur et l’enregistrement en tant que développé (champ d’application de la session) ou réduit (champ d’application de l’enregistrement) dans un script client du lieu de travail d’action d’interface utilisateur.

    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;
      }
    }
    L’exemple de script suivant montre comment un agent peut vérifier dans quel domaine il travaille lorsqu’il traite des enregistrements dans Espace de travail d'agent. Les actions clés de ce script sont les suivantes :
    • Vérifications de base : typeof g_aw !=='undefined' garantit que le script ne s’exécute qu’enEspace de travail d'agent. g_aw.domainScopeProvider vérifie si la méthode existe.
    • Gestion asynchrone simple : utilise .then() pour traiter le résultat lorsque les informations de domaine sont disponibles. Utilise .catch() pour gérer les erreurs (par exemple, si quelque chose ne va pas lors de l’extraction du domaine).
    • Alerte conviviale : affiche une alerte avec le nom de domaine (alert('Vous travaillez dans le domaine :...')), qui est simple et facile à comprendre. Si aucune information de domaine n’est trouvée, il alerte l’utilisateur avec "Les informations de domaine ne sont pas disponibles."
    • Gestion des erreurs : les erreurs sont enregistrées sur la console à l’aide de console.error() pour le dépannage de base.
    (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);
            });
        }
    })();

    Vous pouvez ajouter ce script en tant que script client « onLoad » dans Espace de travail d'agent. Lorsqu’un agent ouvre un enregistrement, une alerte s’affiche affichant le nom de domaine actuel.