Scripts de atribuição de aprovação úteis

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 5 min. de leitura
  • Esta é uma versão pesquisável dos scripts úteis de aprovação e atribuição.

    Aviso:
    A personalização descrita aqui foi desenvolvida para uso em instâncias específicas e não é compatível com Now Support. Este método é fornecido no estado em que se encontra e deve ser testado cuidadosamente antes da implementação. Publique todas as perguntas e comentários sobre esta personalização no fórum da nossa comunidade.

    Para obter uma versão fácil de navegar, visite o portal Scripts úteis.

    Atribuir um grupo para solicitações de ESS

    Tipo: regra de atribuição.

    Descrição: este script atribui automaticamente um grupo para todas as solicitações ESS.

    Exemplo de script:

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

    Atribuir item do catálogo ao grupo com base na tarefa do plano de entrega

    Tipo: regra de atribuição.

    Descrição: esta regra de atribuição atribuirá um item do catálogo de serviços ao grupo do banco de dados se ele usar um plano de entrega que tenha uma tarefa de catálogo atribuída ao grupo da área de trabalho.
    //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;}}}

    Atribuir itens a uma tarefa

    Tipo: regra de atribuição.

    Descrição: atribui automaticamente todos os itens do catálogo com apenas uma tarefa associada a um grupo específico.
    //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;}}}

    Atribuição com base na carga de trabalho

    Tipo: regra de negócio.

    Descrição: preencha o atribuído a com base no membro do grupo de atribuição que tem a menor quantidade de incidentes ativos.

    Parâmetros:
    • pedido: > 1000 se você quiser executar regras de atribuição posteriores
    • condição: current.assigned_to == '' && current.assignment_group != ''
    • quando: antes, inserir/atualizar
    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();}

    Executar regras de atribuição quando a categoria for alterada

    Tipo: client script.

    Tabela: Incidente.

    Descrição: este exemplo é um client script onChange no campo de categoria em Incidente. Observação: este script costumava usar AJAX síncrono (o comportamento assíncrono é especificado pelo terceiro parâmetro da chamada ajaxRequest). A implementação abaixo usa AJAX assíncrono. A deficiência de usar a versão síncrona é que um problema de resposta da rede pode fazer com que o navegador trave.
    // 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 de IU de aprovação personalizada

    Tipo: macro de IU.

    A opção a seguir ilustra como obter mais detalhes da exibição Minhas aprovações de um plano de execução criando uma nova Macro de IU.
    • Navegue até IU do sistema e clique em Macros de IU.
    • Renomeie o "approval_summarizer_sc_task" existente para algo como "approval_summarizer_sc_task_old" e desative-o.
    • Crie um novo usando o mesmo nome ("approval_summarizer_sc_task"). O nome deve informar basicamente o que a macro faz e a que ela se aplica. Nesse caso, estamos substituindo um nome existente. Por isso, resolvemos reutilizar o nome existente.
    Figura 1. Lista de macros
    Lista de macros com "approval_summarizer_sc_task" e "approval_summarizer_sc_task_old" realçados.

    Em seguida, copie o script xml na parte inferior deste artigo para a janela de código xml na nova Macro de IU. Essa é uma ótima maneira de fornecer detalhes a um aprovador ao fazer aprovações de itens de linha usando tarefas de aprovação nos Planos de execução do Catálogo de serviços.

    Maneiras diferentes

    Maneira antiga

    Esta é a exibição que você vê em Minhas aprovações ao usar uma tarefa de aprovação usando o método antigo.

    Figura 2. Minhas Aprovações
    Minhas informações de aprovações mostradas no método antigo.

    Observe que não há muitos detalhes informando ao aprovador o que ele está realmente aprovando. Você pode ver a descrição resumida da tarefa, mas não muitas informações sobre o item.

    Nova maneira

    Esta é a exibição que você verá se usar o script xml abaixo no lugar da Macro de IU OOB (pronto para uso).

    Figura 3. Minhas Aprovações
    Minhas informações de aprovações mostradas no novo método.

    O uso deste método permite que você veja detalhes semelhantes à aprovação da solicitação. Você tem um link para o item solicitado, uma descrição resumida (que contém a capacidade de expandir as variáveis do item), preço, quantidade e o preço total. Este método ajuda o aprovador a mostrar mais detalhes. O aprovador agora pode ver o que está realmente aprovando.