Nützliche Genehmigungs- und Zuweisungsskripts

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 4 Minuten Lesedauer
  • Dies ist eine durchsuchbare Version der nützlichen Genehmigungs- und Zuweisungsskripts.

    Warnung:
    Die hier beschriebene Anpassung wurde für die Verwendung in bestimmten Fällen entwickelt und wird von Now Support nicht unterstützt. Diese Methode wird wie sie ist zur Verfügung gestellt und sollte vor der Implementierung gründlich getestet werden. Veröffentlichen Sie alle Fragen und Kommentare zu dieser Anpassung in unserem Community-Forum.

    Eine Version, in der Sie problemlos navigieren können, finden Sie im Portal für nützliche Skripts.

    Gruppe für ESS-Anforderungen zuweisen

    Typ: Zuweisungsregel

    Beschreibung: Dieses Skript weist automatisch eine Gruppe für alle ESS-Anforderungen zu.

    Skriptbeispiel:

    if(current.opened_by.roles==""){
        current.assignment_group.setDisplayValue('Network');
        current.update();}

    Einer Gruppe basierend auf einer Bereitstellungsplanaufgabe ein Katalogelement zuweisen

    Typ: Zuweisungsregel

    Beschreibung: Diese Zuweisungsregel weist der Datenbankgruppe ein Servicekatalogelement zu, wenn ein Bereitstellungsplan verwendet wird, in dem der Desktopgruppe eine Katalogaufgabe zugewiesen ist.
    //Return catalog items that have no group but do have a delivery plan assigned
    var ri =new GlideRecord("sc_cat_item");
    ri.addQuery("group","=",null);
    ri.addQuery("delivery_plan","!=",null);
    ri.query();
    while(ri.next()){
        gs.log("Found an item");
        //Return tasks that point to the same delivery plan as the above item
        var dptask =new GlideRecord("sc_cat_item_delivery_task");
        dptask.addQuery("delivery_plan","=",ri.delivery_plan);
        dptask.query();while(dptask.next()){
            gs.log("Found a task");var gp = dptask.group.getDisplayValue();
            gs.log(gp);//If the task is assigned to desktop, assign the item's group to desktop
            if(dptask.group.getDisplayValue()=="Desktop"){
                ri.group.setDisplayValue("Desktop");
                gs.log("updating "+ ri.getDisplayValue());
                ri.update();break;}}}

    Elemente mit einer Aufgabe zuweisen

    Typ: Zuweisungsregel

    Beschreibung: Weist alle Katalogelemente, denen nur eine Aufgabe zugeordnet ist, automatisch einer bestimmten Gruppe zu.
    //Get the catalog item for the current requested item
    var scCatItem =new GlideRecord("sc_cat_item");
    if(scCatItem.get('sys_id', current.cat_item)){
    // If the catalog item already has an assignment group or if using workflow we don't need to make an assignment
      if(!scCatItem.delivery_plan.nil()&& scCatItem.group.nil()){
            var dpTask =new GlideRecord("sc_cat_item_delivery_task");
            dpTask.addQuery("delivery_plan","=",scCatItem.delivery_plan);
            dpTask.query();
            if(dpTask.getRowCount()==1&& dpTask.next()){
            // Check that there is only 1 record in the GlideRecord
                dpTask.group;}}}

    Zuweisung auf Basis der Auslastung

    Typ: Business Rule

    Beschreibung: Füllt das Feld „Zugewiesen an“ basierend auf dem Zuweisungsgruppenmitglied mit der geringsten Anzahl aktiver Incidents.

    Parameter:
    • Bestellung: > 1.000, wenn Sie nach Zuweisungsregeln ausführen möchten
    • Bedingung: current.assigned_to == '' && current.assignment_group != ''
    • Wann: vor Einfügen/Aktualisieren
    var assignTo = getLowestUser();
    gs.addInfoMessage("assigning to is "+ assignTo);
    current.assigned_to= assignTo;
     
    function getLowestUser(){
      var userList =new Array();
      var cg =new GlideRecord('sys_user_grmember');
      cg.addQuery('group', current.assignment_group);
      cg.query();
      while(cg.next()){
        var tech = cg.user.toString();
        var cnt = countTickets(tech);
        gs.addInfoMessage("Tech counts "+ cg.user.name+' '+ cnt +" "+ tech);
        userList.push({ sys_id: tech,name: cg.user.name, count: cnt });}
    
      for(var i=0; i < userList.length; i++){
        gs.addInfoMessage(userList[i].sys_id+" "+ userList[i].name+" "+ userList[i].count);}
      userList.sort(function(a, b){
        gs.addInfoMessage("Sorting: "+ a.sys_id+"("+ a.count+");
        "+ b.sys_id+"("+ b.count+")");
        return a.count- b.count;});
    
      if(userList.length<=0)return"";
      return userList[0].sys_id;}
     
    function countTickets(tech){
      var ct =new GlideRecord('incident');
      ct.addQuery('assigned_to',tech);
      ct.addQuery('active',true);
      ct.query();
      return ct.getRowCount();}

    Zuweisungsregeln bei Kategorieänderung ausführen

    Typ: Client-Skript

    Tabelle: Incident

    Beschreibung: Bei diesem Beispiel handelt es sich um ein onChange-Client-Skript für das Kategoriefeld im Incident. Hinweis: Dieses Skript verwendete früher synchrones AJAX (asynchrones Verhalten wird durch den dritten Parameter des ajaxRequest-Aufrufs angegeben). Die folgende Implementierung verwendet asynchrones AJAX. Der Nachteil der Verwendung der synchronen Version besteht darin, dass ein Netzwerkantwortproblem zu einem Absturz des Browsers führen kann.
    // Make an AJAX request to the server to get who this incident would be
    // assigned to given the current values in the record. This runs the assignment 
    // rules thathave been defined in System Policy and returns the assigned_to and 
    // the assignment_group
     
    function onChange(control, oldValue, newValue, isLoading){
      if(isLoading){return;
      // No change, do not do anything
      }
    
       // Construct the URL to ask the server for the assignment
      var url ="xmlhttp.do?sysparm_processor=AJAXAssignment&sys_target=incident";
      var uv = gel('sys_uniqueValue');
      if(uv){
            url +="&sys_uniqueValue="+ uv.value;}
      // Make the AJAX request to the server and get the response
      var serial = g_form.serialize();
      // get all values currently assigned to the incident
      var response = ajaxRequest(url, serial,true, responseFunc);}
     
    // This callback function handles the AJAX response.
    function responseFunc(response){
      varitem= response.responseXML.getElementsByTagName("item")[0];
      // Process the item returned by the server
      if(item){
      // Get the assigned_to ID and its display value and put them on the form
        varname=item.getAttribute("name");
        var name_label =item.getAttribute("name_label");
        if(name_label &&name){
          g_form.setValue('assigned_to',name, name_label);}
        else{
          g_form.setValue('assigned_to','','');}
        // Get the assignment_group ID and its display value and put then on the form
        var group =item.getAttribute("group");
        var group_label =item.getAttribute("group_label");
        if(group_label && group){
          g_form.setValue('assignment_group', group, group_label);}
        else{
          g_form.setValue('assignment_group','','');}}}

    Benutzerdefiniertes Genehmigungs-UI-Makro

    Typ: UI-Makro

    Das folgende Beispiel veranschaulicht, wie Sie durch Erstellen eines neuen UI-Makros mehr Details aus der Ansicht Meine Genehmigungen eines Ausführungsplans abrufen können.
    • Navigieren Sie zu System-UI, und klicken Sie auf UI-Makros.
    • Benennen Sie das vorhandene Makro „approval_summarizer_sc_task“ um, z. B. in „approval_summarizer_sc_task_old“, und deaktivieren Sie es.
    • Erstellen Sie ein neues Makro mit demselben Namen (approval_summarizer_sc_task). Der Name sollte im Wesentlichen aussagen, welche Funktion das Makro hat und für was es gilt. In diesem Fall ersetzen wir ein vorhandenes Makro, daher haben wir uns dafür entschieden, den vorhandenen Namen wiederzuverwenden.
    Makros

    Kopieren Sie dann das XML-Skript am Ende dieses Artikels in das XML-Codefenster im neuen UI-Makro. Dies ist eine großartige Möglichkeit, einem Genehmiger einige Details zu geben, wenn Sie Einzelpostengenehmigungen über Genehmigungsaufgaben in den Servicekatalog-Ausführungsplänen durchführen.

    Verschiedene Methoden

    Alte Methode

    Dies ist die Ansicht, die Sie in Meine Genehmigungen sehen, wenn Sie eine Genehmigungsaufgabe über die alte Methode verwenden.

    Meine Genehmigungen alt

    Beachten Sie, dass dem Genehmiger nur wenige Details darüber zur Verfügung stehen, was er eigentlich genehmigt. Sie können die Kurzbeschreibung der Aufgabe sehen, erhalten aber nicht viele Informationen zum Element.

    Neue Methode

    Dies ist die Ansicht, die Sie sehen, wenn Sie das XML-Skript unten anstelle des vordefinierten UI-Makros verwenden.

    Meine Freigaben

    Mit dieser Methode können Sie Details wie die Anforderungsgenehmigung sehen. Es stehen ein Link zum bestellten Artikel, eine Kurzbeschreibung (die die Möglichkeit enthält, die Variablen des Artikels zu erweitern), Preis, Menge und Gesamtpreis zur Verfügung. Dies hilft dem Genehmiger, da mehr Details angezeigt werden. Die Genehmiger können jetzt sehen, was sie eigentlich genehmigen.