Scripts d’affectation d’approbation utiles

  • Rversion finale: Yokohama
  • Mis à jour 30 janv. 2025
  • 5 minutes de lecture
  • Il s’agit d’une version consultable des scripts d’approbation et d’affectation utiles.

    Avertissement :
    La personnalisation décrite ici a été développée pour une utilisation dans des instances spécifiques, et n'est pas prise en charge par Now Support. Cette méthode est fournie telle quelle et doit être testée rigoureusement avant d'être implémentée. Publiez toutes les questions et commentaires concernant cette personnalisation dans notre forum communautaire.

    Pour une version facile à naviguer, visitez le portail Scripts utiles.

    Affecter un groupe pour les demandes ESS

    Type : règle d’affectation.

    Description : ce script affecte automatiquement un groupe pour toutes les demandes ESS.

    Exemple de script :

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

    Affecter un élément de catalogue au groupe en fonction de la tâche du plan d’exécution

    Type : règle d’affectation.

    Description : cette règle d’affectation affecte un élément de catalogue de services au groupe de base de données s’il utilise un plan d’exécution dont une tâche de catalogue est affectée au groupe de bureau.
    //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;}}}

    Affecter des éléments à une seule tâche

    Type : règle d’affectation.

    Description : Affecte automatiquement tous les éléments de catalogue avec une seule tâche associée à un groupe particulier.
    //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;}}}

    Affectation basée sur la charge de travail

    Type : règle métier.

    Description : renseignez le champ Affecté à en fonction du membre du groupe d’affectation qui a le moins d’incidents actifs.

    Paramètres :
    • Ordre : 1 000 > si vous souhaitez exécuter après les règles d’affectation
    • condition : current.assigned_to == '' && current.assignment_group != ''
    • Quand : avant, insérer/mettre à jour
    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();}

    Exécuter des règles d’affectation lorsque la catégorie est modifiée

    Type : Script client.

    Table : Incident.

    Description : cet exemple est un script client onChange dans le champ Catégorie dans Incident. Remarque : ce script est utilisé pour utiliser AJAX synchrone (le comportement asynchrone est spécifié par le troisième paramètre de l’appel ajaxRequest). L’implémentation ci-dessous utilise AJAX asynchrone. L’inconvénient de l’utilisation de la version synchrone est qu’un problème de réponse réseau peut entraîner le blocage du navigateur.
    // 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','','');}}}

    Macro d’interface utilisateur d’approbation personnalisée

    Type : macro d’interface utilisateur.

    L’option suivante illustre comment obtenir plus de détails à partir de la vue Mes approbations d’un plan d’exécution en créant une macro d’interface utilisateur.
    • Accédez à l’interface utilisateur du système et cliquez sur Macros d’interface utilisateur.
    • Renommez le « approval_summarizer_sc_task » existant en quelque chose comme « approval_summarizer_sc_task_old » et désactivez-le.
    • Créez-en un nouveau en utilisant le même nom (« approval_summarizer_sc_task »). Le nom doit essentiellement vous indiquer ce que fait la macro et à quoi elle s’applique. Dans ce cas, nous remplaçons un nom existant, nous avons donc décidé de réutiliser le nom existant.
    Figure 1. Liste des macros
    Liste des macros avec « approval_summarizer_sc_task » et « approval_summarizer_sc_task_old » en surbrillance.

    Copiez ensuite le script XML au bas de cet article dans la fenêtre de code XML dans la nouvelle macro d’interface utilisateur. C’est un excellent moyen de donner des détails à un approbateur lorsque vous procédez à des approbations d’éléments de campagne à l’aide de tâches d’approbation dans les plans d’exécution de Catalogue de services.

    Différentes façons

    Ancienne méthode

    Il s’agit de la vue que vous voyez dans Mes approbations lors de l’utilisation d’une tâche d’approbation à l’aide de l’ancienne méthode.

    Figure 2. Mes approbations
    Mes informations d’approbations affichées dans l’ancienne méthode.

    Notez qu’il n’y a pas beaucoup de détails indiquant à l’approbateur ce qu’il approuve réellement. Vous pouvez voir la brève description de la tâche, mais pas beaucoup d’informations sur l’élément.

    Nouvelle façon

    Il s’agit de la vue que vous voyez si vous utilisez le script xml ci-dessous à la place de la macro d’interface utilisateur prête à l’emploi.

    Figure 3. Mes approbations
    Mes informations d’approbations affichées dans la nouvelle méthode.

    L’utilisation de cette méthode vous permet de voir les détails, tout comme l’approbation de la demande. Vous disposez d’un lien vers l’article commandé, d’une brève description (qui contient la possibilité de développer les variables à partir de l’article), du prix, de la quantité et du prix total. Cette méthode aide l’approbateur en montrant plus de détails. L’approbateur peut maintenant voir ce qu’il approuve réellement.