GlideAgentWorkspace (g_aw)  – Client

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 9 Minuten Lesedauer
  • Die g_aw- API stellt Methoden bereit, mit denen eine UI-Aktion oder ein Client-Skript einen angegebenen Datensatz auf der Registerkarte Mitarbeiterbereich öffnen kann.

    Für diese Klasse ist kein Konstruktor vorhanden. Greifen Sie mit dem globalen Objekt g_aw auf GlideAgentWorkspace -Methoden zu.

    GlideAgentWorkspace – schließenDatensatz ()

    Schließt den derzeit geöffneten Datensatz, z. B. ein Formular, auf einer Unterregisterkarte in Mitarbeiterbereich.

    Tabelle : 1. Parameter
    Name Typ Beschreibung
    Keine
    Tabelle : 2. Ergebnisse
    Typ Beschreibung
    Keine
    Im folgenden Beispiel wird der Inhalt der Registerkarte gespeichert und anschließend geschlossen.
    Funktion onClick(g_form) {
    function onClick(g_form) {
      g_form.save().then(function(){
        g_aw.closeRecord();
      });
    }
    Das folgende Beispielskript verwendet die Methode g_aw.closeRecord(), um einen Datensatz zu schließen, wenn Sie in Mitarbeiterbereichauf eine Schaltfläche klicken. Sie können dieses Skript wie folgt verwenden:
    1. Fügen Sie dieses Skript einer für Mitarbeiterbereichkonfigurierten UI-Aktion (Schaltfläche) hinzu.
    2. Beim Klicken auf die Schaltfläche wird versucht, den aktuellen Datensatz zu schließen.
    3. Standardprotokollierung zeigt Erfolg oder Fehler an.
    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);
            });
        }
    }
    In einem komplexeren Beispiel wird die Methode closeRecord() in einem Client-Skript angewendet, in dem ein Supportmitarbeiter einen Incident-Datensatz in Mitarbeiterbereich automatisch schließen möchte, nachdem er eine bestimmte Aktion ausgeführt hat, z. B. die Lösung des Incidents. Die wichtigsten Aktionen dieses Skripts lauten wie folgt:
    • Auslöserbedingung: Das Skript prüft, ob der Status des Incidents auf „Gelöst“ festgelegt ist (Status = 6).
    • Arbeitsbereichsvalidierung: Stellt sicher, dass der Code nur innerhalb von Mitarbeiterbereich mit dem Typ g_aw !== 'undefined'ausgeführt wird.
    • Promise-Handler: Verwendet .then() und .catch(), um die Asynchronität von closeRecord()zu handhaben.
    • Fehlerbehandlung: Bietet detaillierte Protokollierung für erfolgreiche und fehlgeschlagene Versuche.
    (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 (Zeichenfolgentabelle, Zeichenfolgen-Sys-ID, Objektparameter)

    Öffnet einen angegebenen Datensatz, z. B. ein Formular, auf einer Unterregisterkarte in Mitarbeiterbereich.

    Hinweis:
    Diese Methode ist nur in der Client-Skriptumgebung Mitarbeiterbereich oder in einer UI-Aktion für das Client-Skript-Feld des Arbeitsbereichs verfügbar.
    Tabelle : 3. Parameter
    Name Typ Beschreibung
    table Zeichenfolge Name der Tabelle, die den zu öffnenden Datensatz enthält.
    sysId Zeichenfolge Sys-ID des zu öffnenden Datensatzes.
    params Objekt Optional. Name/Wert-Paare der Parameter, die an den Datensatz übergeben werden sollen.
    "params": {
      "readOnlyForm": Boolean;
      "defaultTab": "String";
      "hideDetails": Boolean
    }
    params.readOnlyForm Boolean Kennzeichnung, die angibt, ob alle Felder im geöffneten Datensatz schreibgeschützt sind; unabhängig von der UI-Richtlinie und den ACLs.
    • wahr: Alle Felder sind schreibgeschützt.
    • false: Felder entsprechen der zugehörigen UI-Richtlinie und den ACLs.

    Standardwert: false

    params.defaultTab Zeichenfolge Name der ersten Registerkarte, die im Arbeitsbereich angezeigt werden soll. Sie können nur zugehörige Elemente oder zugehörige Listen angeben.

    Wenn nicht angegeben, wird die Registerkarte „Details“ angezeigt, es sei denn, hideDetails ist auf „wahr“ festgelegt.

    Weitere Informationen zur Methode zum Abrufen des Namens einer zugehörigen Liste finden Sie unter getRelatedListNames().

    params.hideDetails Boolean Kennzeichnung, die angibt, ob die Registerkarte „Details“ und die UI-Aktionen ausgeblendet werden sollen.
    • „wahr“: Nur der Formularheader, alle anderen Registerkarten und die erste verfügbare Registerkarte werden auf dem Formular angezeigt.
    • „falsch“: Die Registerkarte „Details“ und UI-Aktionen werden im Formular angezeigt.

    Standardwert: false

    Tabelle : 4. Ergebnisse
    Typ Beschreibung
    Keine

    Öffnen Sie einen sys_user-Datensatz auf einer untergeordneten Registerkarte.

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

    Öffnen Sie einen Datensatz auf einer Unterregisterkarte, in der alle Felder schreibgeschützt sind.

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

    Öffnen Sie einen Datensatz auf einer Unterregisterkarte, und wechseln Sie direkt zur zugehörigen Liste „Gruppen“.

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

    Öffnen Sie einen Datensatz auf einer Unterregisterkarte, zeigen Sie jedoch nur den Formularheader und andere Registerkarten an.

    g_aw.openRecord('sys_user', '62826bf03710200044e0bfc8bcbe5df1', {hideDetails: true}); 
    Das folgende Beispielskript zeigt, wie ein Service Desk-Mitarbeiter einem Incident eine Schaltfläche hinzufügen kann, die eine zugehörige Change-Anforderung auf einer neuen Registerkarte in Mitarbeiterbereichöffnet. Die wichtigsten Aktionen dieses Skripts lauten wie folgt:
    • Dynamische Datensatzeröffnung: Das Skript ruft die sys_id der zugehörigen Change-Anforderung aus dem aktuellen Incident ab.
    • Mitarbeiterbereich-Kontext: Prüft, ob g_aw verfügbar ist, um zu bestätigen, dass das Skript in Mitarbeiterbereichausgeführt wird.
    • Anwenderdefinierte Parameter:
      • Ansicht: „Agent“ öffnet den Datensatz in einer bestimmten Ansicht (optional).
      • readOnly: „wahr“ öffnet den Datensatz im schreibgeschützten Modus (optional).
    • Fehlerbehandlung: Verwendet .then() und .catch() für die Behandlung von Antworten und Fehlern.
    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.');
        }
    }
    Hinweis:
    Sie können dieses Skript in Ihrer eigenen Instanz verwenden, indem Sie es an eine UI-Aktion (Schaltfläche) im Incident-Formular in Mitarbeiterbereichanhängen. Durch Klicken auf die Schaltfläche wird die zugehörige Change-Anforderung auf einer neuen Registerkarte geöffnet, wodurch der Workflow des Service Desk-Mitarbeiters verbessert wird.

    GlideAgentWorkspace – setSectionExpanded(Zeichenfolge „section_name“, boolescher Wert erweitert)

    Versetzt einen Formularabschnitt in den Status „Erweitert“ oder „Reduziert“.

    Einen Anwendungsfall finden Sie unter .

    Tabelle : 5. Parameter
    Name Typ Beschreibung
    Abschnittsname Zeichenfolge Name eines Formularabschnitts in Mitarbeiterbereich.
    Erweitert Boolean Kennzeichnung, die angibt, ob ein Abschnitt standardmäßig erweitert oder reduziert werden soll.
    • wahr: Der Abschnitt wird standardmäßig erweitert.
    • „falsch“: Der Abschnitt ist standardmäßig reduziert.
    Tabelle : 6. Rückgaben
    Typ Beschreibung
    Keine

    Das folgende Beispiel zeigt, wie Sie einen Formularabschnitt namens „related_records“ so festlegen, dass er standardmäßig reduziert wird.

    function onLoad() {
       g_aw.setSectionExpanded('related_records', false);
    }
    Das folgende Beispielskript zeigt, wie ein Service Desk-Mitarbeiter mit der Methode „setSectionExpanded“ einen Incident öffnet, wobei der Abschnitt „Arbeitsnotizen“ automatisch erweitert wird, wenn der Incident eine hohe Priorität hat (z. B. Priorität 1 oder 2). Bei niedrigeren Prioritäten bleibt der Abschnitt reduziert, um die Übersichtlichkeit zu verbessern.
    Die wichtigsten Aktionen dieses Skripts lauten wie folgt:
    • Prioritätsbasierte Logik: Das Skript überprüft die Priorität des incident mithilfe von g_form.getValue('priority').
    • Dynamische Abschnittssteuerung: Erweitert den Abschnitt „Arbeitsnotizen“, wenn die Priorität 1 (Kritisch) oder 2 (Hoch) ist. Reduziert sie für niedrigere Prioritäten, um die Anwenderoberfläche übersichtlicher zu gestalten.
    • Prüfung des Mitarbeiterbereichs: Stellt sicher, dass das Skript nur in Mitarbeiterbereichausgeführt wird.
    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);
        }
    })();
    Sie können dieses Beispiel als Client-Skript hinzufügen, dessen Typ für Incidents in Mitarbeiterbereichauf „onLoad“ festgelegt ist. Stellen Sie sicher, dass der Abschnittsname genau mit dem Formularlayout übereinstimmt (z. B. „Arbeitsnotizen“).

    GlideAgentWorkspace – domainScopeProvider()

    Ruft die Details des Domänenbereichs ab.

    Die Methode „domainScopeProvider()“ greift auf vier Funktionen zu, um Informationen zum Domänenbereich zurückzugeben. Informationen hierzu finden Sie unter Domain scope.

    Erforderliche Rolle: domain_expand_scope

    Tabelle : 7. Funktionen
    Funktionsname Rückgabetyp Beschreibung
    abrufenDomänenBereich () Zeichenfolge Ruft den Domänenbereich ab.
    Mögliche Werte:
    • false: Gibt grundlegende Domäneninformationen zurück und enthält keine Informationen zu übergeordneten Domänen, geerbten Eigenschaften oder der Domänenhierarchie.
    • „wahr“: Gibt detaillierte Domänenbereichsinformationen zum aktuellen Datensatz- oder Arbeitsbereichskontext zurück.

    Standardwert: false

    hasDomainChanged () Boolean Kennzeichnung, die angibt, ob sich die Domäne für den aktuellen Datensatz im Vergleich zu ihrer ursprünglichen Domäne geändert hat.
    Gültige Werte:
    • wahr: Domäne hat sich geändert.
    • „falsch“: Domäne hat sich nicht geändert. Gibt grundlegende Domäneninformationen zurück, ohne auszuwerten, ob sich die Domäne geändert hat.

    Standardwert: false

    istDomäneAktivierterDatensatz () Boolean Kennzeichnung, die angibt, ob die Methode überprüfen soll, ob der aktuelle Datensatz domänengetrennt (domänenfähig) ist.
    Gültige Werte:
    • wahr: Datensatz ist domänenfähig (domänentrennung gilt z. B. für ihn).
    • „false“: Datensatz ist nicht domänenfähig (er ist beispielsweise global ohne domänenspezifische Einschränkungen vorhanden).

    Standardwert: false

    toggleDomainScope () Boolean Kennzeichnung, die angibt, ob der Domänenbereichskontext für einen Datensatz aktiviert oder deaktiviert werden soll.
    Gültige Werte:
    • „wahr“: Zeigt alle verfügbaren Daten basierend auf der Domäne und den untergeordneten Domänen des Anwenders an.
    • „falsch“: Zeigt nur Daten an, die der Domäne des aktuellen Datensatzes entsprechen.

    Standardwert: wahr

    Tabelle : 8. Rückgaben
    Typ Beschreibung
    Keine

    Beispiel

    Das folgende Beispiel zeigt, wie Sie den Domänenbereich zwischen der Anwendersitzung und dem erweiterten (Sitzungsbereich) oder reduzierten (Datensatzbereich) Datensatz in einem Arbeitsplatz-Client-Skript einer UI-Aktion umschalten.

    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;
      }
    }
    Das folgende Beispielskript zeigt, wie ein Service Desk-Mitarbeiter bei der Verarbeitung von Datensätzen in Mitarbeiterbereichüberprüfen kann, in welcher Domäne er arbeitet. Die wichtigsten Aktionen dieses Skripts lauten wie folgt:
    • Standardprüfungen: typeof g_aw !=='undefined' stellt sicher, dass das Skript nur in Mitarbeiterbereichausgeführt wird. g_aw.domainScopeProvider prüft, ob die Methode vorhanden ist.
    • Einfache asynchrone Verarbeitung: Verwendet .then(), um das Ergebnis zu verarbeiten, wenn die Domäneninformationen verfügbar sind. Verwendet .catch(), um etwaige Fehler zu behandeln (z. B. wenn beim Abrufen der Domäne ein Fehler auftritt).
    • Anwenderfreundliche Warnung: Zeigt eine Warnung mit dem Domänennamen (alert('Sie arbeiten in der Domäne: ...')) an, die einfach und leicht zu verstehen ist. Wenn keine Domäneninformationen gefunden werden, wird der Benutzer mit „Domäneninformationen sind nicht verfügbar“ benachrichtigt.
    • Fehlerbehandlung: Fehler werden für die grundlegende Problembehandlung mithilfe von Console.error() in der Konsole protokolliert.
    (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);
            });
        }
    })();

    Sie können dieses Skript als „onLoad“-Client-Skript in Mitarbeiterbereichhinzufügen. Wenn ein Agent einen Datensatz öffnet, wird eine Warnung mit dem aktuellen Domänennamen angezeigt.