Nützliche Genehmigungs- und Zuweisungsskripts

  • Freigeben Version: Xanadu
  • Aktualisiert 1. August 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: Geschäftsregel.

    Beschreibung: Füllen Sie das Feld „Zugewiesen an“ basierend auf dem Zuweisungsgruppenmitglied aus, das die geringste Anzahl aktiver Incidents aufweist.

    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.
    Makroliste mit hervorgehobenen Elementen „approval_summarizer_sc_task“ und „approval_summarizer_sc_task_old“.

    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 unter „ Meine Genehmigungen “ angezeigt wird, wenn Sie eine Genehmigungsaufgabe mit der alten Methode verwenden.

    Meine Genehmigungsinformationen werden in der alten Methode angezeigt.

    Beachten Sie, dass dem Genehmiger nicht viele Details darüber mitgeteilt werden, was er tatsächlich genehmigt. Sie können die Kurzbeschreibung der Aufgabe sehen, aber nicht viele Informationen über das Element.

    Neue Methode

    Dies ist die Ansicht, die angezeigt wird, wenn Sie das folgende XML-Skript anstelle des sofort einsatzbereiten UI-Makros verwenden.

    Meine Genehmigungsinformationen werden in der neuen Methode angezeigt.

    Mit dieser Methode können Sie Details anzeigen, ähnlich wie die Anforderungsgenehmigung. 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. Diese Methode hilft dem Genehmiger, indem sie mehr Details anzeigt. Der Genehmiger kann jetzt sehen, was er tatsächlich genehmigt.