변경 요청 상태 업데이트

  • 릴리스 버전: Yokohama
  • 업데이트 날짜 2025년 01월 30일
  • 읽기3분
  • Geneva 이전 릴리스에서 업그레이드한 경우에는 변경 관리를 활성화한 후에 이전 상태 레이블을 새 상태 레이블로 업데이트해야 합니다.

    시작하기 전에

    필요한 역할: 관리자

    이 태스크 정보

    변경 관리 상태 모델을 활성화하면 현재 변경 기록의 상태 값이 수정되지 않습니다. 그러나 현재 변경 기록의 상태 필드에는 새 상태 레이블이 표시됩니다.

    상태 값 새 상태 레이블 이전 상태 레이블
    -5 신규 보류 중
    -4 평가 (사용되지 않음)
    -3 승인 (사용되지 않음)
    -2 예약됨 (사용되지 않음)
    -1 구현 (사용되지 않음)
    0 검토 (사용되지 않음)
    1 (사용되지 않음) 오픈
    2 (사용되지 않음) 진행 중
    3 종결 완료 종결
    4 취소됨 미완료 종결
    7 (사용되지 않음) 건너뛴 채 종결

    예를 들어, 상태 값이 -5인 기록에는 변경 관리 상태 모델이 활성화되기 전에 보류 중 상태 레이블이 있습니다. 상태 모델이 활성화되면 이러한 기록은 -5의 상태 값을 유지하면서 신규 레이블을 포함합니다. 조직에서 요구하는 변경 관리 프로세스를 상태 모델과 함께 사용하려면 수동으로 또는 스크립트를 통해 상태 값을 기존 변경 기록의 새 레이블에 적절히 업데이트해야 합니다.

    또한 이전 상태 레이블을 기반으로 쿼리를 실행하는 모든 보고서를 업데이트하여 새 상태 레이블을 반영해야 합니다.

    프로시저

    1. 상태 필드 값을 이전 상태 레이블에서 신규 상태 레이블로 자동으로 업데이트하려면 다음 예시 스크립트를 사용자 지정한 후 실행합니다.
      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. 기존 변경 요청 기록에서 상태 레이블이 변경되었는지 확인합니다.