여러 인시던트를 종료하는 UI 작업 만들기

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 소요 시간: 9분
  • UI 작업을 만들어 목록 뷰의 작업 목록에서 여러 인시던트를 한 번에 닫습니다.

    시작하기 전에

    필요한 역할: business_rule_admin(비즈니스 규칙의 경우), ui_action_admin(UI 작업의 경우) 또는 admin

    이 태스크 정보

    작업 목록에서 인시던트를 종료하면 종료한 모든 인시던트에 대해 동일한 종료 메모가 추가되며 이때 list_updater 역할이 필요하지 않습니다. 이 프로세스를 구현하려면 UI 작업 및 사용자 지정 UI 페이지에서 참조하는 스크립트 포함이 필요합니다.

    프로시저

    1. 모두 > 시스템 정의 > 스크립트 포함으로 이동하여 새로 만들기를 클릭합니다.
    2. 다음 정보가 포함된 스크립트 포함을 만듭니다.
      • 이름: IncidentClosure
      • 클라이언트 호출 가능: 확인란 선택
      • 활성화: 확인란 선택
      • 스크립트: 다음 정보를 붙여 넣습니다.
        var IncidentClosure = Class.create();
        IncidentClosure.prototype = Object.extendsObject(AbstractAjaxProcessor, {
            closeIncidents: function() {
                var selectedIncidents = this.getParameter("sysparm_incidents");
                var notes = this.getParameter("sysparm_closeNote");
                var code = this.getParameter("sysparm_closeCode");
                var incidentGr = new GlideRecord('incident');
                incidentGr.addQuery('sys_id', 'IN', selectedIncidents);
                incidentGr.query();
                while (incidentGr.next()) {
                    incidentGr.setValue('state', 7);
                    incidentGr.setValue('close_notes', notes);
                    incidentGr.setValue('close_code', code);    
                    incidentGr.update();
                }
                return true;
            },
            
           type: 'IncidentClosure'
        });
    3. 기록을 저장합니다.
    4. 다음 단계를 만들어 UI 페이지를 만듭니다.
      • 이름: mandatory_fields_to_close_incident_ui
      • HTML: 다음 정보를 붙여 넣습니다.
        <?xml version="1.0" encoding="utf-8" ?>
        <j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
            <style>
                #content_row .reference-label {
                    padding-right: 15px;
                }
        
                #page_timing_div {
                    display: none;
                }
            </style>
            <form class="form-horizontal">
                <div class="form-group">
                    <label class="col-xs-4 control-label">
                        <span style="padding-right: 5px;"></span>
                        <span class="label-text">${gs.getMessage('Resolution code')}</span>
                    </label>
                    <div class="col-xs-5 form-field input_controls" style="line-height: 32px;">
                        <select name="closeCode" id="closeCode">
                            <option value="" selected="SELECTED" role="option">-- None --</option>
                            <option value="Solved (Work Around)" role="option">Solved (Work Around)</option>
                            <option value="Solved (Permanently)" role="option">Solved (Permanently)</option>
                            <option value="Solved Remotely (Work Around)" role="option">Solved Remotely (Work Around)</option>
                            <option value="Solved Remotely (Permanently)" role="option">Solved Remotely (Permanently)</option>
                            <option value="Not Solved (Not Reproducible)" role="option">Not Solved (Not Reproducible)</option>
                            <option value="Not Solved (Too Costly)" role="option">Not Solved (Too Costly)</option>
                            <option value="Closed/Resolved by Caller" role="option">Closed/Resolved by Caller</option>
                        </select>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-xs-4 control-label">
                        <span class="label-text" style="">${gs.getMessage('Resolution Notes')}</span>
                    </label>
                    <div class="col-xs-7 form-field input_controls">
                        <textarea required="true" class="form-control" value="closeNotes" id="closeNotes" type="text"></textarea>
                    </div>
                </div>
                <div class="form-group" style="padding-right:20px;margin-bottom:0;padding-left: 75%; line-height: 45px;">
                    <g:dialog_button id="cancel_button" type="button" style_class="$btn btn-default" onclick="actionCancel()" style="min-width: 5em;">${gs.getMessage('Cancel')}</g:dialog_button>
        
                    <g:dialog_button id="ok_button" type="button" onclick="actionOK()" style_class="btn btn-primary" style="min-width: 5em;">${gs.getMessage('OK')}</g:dialog_button>
                    <div class="clearfix"></div>
                </div>
            </form>
        </j:jelly>
      • 클라이언트 스크립트: 다음 정보를 붙여 넣습니다.
        function actionOK() {
            var modal = GlideModal.prototype.get("mandatory_fields_to_close_incident_ui");
            var incidents = modal.getPreference("selected_incidents");
            if (incidents) {
                //close the incidents
                var glideAjax = new GlideAjax("IncidentClosure");
                glideAjax.addParam("sysparm_name", "closeIncidents");
                glideAjax.addParam("sysparm_incidents", incidents);
                glideAjax.addParam("sysparm_closeCode", $("closeCode").value);
                glideAjax.addParam("sysparm_closeNote", $("closeNotes").value);
                glideAjax.getXMLAnswer(function(answer) {
                    GlideModal.prototype.get("mandatory_fields_to_close_incident_ui").destroy();
                    GlideList2.get('incident').refresh();
                });
            }
        }
        
        function actionCancel() {
            GlideModal.prototype.get("mandatory_fields_to_close_incident_ui").destroy();
        }
        
        (function() {
            var okButton = gel('ok_button');
            var closeCodeEl = gel('closeCode');
            var closeNotesEl = gel('closeNotes');
            okButton.disabled = true;
            closeNotesEl.value = "";
            closeCodeEl.on('change', function() {
                if (closeCodeEl.value !=="" && closeNotesEl.value !=="")
                    okButton.disabled = false;
                else
                    okButton.disabled = true;
            });
            closeNotesEl.on('input', function() {
                if (closeCodeEl.value !=="" && closeNotesEl.value !=="")
                    okButton.disabled = false;
                else
                    okButton.disabled = true;
            });
        })();
    5. 기록을 저장합니다.
    6. 여러 인시던트를 닫기 위한 UI 작업을 만들려면 다음 단계를 완료합니다.
      1. 시스템 정의 > UI 작업으로 이동하여 새로 만들기를 클릭합니다.
      2. 다음 정보를 사용해 UI 작업을 만듭니다.
        • 이름: 인시던트 종료
        • 테이블: 인시던트 [incident]
        • 업데이트 표시: 확인란 선택
        • 목록 선택: 확인란 선택
        • 목록 V2 호환: 확인란 선택
        • 클라이언트: 확인란 선택
        • 클릭 작업: closeincidents ()
        • 조건: current.getValue('state') !== '7'
        • 스크립트: 다음 정보를 붙여 넣습니다.
        function closeIncidents() {
            var list = GlideList2.get('incident');
            var title = list.getTitle();
            var incidents = list.getChecked();
            if (incidents) {
                var o = new GlideModal('mandatory_fields_to_close_incident_ui');
                    getMessage("Close Incidents", function(msg) {
                        o.setTitle(msg);
                        o.setPreference('selected_incidents', incidents);
                        o.render();
                    });
                }
            }
                   
    7. 기록을 저장합니다.

    결과

    서비스 데스크 에이전트는 인시던트 목록의 작업 목록에서 인시던트 종결을 사용해 여러 인시던트를 종결할 수 있습니다.