Wiki source code of 18 某公司方案设计说明书问题管理模块设计
Version 35.1 by superadmin on 2024/10/13, 16:57
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | [[返回本章节索引>>http://itil4hub.cn/bin/view/G%20%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/ITIL%E5%AE%9E%E6%96%BD%E9%A1%B9%E7%9B%AE%E8%B5%84%E6%96%99/ITIL%E5%AE%9E%E6%96%BD%E9%A1%B9%E7%9B%AE%E6%B5%81%E7%A8%8B%E8%AE%BE%E8%AE%A1%E6%96%B9%E6%A1%88%E9%9B%86/%E9%97%AE%E9%A2%98%E7%AE%A1%E7%90%86/]] [[阅读下一章>>http://itil4hub.cn/bin/view/G%20%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99/ITIL%E5%AE%9E%E6%96%BD%E9%A1%B9%E7%9B%AE%E8%B5%84%E6%96%99/ITIL%E5%AE%9E%E6%96%BD%E9%A1%B9%E7%9B%AE%E6%B5%81%E7%A8%8B%E8%AE%BE%E8%AE%A1%E6%96%B9%E6%A1%88%E9%9B%86/%E9%97%AE%E9%A2%98%E7%AE%A1%E7%90%86/19%20%E6%9F%90%E4%BF%A1%E6%81%AF%E5%8C%96%E4%B8%AD%E5%BF%83%E8%BF%90%E7%BB%B4%E6%9C%8D%E5%8A%A1%E9%97%AE%E9%A2%98%E7%AE%A1%E7%90%86%E7%A8%8B%E5%BA%8F/]] | ||
2 | |||
3 | |||
4 | **文档信息** | ||
5 | |||
6 | [[image:1728803823948-232.png]] | ||
7 | |||
8 | |||
9 | **版本历史** | ||
10 | |||
11 | [[image:1728803862626-671.png]] | ||
12 | |||
13 | |||
14 | = **1.设计概要** = | ||
15 | |||
16 | |||
17 | 问题管理流程的根本目的是消除或减少生产环境中事件发生的数量和严重程度,从而为企业建立一个稳定的IT环境,提高IT服务的可用性。此流程对发生在生产环境中的问题进行管理,找出产生这些问题的根本原因,然后根据需要通过变更请求(RFC)、变通方法或建议的预防性措施来防止事件的再次发生。 | ||
18 | |||
19 | 问题管理流程着重于消除事件或减少事件发生,确定事件的根本原因。主要活动包括分析事件、找出问题、分派问题、确定根本原因以及找出解决方案、回顾及关闭,以消除事件或在其发生时降低对用户或业务的影响。 | ||
20 | |||
21 | |||
22 | = **2.总体方案** = | ||
23 | |||
24 | [[image:1728803903848-811.png]] | ||
25 | |||
26 | |||
27 | 问题管理概要流程描述如下: | ||
28 | |||
29 | |**序号**|(% style="width:146px" %)**步骤名称**|(% style="width:163px" %)**责任人**|(% style="width:752px" %)**说明** | ||
30 | |200.1|(% style="width:146px" %)问题确定与记录|(% style="width:163px" %)问题处理专家/问题经理|(% style="width:752px" %)((( | ||
31 | 1. 对事件研究、维护提出以及分析发现的潜在问题,在系统中进行记录,并对问题信息进行描述 | ||
32 | 1. 问题处理专家创建的问题,如果需要,应提交给问题经理确认;否则应抄送问题经理备案 | ||
33 | 1. 问题经理创建的问题,可与200.2环节合并,直接分派给问题处理专家 | ||
34 | ))) | ||
35 | |200.2|(% style="width:146px" %)问题确认与分派|(% style="width:163px" %)问题处理专家/问题经理|(% style="width:752px" %)((( | ||
36 | 1. 问题处理专家提交上来的问题,问题经理应对其进行审核确认,确定问题是否需要继续处理。如果问题确认无效,则关闭问题,并通知请求者 | ||
37 | 1. 问题经理创建或审核的问题,分派给相应问题处理专家;问题处理专家创建的问题,可以自行处理或分派给现场厂商 | ||
38 | ))) | ||
39 | |200.3|(% style="width:146px" %)分析并诊断问题/提供变通方法|(% style="width:163px" %)((( | ||
40 | 问题处理专家/ | ||
41 | |||
42 | 厂商 | ||
43 | )))|(% style="width:752px" %)((( | ||
44 | 1. 问题处理专家/厂商接受问题,更新问题状态及实际开始诊断时间 | ||
45 | 1. 如需其他问题处理专家协助分析、诊断,则通知问题经理,由问题经理协调资源,成立问题分析小组,举行问题根本原因分析研讨会议,并确定问题的潜在原因,提供或更新问题变通方法,以降低问题在根本解决前对业务产生的影响 | ||
46 | 1. 将问题产生根本原因及变通方法及时更新到问题记录中 | ||
47 | 1. 将问题根本原因及变通方法通知问题经理 | ||
48 | 1. 如果预计无法找到问题的根本原因,及时通报问题经理 | ||
49 | ))) | ||
50 | |200.4|(% style="width:146px" %)开发、确认、实施解决方案|(% style="width:163px" %)((( | ||
51 | 问题处理专家/ | ||
52 | |||
53 | 厂商 | ||
54 | )))|(% style="width:752px" %)((( | ||
55 | 1. 问题处理专家或厂商推荐并测试根本性解决方案,并确保这些方案彻底解决问题,更新问题记录中的实际诊断结束时间 | ||
56 | 1. 问题处理专家判断实施上述解决方案/变通方法是否需要通过其他流程(如变更流程等) | ||
57 | 1*. 如需要,提交到相应的流程,并和该流程人员保持沟通,了解问题的解决状况 | ||
58 | 1*. 如不需要变更,计划并组织实施解决方案以解决问题 | ||
59 | 1. 如果需要第三方介入,则问题处理专家负责与第三方的接口与协调 | ||
60 | 1. 如果问题处理专家预计在无法找到根本解决方案或虽有解决方案但目前无法实施(如实施的代价太大),通报问题经理 | ||
61 | ))) | ||
62 | |200.5|(% style="width:146px" %)问题监控|(% style="width:163px" %)((( | ||
63 | 问题经理/ | ||
64 | |||
65 | 问题处理专家 | ||
66 | )))|(% style="width:752px" %)((( | ||
67 | 问题经理和问题处理专家负责问题分析、诊断、解决过程中的跟踪和监控: | ||
68 | |||
69 | 1. 在问题找到根本原因或解决方案之后,根据需要,向服务台或问题请求人员通报该问题的解决情况,以帮助和提高事件的解决率 | ||
70 | 1. 对于问题处理专家认为无法找到根本原因或虽有解决方案,但目前无法实施(如实施的代价太大等),问题经理协调问题处理专家进行分析判断,决定该问题是继续诊断、解决还是关闭该问题 | ||
71 | ))) | ||
72 | |200.6|(% style="width:146px" %)问题回顾|(% style="width:163px" %)((( | ||
73 | 问题经理/ | ||
74 | |||
75 | 问题处理专家 | ||
76 | )))|(% style="width:752px" %)((( | ||
77 | 1. 问题处理专家和问题经理对问题进行回顾,确认问题是否被正确的解决,如果没有解决,转到200.3分析并诊断问题/提供变通方法 | ||
78 | 1. 整理问题处理经验,提交到知识管理系统。 | ||
79 | ))) | ||
80 | |200.7|(% style="width:146px" %)问题关闭|(% style="width:163px" %)问题处理专家|(% style="width:752px" %)((( | ||
81 | 1. 对问题记录的信息项进行总结,更新问题记录并关闭问题 | ||
82 | ))) | ||
83 | |||
84 | 问题管理存在以下实际应用场景: | ||
85 | |||
86 | 1. 突发事件升级为问题 | ||
87 | 1. 运维人员手动提交问题 | ||
88 | 1. 根据事件趋势分析结果提交问题 | ||
89 | |||
90 | = = | ||
91 | |||
92 | = **3.模块与周边产品集成** = | ||
93 | |||
94 | 无 | ||
95 | |||
96 | |||
97 | |||
98 | = **4.详细设计与开发指导** = | ||
99 | |||
100 | == **4.1.技术细节** == | ||
101 | |||
102 | == **4.1.1.表单(format)** == | ||
103 | |||
104 | * PM.problem.logging | ||
105 | |||
106 | PM.problem.planning | ||
107 | |||
108 | PM.problem.investigation | ||
109 | |||
110 | PM.problem.resolution | ||
111 | |||
112 | PM.problem.closure | ||
113 | |||
114 | 添加“问题来源”、“重复问题”。 | ||
115 | |||
116 | “问题来源:”的文本控件的输入属性为MS.source,值列表为“事件升级;维护提出;趋势分析”。 | ||
117 | |||
118 | “是否为重复问题:”的组合控件的输入属性为MS.duplicate,值列表为“1;0”,显示列表为“是;否”。 | ||
119 | |||
120 | “是否为重大问题:”的组合控件的输入属性为MS.critical,值列表为“1;0”,显示列表为“是;否”。 | ||
121 | |||
122 | 将标签“问题协调员”改为“问题处理人”。 | ||
123 | |||
124 | 将表单中“区域:”和“分区:”标签的标题分别修改为“领域:”和“子领域:”。 | ||
125 | |||
126 | 隐藏“文件夹:”的标签控件和文本输入控件。 | ||
127 | |||
128 | 隐藏“服务” 的标签控件和文本输入控件。 | ||
129 | |||
130 | 将“公司”选项卡的“可见条件” [$G.multi]=true去掉,并设置该选项卡为不可见。 | ||
131 | |||
132 | 将“任务”选项卡设置为不可见。 | ||
133 | |||
134 | 将“评估”选项卡改为“受影响的配置项”。并该选项卡下面的“估计每人每天的次数:”、“估计成本”的标签和文本控件隐藏。添加标签,设置标题为“请通过选择"主要配置项"来添加多个受影响的配置项:”。 | ||
135 | |||
136 | [[image:1728803998299-174.png]] | ||
137 | |||
138 | |||
139 | 将“活动”选项下面控件的标题修改如下: | ||
140 | |||
141 | [[image:1728804015751-690.png]] | ||
142 | |||
143 | |||
144 | * advFind.search.problem | ||
145 | |||
146 | 添加“问题来源”、“重复问题”。 | ||
147 | |||
148 | 添加“问题来源”,输入属性为“MS.source”,值列表为“事件升级;维护提出;趋势分析”。 | ||
149 | |||
150 | “重复问题”的选项控件的输入属性为MS.duplicate。 | ||
151 | |||
152 | 将表单中“区域:”和“分区:”标签的标题分别修改为“领域:”和“子领域:”。 | ||
153 | |||
154 | 标签“问题协调员”改为“问题处理人”。 | ||
155 | |||
156 | 将“搜索下列状态的记录单:”控件删除掉。 | ||
157 | |||
158 | 隐藏“文件夹”控件。 | ||
159 | |||
160 | [[image:1728804100665-159.png]] | ||
161 | |||
162 | |||
163 | * 修改以下表单 | ||
164 | |||
165 | PM.error.logging | ||
166 | |||
167 | PM.error.planning | ||
168 | |||
169 | PM.error.investigation | ||
170 | |||
171 | PM.error.resolution | ||
172 | |||
173 | PM.error.closure | ||
174 | |||
175 | “问题协调员:”改为“问题处理人:” | ||
176 | |||
177 | “匹配的配置项数:”改为“受影响的配置项数:” | ||
178 | |||
179 | “区域:”改为“领域:” | ||
180 | |||
181 | “子区域:”改为“子领域:” | ||
182 | |||
183 | 隐藏“相关交互计数:” | ||
184 | |||
185 | 隐藏“文件夹:” | ||
186 | |||
187 | [[image:1728804130498-873.png]] | ||
188 | |||
189 | |||
190 | |||
191 | “活动更新”改为“提供更新” | ||
192 | |||
193 | “日记更新”改为“日志” | ||
194 | “活动历史记录”改为“历史活动” | ||
195 | |||
196 | “更新类型:”改为“活动类型:” | ||
197 | |||
198 | |||
199 | [[image:1728804152433-364.png]] | ||
200 | |||
201 | |||
202 | |||
203 | * 创建表单PM.notify.registered | ||
204 | |||
205 | 表单上用标签来显示问题工单各个字段的内容。比如标签“领域:”后面紧跟着还有一个标签,这个标签标题为空,它的输入属性为”subcategory”,以此来动态生成邮件内容。 | ||
206 | |||
207 | |||
208 | [[image:1728804209751-713.png]] | ||
209 | |||
210 | |||
211 | * 表单PM.notify.assigned | ||
212 | |||
213 | 表单上用标签来显示问题工单各个字段的内容。比如标签“领域:”后面紧跟着还有一个标签,这个标签标题为空,它的输入属性为”subcategory”,以此来动态生成邮件内容。 | ||
214 | |||
215 | |||
216 | [[image:1728804233983-723.png]] | ||
217 | |||
218 | |||
219 | * 表单PM.notify.assigned.group | ||
220 | |||
221 | 表单上用标签来显示问题工单各个字段的内容。比如标签“领域:”后面紧跟着还有一个标签,这个标签标题为空,它的输入属性为”subcategory”,以此来动态生成邮件内容。 | ||
222 | |||
223 | |||
224 | [[image:1728804260239-719.png]] | ||
225 | |||
226 | |||
227 | == **4.1.2.表单控制(formatctrl)** == | ||
228 | |||
229 | * 表单控制rootcause | ||
230 | |||
231 | 计算 | ||
232 | |||
233 | 将计算语句incident.category in $file="problem"改为incident.category in $file="故障" | ||
234 | |||
235 | [[image:1728804290109-635.png]] | ||
236 | |||
237 | 验证 | ||
238 | |||
239 | 将以下验证语句去掉。 | ||
240 | |||
241 | [[image:1728804305533-650.png]] | ||
242 | |||
243 | * 表单控制knownerror | ||
244 | |||
245 | 加false将验证以下语句禁用。 | ||
246 | |||
247 | [[image:1728804325508-222.png]] | ||
248 | |||
249 | |||
250 | == **4.1.3.处理定义(Process)** == | ||
251 | |||
252 | * process="rca.view.init" | ||
253 | |||
254 | 将下面的初始表达式 | ||
255 | |||
256 | if ($L.mode="add") then (rcStatus in $L.file="Open") | ||
257 | |||
258 | 改为:if ($L.mode="add") then (rcStatus in $L.file="已登记") | ||
259 | |||
260 | |||
261 | == **4.1.4.显示选项(displayoptions)** == | ||
262 | |||
263 | * 将以下displayoption的用户条件设置为false : | ||
264 | |||
265 | id="rca.view_ok_1" | ||
266 | |||
267 | id="rca.view_ok" | ||
268 | |||
269 | id="rca.view_previousphase" | ||
270 | |||
271 | id="kne.view_previousphase" | ||
272 | |||
273 | id="kne.view_ok " | ||
274 | |||
275 | id="rca.view_getsla" | ||
276 | |||
277 | id="rca.task.view_getsla" | ||
278 | |||
279 | id="rca.view_do nothing" | ||
280 | |||
281 | id="rca.task.view_do nothing" | ||
282 | |||
283 | |||
284 | == **4.1.5.活动动作(activityactions)** == | ||
285 | |||
286 | * table#"rootcause" | ||
287 | |||
288 | 将名称和描述改成中文。 | ||
289 | |||
290 | Open:登记 | ||
291 | |||
292 | Reassignment:重新分配 | ||
293 | |||
294 | Assignment:分配 | ||
295 | |||
296 | Phase Change:更改阶段 | ||
297 | |||
298 | Reopen:重新打开 | ||
299 | |||
300 | Status Change:更改状态 | ||
301 | |||
302 | Closed:关闭 | ||
303 | |||
304 | Cancelled:取消 | ||
305 | |||
306 | Workaround Update:更新变通方案 | ||
307 | |||
308 | External Update:外部更新 | ||
309 | |||
310 | |||
311 | 效果图如下: | ||
312 | |||
313 | [[image:1728804373117-464.png]] | ||
314 | |||
315 | [[image:1728804406592-495.png]] | ||
316 | |||
317 | [[image:1728804418524-225.png]] | ||
318 | |||
319 | |||
320 | * table#"knownerror" | ||
321 | |||
322 | 将名称和描述改成中文。 | ||
323 | |||
324 | Open:登记 | ||
325 | |||
326 | Reassignment:重新分配 | ||
327 | |||
328 | Assignment:分配 | ||
329 | |||
330 | Phase Change:更改阶段 | ||
331 | |||
332 | Reopen:重新打开 | ||
333 | |||
334 | Status Change:更改状态 | ||
335 | |||
336 | Closed:关闭 | ||
337 | |||
338 | Cancelled:取消 | ||
339 | |||
340 | Workaround Update:更新变通方案 | ||
341 | |||
342 | External Update:外部更新 | ||
343 | |||
344 | |||
345 | [[image:1728804442563-918.png]] | ||
346 | |||
347 | [[image:1728804453159-946.png]] | ||
348 | |||
349 | |||
350 | == **4.1.6.数据** == | ||
351 | |||
352 | 为数据表注入定制好的中文数据。 | ||
353 | |||
354 | 请直接双击zip文件,解压出unl文件,然后用SM的数据库管理器导入数据。 | ||
355 | |||
356 | |||
357 | **问题阶段(表名:rootcausephase)** | ||
358 | |||
359 | [[image:1728804471764-343.png]] | ||
360 | |||
361 | |||
362 | **问题控制类别(表名:rootcausecat)** | ||
363 | |||
364 | [[image:1728804487048-226.png]] | ||
365 | |||
366 | |||
367 | **问题状态(表名:ModuleStatus)** | ||
368 | |||
369 | [[image:1728804500431-649.png]] | ||
370 | |||
371 | |||
372 | **问题活动(表名:activitytype)** | ||
373 | |||
374 | [[image:1728804537907-970.png]] | ||
375 | |||
376 | |||
377 | **已知错误阶段** | ||
378 | |||
379 | [[image:1728804549777-897.png]] | ||
380 | |||
381 | |||
382 | **已知错误类别** | ||
383 | |||
384 | [[image:1728804569099-343.png]] | ||
385 | |||
386 | |||
387 | **已知错误活动(表名:activitytype)** | ||
388 | |||
389 | [[image:1728804581942-816.png]] | ||
390 | |||
391 | |||
392 | == **4.1.7.全局列表(globallists)** == | ||
393 | |||
394 | * name=”PM Activity Types” | ||
395 | |||
396 | 更改值列表如下: | ||
397 | |||
398 | {"信息更新","分析与调查","已关闭","与客户沟通","与供应商沟通","已登记","操作员更新","已诊断部分问题","阶段变更","问题已标识","问题重现","重新分配","重新打开","来自客户的更新","变通方案", "已分配","状态变更","已取消","变通方案更新","解决方案更新"} | ||
399 | |||
400 | == == | ||
401 | |||
402 | == **4.1.8.系统消息(scmessage)** == | ||
403 | |||
404 | * 把更新消息编号2210的文本“请提供更新。”改为“请提供当前更新的详细描述。” | ||
405 | |||
406 | 语言代码: zh-Hans | ||
407 | |||
408 | 类别: us | ||
409 | |||
410 | 消息编号: 2210 | ||
411 | |||
412 | 严重度: 1 | ||
413 | |||
414 | 文本:请提供当前更新的详细描述。 | ||
415 | |||
416 | |||
417 | * 将消息编号810的文本“请提供区域。”更改为“请提供领域。” | ||
418 | |||
419 | [[image:1728804613899-619.png]] | ||
420 | |||
421 | |||
422 | * 将消息编号811的文本“请提供子区域。”更改为“请提供子领域。” | ||
423 | |||
424 | [[image:1728804637281-152.png]] | ||
425 | |||
426 | |||
427 | * 将消息编号1502的文本“请提供标题。”更改为“请提供简要描述。” | ||
428 | |||
429 | [[image:1728804654335-863.png]] | ||
430 | |||
431 | |||
432 | * 将消息编号813的文本“请提供描述。”更改为“请提供详细说明。” | ||
433 | |||
434 | [[image:1728804704383-985.png]] | ||
435 | |||
436 | |||
437 | == **4.2.表结构** == | ||
438 | |||
439 | |**数据库表**|**标签**|**字段名**|**数据类型**|**是否为必填**|**Oracle映射** | ||
440 | |rootcause|问题来源|MS.source|character|否|varchar2(40) | ||
441 | |rootcause|是否为重复问题|MS.duplicate|character|否|char(1) | ||
442 | |rootcause|是否为重大问题|MS.critical|Character|否|Char(1) | ||
443 | |||
444 | SQL语句: | ||
445 | |||
446 | ALTER TABLE "SM7ADMIN"."ROOTCAUSEM1" ADD ( "MS_SOURCE" VARCHAR2(40), "MS_DUPLICATE" CHAR(1), "MS_CRITICAL" CHAR(1)) | ||
447 | |||
448 | == == | ||
449 | |||
450 | == **4.2.1.字段帮助内容** == | ||
451 | |||
452 | 为以下数据库表的字段添加帮助内容: | ||
453 | |||
454 | |**数据库表**|**字段名**|**帮助内容** | ||
455 | |rootcause|MS.source|((( | ||
456 | 描述问题的来源。 | ||
457 | |||
458 | 事件升级:事件恢复服务后提出的问题,以便对事件的根本原因进行分析。 | ||
459 | |||
460 | 维护提出:技术专家在日常维护工作中提出的问题。 | ||
461 | |||
462 | 趋势分析:通过分析事件记录找出的问题。 | ||
463 | ))) | ||
464 | |rootcause|MS.duplicate|描述当前问题记录是否为重复问题。 | ||
465 | |rootcause|MS.critical|描述当前问题记录是否为重大问题。如果是重大问题,在关闭问题前需要提供重大问题报告。 | ||
466 | |||
467 | == == | ||
468 | |||
469 | == **4.3.通知与告警** == | ||
470 | |||
471 | == **4.3.1.邮件(Notification)** == | ||
472 | |||
473 | 创建以下通知定义。邮件的格式由“窗体”参数来控制。以下用到的窗体均已在表单设计章节创建。 | ||
474 | |||
475 | ID:PM_Open_1 | ||
476 | |||
477 | [[image:1728804783010-977.png]] | ||
478 | |||
479 | 邮件消息编号等于900的触发条件为:assignee.name in $L.file~~=operator() and assignee.name in $L.file~~=nullsub(assignee.name in $L.file.save, "Empty") | ||
480 | |||
481 | 邮件消息编号等于908的触发条件为:nullsub(assignee.name in $L.file, "")="" and assignment in $L.file~~=nullsub(assignment in $L.file.save, "") | ||
482 | |||
483 | == == | ||
484 | |||
485 | == **4.3.2.短信(SMS)** == | ||
486 | |||
487 | 服务管理系统发送短信通知的实现设计如下: | ||
488 | |||
489 | 服务管理系统在问题创建后,会向Oracle数据库中的OutBox表写入目标手机号码和短信内容;接下来外部的事件监控平台将OutBox表里的数据同步到XX短信通的数据库。XX短信通平台将把这些数据库记录作为短信发送给接收人。 | ||
490 | |||
491 | 触发事件:当用户创建问题时 | ||
492 | |||
493 | 接收人类型:分配组、问题处理人 | ||
494 | |||
495 | 处理规则:默认只发送邮件,如果优先级为严重和较高,则需要加短信。如果事件已经分配处理者,通知处理者;如果没有处理者,通知将发给整个分配组成员。 | ||
496 | |||
497 | == == | ||
498 | |||
499 | == **4.3.3.代码实现** == | ||
500 | |||
501 | * ScriptLibrary: MS_SMS_Notification | ||
502 | |||
503 | 说明:给配置组发短信时,检索出各个配置组成员的移动电话号码,将短信依次写入OutBox表。给处理者发短信时,检索出处理者的移动电话号码,然后将短信写入OutBox表,接下来短信的实际发送由诺亚短信通来处理。 | ||
504 | |||
505 | **function** **sendMsgToGroup**(group,msg,module) | ||
506 | |||
507 | { | ||
508 | |||
509 | **var** SMSFile=**new** **SCFile**("OutBox"); | ||
510 | |||
511 | **var** AssignmentFile=**new** **SCFile**("assignment"); | ||
512 | |||
513 | **var** rcAssignment=**AssignmentFile.doSelect**("name=\""+group+"\""); | ||
514 | |||
515 | |||
516 | **if** (rcAssignment==RC_SUCCESS) | ||
517 | |||
518 | { | ||
519 | |||
520 | **var** OperatorArray=**system.functions.denull**(AssignmentFile.operators); | ||
521 | |||
522 | **var** i=0; | ||
523 | |||
524 | |||
525 | **for** (i **in** OperatorArray) | ||
526 | |||
527 | { | ||
528 | |||
529 | **var** mobile=**getOperatorMobile**(OperatorArray[i]); | ||
530 | |||
531 | |||
532 | SMSFile.ID=**generateOutBoxID**(); | ||
533 | |||
534 | SMSFile.ExpressLevel=2; ~/~/可通过此字段控制发送信息的先后顺序.0为最高优先级;1较高优先级;2普通优先级. | ||
535 | |||
536 | SMSFile.Sender= | ||
537 | |||
538 | SMSFile.ReceiverMobileNo=mobile; | ||
539 | |||
540 | SMSFile.Msg=msg; | ||
541 | |||
542 | SMSFile.SendTime=**system.functions.tod**(); | ||
543 | |||
544 | SMSFile.CommPort=0; ~/~/当系统有多个设备同时工作的时候,如需指定使用某串口上的设备发送信息,则填写串口号,如不需要指定则填写0,这时系统根据各个设备的忙闲情况自动分配使用。 | ||
545 | |||
546 | |||
547 | **var** rcSMSFile=**SMSFile.doInsert**(); | ||
548 | |||
549 | |||
550 | **if** (rcSMSFile!=RC_SUCCESS) | ||
551 | |||
552 | { | ||
553 | |||
554 | **print**("发给用户"+OperatorArray[i]+"的短信写入数据库失败。"); | ||
555 | |||
556 | } | ||
557 | |||
558 | } | ||
559 | |||
560 | } | ||
561 | |||
562 | } | ||
563 | |||
564 | |||
565 | |||
566 | **function** **sendMsgToOperator**(operator,msg,module) | ||
567 | |||
568 | { | ||
569 | |||
570 | **var** SMSFile=**new** **SCFile**("OutBox"); | ||
571 | |||
572 | |||
573 | SMSFile.ID=**generateOutBoxID**(); | ||
574 | |||
575 | SMSFile.ExpressLevel=2; ~/~/可通过此字段控制发送信息的先后顺序.0为最高优先级;1较高优先级;2普通优先级. | ||
576 | |||
577 | SMSFile.Sender= | ||
578 | |||
579 | SMSFile.ReceiverMobileNo=**getOperatorMobile**(operator); | ||
580 | |||
581 | SMSFile.Msg=msg; | ||
582 | |||
583 | SMSFile.SendTime=**system.functions.tod**(); | ||
584 | |||
585 | SMSFile.CommPort=0; ~/~/当系统有多个设备同时工作的时候,如需指定使用某串口上的设备发送信息,则填写串口号,如不需要指定则填写0,这时系统根据各个设备的忙闲情况自动分配使用。 | ||
586 | |||
587 | |||
588 | **var** rcSMSFile=**SMSFile.doInsert**(); | ||
589 | |||
590 | |||
591 | **if** (rcSMSFile!=RC_SUCCESS) | ||
592 | |||
593 | { | ||
594 | |||
595 | **print**("发给用户"+OperatorArray[i]+"的短信写入数据库失败。"); | ||
596 | |||
597 | } | ||
598 | |||
599 | } | ||
600 | |||
601 | |||
602 | **function** **getOperatorMobile**(operator) | ||
603 | |||
604 | { | ||
605 | |||
606 | **var** OperatorFile=**new** **SCFile**("operator"); | ||
607 | |||
608 | **var** rcOperator=**OperatorFile.doSelect**("name=\""+operator+"\""); | ||
609 | |||
610 | **if** (rcOperator==RC_SUCCESS) | ||
611 | |||
612 | { | ||
613 | |||
614 | **var** ContactFile=**new** **SCFile**("contacts"); | ||
615 | |||
616 | **var** rcContact=**ContactFile.doSelect**("contact.name=\""+ContactFile.contact_name+"\""); | ||
617 | |||
618 | **if** (rcContact==RC_SUCCESS) | ||
619 | |||
620 | { | ||
621 | |||
622 | **return** ContactFile.portable_phone; | ||
623 | |||
624 | } | ||
625 | |||
626 | } | ||
627 | |||
628 | } | ||
629 | |||
630 | |||
631 | **function** **generateOutBoxID**() | ||
632 | |||
633 | { | ||
634 | |||
635 | **return** **system.functions.rtecall**("callrad",rteReturnValue,"getnumb","OutBox", "ID","string"); | ||
636 | |||
637 | } | ||
638 | |||
639 | |||
640 | 1. 为activityproblem表上创建触发器FireProblemNotification.aft.add | ||
641 | |||
642 | **if** (record.type=="已登记") | ||
643 | |||
644 | { | ||
645 | |||
646 | **var** ProblemFile=**new** **SCFile**("rootcause"); | ||
647 | |||
648 | **if** (**ProblemFile.doSelect**("id=\""+ record.id+ "\"")==RC_SUCCESS) | ||
649 | |||
650 | { | ||
651 | |||
652 | **system.library.MS_EMail_Notification.sendEmail**(ProblemFile,"PM_Open"); | ||
653 | |||
654 | **if** (ProblemFile.priority_code==1 || ProblemFile.priority_code==2) | ||
655 | |||
656 | { | ||
657 | |||
658 | **var** priority=(ProblemFile.priority_code==1)?"1 - 严重":"2 - 高"; | ||
659 | |||
660 | **var** msg="新事件"+ProblemFile.id+ " 优先级"+priority+" "+ProblemFile.brief_description+"已登记。"; | ||
661 | |||
662 | |||
663 | **if** (**system.functions.nullsub**(ProblemFile.assignee_name,"NULL")!="NULL") | ||
664 | |||
665 | { | ||
666 | |||
667 | **system.library.SMSnotification.sendMsgToOperator**(ProblemFile.assignee_name,msg); | ||
668 | |||
669 | } | ||
670 | |||
671 | **else** | ||
672 | |||
673 | { | ||
674 | |||
675 | **system.library.SMSnotification.sendMsgToGroup**(ProblemFile.assignment,msg); | ||
676 | |||
677 | } | ||
678 | |||
679 | } | ||
680 | |||
681 | } | ||
682 | |||
683 | } | ||
684 | |||
685 | |||
686 | == **4.4.角色及相关配置文件** == | ||
687 | |||
688 | * 打开数据库管理器,进入文件rcenv,搜索出已有的配置文件。 | ||
689 | |||
690 | 以problem analyst为模板添加安全配置文件:问题处理专家; | ||
691 | |||
692 | 以problem manager为模板添加安全配置文件:问题经理. | ||
693 | |||
694 | |||
695 | * 打开数据库管理器,进入文件userrole,搜索出已有的突发事件用户角色。 | ||
696 | |||
697 | 以problem analyst为模板添加角色“问题处理专家”,并问题配置文件文件为:“问题处理专家”。 | ||
698 | |||
699 | 以prolem manager为模板添加角色“问题经理”,并将突发事件配置文件替换为“问题经理”。 | ||
700 | |||
701 | |||
702 | = = | ||
703 | |||
704 | = **5.人力评估** = | ||
705 | |||
706 | |**技能要求**|**人天数**|**说明** | ||
707 | |中级|17|((( | ||
708 | 工作难点: | ||
709 | |||
710 | 模块裁剪; | ||
711 | |||
712 | 流程定制; | ||
713 | |||
714 | 邮件短信定制。 | ||
715 | ))) | ||
716 | |||
717 | = = | ||
718 | |||
719 | = **6.主要测试计划** = | ||
720 | |||
721 | 详见问题管理单元测试计划 | ||
722 | |||
723 | |||
724 |