Atualizar estados de solicitação de mudança

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 2 min. de leitura
  • Se você fez upgrade de uma versão anterior à Genebra, deverá atualizar os rótulos de estado antigos para os novos depois de ativar o Gestão de mudanças - State Model.

    Antes de Iniciar

    Função necessária: administrador

    Por Que e Quando Desempenhar Esta Tarefa

    Os valores de estado dos registros de mudança atuais não são modificados quando você ativa o Gestão de mudanças - State Model. No entanto, seus registros de mudança atuais exibem os novos rótulos de estado no campo de estado.

    Valor do estado Novo rótulo de estado Rótulo de estado antigo
    -5 Novo Pendente
    -4 Avaliar (Não usado)
    -3 Autorizar (Não usado)
    -2 Programado (Não usado)
    -1 Implementar (Não usado)
    0 Revisar (Não usado)
    1 (Não usado) Em aberto
    2 (Não usado) Trabalho em andamento
    3 Encerrado Encerrado concluído
    4 Cancelado Encerrado incompleto
    7 (Não usado) Encerrado Ignorado

    Por exemplo, registros com um valor de estado de -5 têm o rótulo de estado Pendente antes que o modelo de estado de Gerenciamento de Mudanças seja ativado. Depois que o modelo de estado for ativado, esses registros manterão o valor de estado -5, mas terão o rótulo Novo. Para usar o processo de gerenciamento de mudanças da sua organização com o modelo de estado, você deve atualizar os valores de estado para os novos rótulos nos registros de mudança existentes conforme apropriado, manualmente ou por script.

    Você também deve atualizar todos os relatórios que executam consultas com base em rótulos de estado antigos para refletir os novos rótulos de estado.

    Procedimento

    1. Para atualizar automaticamente os valores de campos de estado de rótulos de estado antigos para novos rótulos de estado, personalize e execute o seguinte script de exemplo:
      updateStates();
      
      function updateStates() {
      
        function hasApprovers(changeGr) {
          var approverGr = new GlideRecord("sysapproval_approver");
          approverGr.addQuery('sysapproval', changeGr.getUniqueValue());
          approverGr.query();
          return approverGr.getRowCount() > 0;
        }
      
        function hasRunningWorkflows(changeGr) {
          var workflow = new Workflow();
          var workflowGr = workflow.getRunningFlows(changeGr);
          var hasRunningFlows = workflowGr.getRowCount() > 0;
          return hasRunningFlows;
        }
      
        // Old State Model
        var PENDING = '-5';
        var OPEN = '1';
        var CLOSED_COMPLETE = '3';
        var CLOSED_INCOMPLETE = '4';
        var CLOSED_SKIPPED = '7';
      
        // New State Model
        var NEW = '-5';
        var ASSESS = '-4';
        var AUTHORIZE = '-3';
        var SCHEDULED = '-2';
        var IMPLEMENT = '-1';
        var REVIEW = '0';
        var CLOSED = '3';
        var CANCELLED = '4';
      
        // Find all change requests
        var record = new GlideRecord('change_request');
        record.query();
      
        // Update state from old value to new value
        while (record.next()) {
          switch(record.getValue('state')) {
            case OPEN:
              if (!hasRunningWorkflows(record) && !hasApprovers(record))
                record.state = NEW;
              break;
            case CLOSED_COMPLETE:
              record.state = CLOSED;
              record.close_code = "successful";
              break;
            case CLOSED_SKIPPED:
              record.state = CANCELLED;
              record.close_code = "unsuccessful";
              break;
            case CLOSED_INCOMPLETE:
              record.state = CLOSED;
              record.close_code = "successful_issues";
              break;
          }
          record.autoSysFields(false);
          record.setWorkflow(false);
          record.update();
        }
      
      }
      
    2. Verifique se os rótulos de estado foram alterados nos registros de solicitação de mudança existentes.