変更要求の状況の更新

  • リリースバージョン: Yokohama
  • 更新日 2025年01月30日
  • 所要時間:3分
  • Geneva より前のリリースからアップグレードした場合は、 [変更管理状況モデル] をアクティブ化した後、古いステータス ラベルを新しいステータス ラベルに更新する必要があります。

    始める前に

    必要なロール:admin

    このタスクについて

    [変更管理状況モデル] をアクティブ化しても、現在の変更レコードのステータス値は変更されません。ただし、現在の変更レコードの新しいステータス ラベルが [ステータス] フィールドに表示されます。

    ステータス値 新しいステータス ラベル 古いステータス ラベル
    -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. 既存の変更要求レコードでステータス ラベルが変更されていることを確認します。