Scripts d’affectation d’approbation utiles

  • Rversion finale: Washingtondc
  • Mis à jour 1 févr. 2024
  • 5 minutes de lecture
  • Il s’agit d’une version interrogeable 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 l’é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 qui comporte une tâche de catalogue 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 avec une seule tâche

    Type : règle d’affectation

    Description : affecte automatiquement tous les éléments de catalogue ayant 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 : sélectionnez l’utilisateur 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 les règles d’affectation après
    • 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 les règles d’affectation lorsque la catégorie est modifiée

    Type : script client

    Table : Incident

    Description : cet exemple est un script client onChange sur le champ de catégorie dans Incident. Note : ce script est utilisé pour utiliser l’AJAX synchrone (le comportement asynchrone est spécifié par le troisième paramètre de l’appel ajaxRequest). L’implémentation ci-dessous utilise l’AJAX asynchrone. L’inconvénient de l’utilisation de la version synchrone est qu’un problème de réponse réseau pourrait 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 nouvelle 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 avec 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.
    Macros

    Copiez ensuite le script XML en bas de cet article dans la fenêtre de code XML de la nouvelle macro d’interface utilisateur. Il s’agit d’un excellent moyen de donner des détails à un approbateur lorsque vous effectuez des approbations d’éléments de campagne à l’aide de tâches d’approbation dans les plans d’exécution de Service Catalog.

    Différentes manières

    À l’ancienne

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

    Mes anciennes approbations

    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 méthode

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

    Mes approbations

    Cette méthode vous permet d’afficher des détails, tout comme l’approbation de la demande. Vous disposez d’un lien vers l’élément commandé, d’une brève description (qui contient la possibilité de développer les variables de l’article), d’un prix, d’une quantité et du prix total. Cela aide l’approbateur à afficher plus de détails. Ils peuvent maintenant voir ce qu’ils approuvent réellement.