· 7 years ago · Nov 30, 2018, 01:16 PM
1/* 1. UI Action Button for AskIT incident
2onClick CreateINC()*/
3
4function CreateINC(){
5
6 var gAjx = new GlideAjax("HRCaseManagementFJEMEAAjax");
7 gAjx.addParam("sysparm_name", "CheckIncidentExists");
8 gAjx.addParam("sysparm_askHRNumber",g_form.getValue("number"));
9 gAjx.getXML(ajaxResponse);
10}
11
12function ajaxResponse(response){
13 var result = response.responseXML.getElementsByTagName("result");
14 var incidentExists = result[0].getAttribute("message");
15
16 //Info message displayed on server side if incident already exits.
17 if(incidentExists == "false"){
18
19 /* Add the attachments to JSON object */
20 var grAttach = new GlideRecord("sys_attachment");
21// grAttach.addQuery("table_name", "hr_case");
22// grAttach.addQuery('table_sys_id', g_form.getUniqueValue()); Â
23// grAttach.query();
24// var attachments = [];
25// while (grAttach.next()) {
26// var attachDetails = {};
27// attachDetails.fileName = grAttach.file_name;
28// attachDetails.sysID = grAttach.sys_id;
29// attachments.push(attachDetails);
30// }
31 //g_form.addInfoMessage(JSON.stringify(attachments));
32
33 //Initialize and open the Dialog Window
34 var dialog = new GlideDialogWindow("incident_details_dialog"); //Render the dialog containing the UI Page 'incident_details_dialog'
35 dialog.setTitle("Please describe the nature of the IT Incident"); //Set the dialog title
36 dialog.setSize(750,300);
37 dialog.adjustBodySize();
38 dialog.setPreference("sysid",g_form.getUniqueValue());
39// dialog.setPreference("attachments", JSON.stringify(attachments));
40 dialog.render();//Open the dialog
41 }
42
43}
44
45
46/* 2. UI Pages: incident_details_dialog */
47//HTML XML Coding:
48<?xml version="1.0" encoding="utf-8" ?>
49<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
50<style>p.indent{ padding-left: 3.1em }</style>
51<g:ui_form>
52 <!-- Get values from dialog preferences passed in -->
53
54 <g:evaluate var="jvar_attach" object="true">
55 var grAttach = new GlideRecord("sys_attachment");
56 grAttach.addQuery("table_name", "hr_case");
57 grAttach.addQuery('table_sys_id', RP.getWindowProperties().get('sysid')); Â
58 grAttach.query();
59 grAttach;
60 </g:evaluate>
61
62 <!-- Set up form fields and labels -->
63
64<br/>
65 <table width="100%">
66 <tr id="description_row" valign="top" align="right">
67 <td align="right"><p class="indent"> <b>Short Description</b></p></td>
68 <td align="right">
69 <!-- Short description value used as a label -->
70 <g:ui_input_field name="dial_shortDesc" id="dial_shortDesc" label="Short Description" value="${jvar_comments_text}" mandatory="true" size="92" />
71 </td>
72 </tr>
73
74 <tr>
75 <td colspan="2" align="left">
76 <g:ui_multiline_input_field name="dial_appName" id="dial_appName" label="Please provide the Web address/Application name" value="${jvar_comments_text}" mandatory="true" />
77 </td>
78 </tr>
79 <tr>
80 <td colspan="2" align="left">
81 <g:ui_multiline_input_field name="dial_lastAccessed" id="dial_lastAccessed" label="When was the IT Service in question last accessed?" value="${jvar_comments_text}" mandatory="true" />
82 </td>
83 </tr>
84 <tr>
85 <td colspan="2" align="left">
86 <g:ui_multiline_input_field name="dial_actions" id="dial_actions" label="Actions taken (if any) to resolve?" value="${jvar_comments_text}" mandatory="true" />
87 </td>
88 </tr>
89 <tr>
90 <td colspan="2" align="left">
91 <g:ui_multiline_input_field name="dial_desc" id="dial_desc" label="Description (please provide as much info as you can):" value="${jvar_comments_text}" mandatory="true" />
92 </td>
93 </tr>
94 <tr>
95 <td colspan="2" align="left">
96 <j:if test="${jvar_attach.hasNext()}">
97 <p>Please select which attachments you would like to copy over to the Incident. Ensure you do not copy over any personal sensistive content </p>
98 </j:if>
99
100 <j:while test="${jvar_attach.next()}">
101 <!-- <option value="${jvar_attach.getValue('file_name')}">${jvar_attach.getValue('file_name')}</option> -->
102 <input type="checkbox" id="${jvar_attach.getValue('file_name')}" name="${jvar_attach.getValue('file_name')}" value="${jvar_attach.getValue('file_name')}"> ${jvar_attach.getValue('file_name')}<br></br></input>
103 </j:while>
104
105 </td>
106 </tr>
107
108 <tr id="dialog_buttons">
109 <td colspan="2" align="right">
110 <!-- Pull in 'dialog_buttons_ok_cancel' UI Macro for submit/cancel buttons.
111 'ok' option will call the 'validateComments' Client script function from the UI Page-->
112 <g:dialog_buttons_ok_cancel ok="return validateComments()" ok_type="button" cancel_type="button" />
113 </td>
114 </tr>
115 </table>
116
117</g:ui_form>
118</j:jelly>
119
120//CLIENT SCRIPT CODING
121var gAjx = new GlideAjax("HRCaseManagementFJEMEAAjax");
122
123function validateComments() {
124 //Gets called if the 'OK' dialog button is clicked
125 //Make sure dialog comments are not empty
126 var shortDesc = gel("dial_shortDesc").value;
127 var desc = gel("dial_desc").value;
128 var appName = gel('dial_appName').value;
129 var lastAccessed = gel('dial_lastAccessed').value;
130 var actionsTaken = gel('dial_actions').value;
131
132 shortDesc = trim(shortDesc);
133 desc = trim(desc);
134 appName = trim(appName);
135 lastAccessed = trim(lastAccessed);
136 actionsTaken = trim(actionsTaken);
137
138 if (shortDesc == "" || desc == "") {
139 //If comments are empty stop submission
140 alert("Please provide Short Description and Description comments to submit the incident.");
141 return false;
142 }
143
144 desc = "Web address/Application name: " + appName +'\n' + "Last Accessed by user: " + lastAccessed + '\n' + "Any actions taken to resolve: "
145 + actionsTaken + '\n' + "Description: " + desc;
146
147 //If comments are not empty do this...
148 GlideDialogWindow.get().destroy(); //Closes the dialog window
149
150 gAjx.addParam("sysparm_name", "CreateINCFromHRC");
151 gAjx.addParam("sysparm_askHRNumber",g_form.getValue("number"));
152 gAjx.addParam("sysparm_shortDesc",shortDesc);
153 gAjx.addParam("sysparm_desc",desc);
154 gAjx.addParam("sysparm_endUser",g_form.getValue("opened_for"));
155 passSelectedAttachments();
156 gAjx.getXML(UpdateHRCase);
157}
158
159function passSelectedAttachments(){
160 var grAttach = new GlideRecord("sys_attachment");
161 grAttach.addQuery("table_name", "hr_case");
162 grAttach.addQuery('table_sys_id', g_form.getUniqueValue()); Â
163 grAttach.query();
164 var attachments = [];
165 //For each potential attachment
166 //See if attachment was selected and if it was add to array
167 while (grAttach.next()) {
168 var checkBox = document.getElementById(grAttach.file_name);
169 if (checkBox.checked == true){
170 var attachDetails = {};
171 attachDetails.fileName = grAttach.file_name;
172 attachDetails.sysID = grAttach.sys_id;
173 attachments.push(attachDetails);
174 }
175 }
176 //g_form.addInfoMessage(JSON.stringify(attachments));
177 gAjx.addParam("attachments",JSON.stringify(attachments));
178}
179
180
181
182
183function UpdateHRCase(response){
184 var answer = response.responseXML.documentElement.getAttribute("answer");
185 //location.reload();
186 //setTimeout(function(){ g_form.addInfoMessage("Please <a href = '/incident_list.do'>Click</a>"); }, 3000);
187 //alert(answer);
188 //g_form.addInfoMessage("Please <a href = '/incident_list.do'>Click</a>");
189 //g_form.setValue("comments","TEST COMMENT");
190
191}
192
193
194
195/* 3. Script Includes: HRCaseManagementFJEMEAAjax */
196
197var HRCaseManagementFJEMEAAjax = Class.create();
198HRCaseManagementFJEMEAAjax.prototype = Object.extendsObject(global.AbstractAjaxProcessor,{
199 //initialize: function() {
200 //},
201 CheckIncidentExists: function(){
202 var _finalMessage = '';
203 var _askHRNumber = this.getParameter('sysparm_askHRNumber');
204 var result = this.newItem("result");
205 var grHRC = new GlideRecord("hr_case");
206 //gs.info("test 1: " + _askHRNumber);
207 grHRC.addQuery("number",_askHRNumber);
208 grHRC.query();
209
210 if (grHRC.getRowCount() == 1){
211 while(grHRC.next()){
212 //Check if incident already exists
213 var grIncidentExists = new GlideRecord("incident");
214 grIncidentExists.addQuery("parent", grHRC.sys_id);
215 grIncidentExists.query();
216 if (grIncidentExists.getRowCount() == 1){
217 while(grIncidentExists.next()){
218 var url = 'incident.do?sys_id=' + grIncidentExists.sys_id;
219 _finalMessage="true";
220 result.setAttribute("message","true");
221 result.setAttribute("incidentID", grIncidentExists.number);
222 result.setAttribute("url", url);
223 var message = "Incident " + grIncidentExists.number;
224 gs.addErrorMessage("<a href='" + url + "'>" + message + "</a>" + " already exists for this HR Case");
225 //gs.info("CJT123 test 2 - true match found for" + grHRC.number + " Incident:" + grIncident.number);
226 }
227 }else{
228 _finalMessage="false";
229 result.setAttribute("message","false");
230 //gs.info("CJT123 test 2 - false no match found." + result[0].getAttribute("message"));
231 }
232 }
233 }
234 },
235
236
237 CreateINCFromHRC: function(){
238 var _finalMessage = '';
239 var _askHRNumber = this.getParameter('sysparm_askHRNumber');
240 var _shortDesc = this.getParameter('sysparm_shortDesc');
241 var _desc = this.getParameter('sysparm_desc');
242 var _endUser = this.getParameter('sysparm_endUser');
243 var _stringAttachments = this.getParameter('attachments');
244 var _criticality = '3'; //3 - Medium impact function
245 var _assignmentGroup = '705265770f6bc200c626f68ce1050e21'; //FJInt-FJ-7799 ServiceDesk
246 var _hrState = 6; //6 - Resolved
247
248
249 /* Get Original HRC which needs link to incident and comment added */
250 var grHRC = new GlideRecord("hr_case");
251 grHRC.addQuery("number",_askHRNumber);
252 grHRC.query();
253
254 if (grHRC.getRowCount() == 1){
255 while(grHRC.next()){
256 /* Create new Incident and populate fields
257 NOTE parent_incident = HRC REF assignment not possible as parent_incdient ref field doesn't list HRCXXX's */
258 var grIncident = new GlideRecord("incident");
259 grIncident.initialize();
260 grIncident.short_description = "IT issue raised from HR Case: " + _shortDesc;
261 grIncident.description = _desc;
262 grIncident.caller_id = _endUser;
263 grIncident.assignment_group = _assignmentGroup;
264 grIncident.u_number_of_users = 'Single user';
265 grIncident.u_criticality = _criticality;
266 grIncident.parent = grHRC.sys_id;
267 var incidentID = grIncident.insert();
268
269 var attachmentsObj = JSON.parse(_stringAttachments);
270 for(var i=0; i<attachmentsObj.length; i++){
271 var sysAttRef = new GlideRecord("sys_attachment");
272 sysAttRef.query('table_sys_id',grHRC.sys_id);
273 sysAttRef.query('file_name',attachmentsObj[i].fileName);
274 sysAttRef.query();
275 while (sysAttRef.next()) {
276 var glideSysAttachmentRef = new GlideSysAttachment();
277 var guid = "";
278 guid = glideSysAttachmentRef.writeContentStream(grIncident, sysAttRef.getValue("file_name"), sysAttRef.getValue("content_type"), glideSysAttachmentRef.getContentStream(sysAttRef.getUniqueValue()));
279 }
280
281 }
282
283 grHRC.state = _hrState;
284 grHRC.u_resolution_summary = "IT Issue: HR Case closed and new AskIT Incident with number: " + grIncident.number + " raised. Employee can access incident from AskIT --> My Calls.";
285 //grHRC.comments = "IT Issue: HR Case closed and new AskIT Incident with number: " + grIncident.number + " raised. Employee can access incident from AskIT --> My Calls.";
286 //Hyperlink in Comments - security setting to improve our security score currently blocks this
287 //var url1 = 'task.do?sys_id=' + grIncident.sys_id;
288 //var msg = "test";
289 //grHRC.comments = "[code]<a href='" + url1 + "'>" + msg + "</a>[/code]";
290 //grHRC.setWorkflow(false);
291
292 grHRC.parent = grIncident.sys_id;
293 grHRC.update();
294
295 if(incidentID.nil()){
296 _finalMessage = 'Could not create incident.';
297 }else{
298 _finalMessage = 'AskIT Incident ' + grIncident.number + ' successfully created' ;
299 }
300 var url = 'incident.do?sys_id=' + grIncident.sys_id;
301 gs.addInfoMessage("<a href='" + url + "'>" + _finalMessage + "</a>" + ". HR Case changed to resolved");
302
303
304 }
305 }
306
307 return _finalMessage;
308
309 },