大家好,我也共享一下改过的一些地方,供大家参考

一般问题,技术文档,通告 & 与 OTRS 相关的事件

Moderator: never

BOoRFGOnZ
OTRS newbie
Posts: 8
Joined: 09 Aug 2013, 03:19
OTRS Version?: 3.2.9

大家好,我也共享一下改过的一些地方,供大家参考

Postby BOoRFGOnZ » 09 Aug 2013, 06:05

otrs是个好东西,界面啥的不重要,关键是能够用起来,我用了2年时间,不敢独享改过的一些地方,就当经验给大家看看吧,我们得copyleft。 :D





进入正题:(格式不好,有些信息也不是最新的,还有些是文档材料,不过里面有用的东西还是有一些的)

=============================================================================================================================================
===============================================================================================================================================



otrs是个好东西,界面啥的不重要,关键是能够用起来,我用了2年时间,不敢独享改过的一些地方,就当经验给大家看看吧。





进入正题:(格式不好,有些信息也不是最新的)

=============================================================================================================================================
===============================================================================================================================================


几个修改的地方

1,每个人有一个agent账户和对应的queue
2,serviceadmin有全部权限
3,customer为北京通用任务提出账户,密码1234567
4,customer_gz customer_sh为广州和上海的通用任务提出账户
5,mysql密码1234567
6,北京部门对应组test1 ,上海为test3,广州test2
7,北京部门队列support_bj,上海support_sh,广州support_gz
8,用于删除ticket的队列为Junk
9,删除队列,建立Generic Agent一个job ,ticket filter的quene选择Junk,
然后Ticket Commands中Delete tickets中选择Yes
10,在Responses添加新的模板,有:服务工作记录,现场服务记录,任务书已查看,其他内容,培训记录表
客户培训班记录,自定义回复
11,在Response-queue中将编辑好的模块与agent向对应
12,Signature Management中添加一个名为“自动签名”的模板,内容为“--”,用在所有设置签名的地方
13,Salutation Managemetn中添加一个名为“空开头”的模块,内容为“”--“,用在所有需要设置开头的地方
14,customer Managemetn中添加公司销售人员,格式:username为:shuo.yang,name为:杨朔 cs2c_BJ
销售,其中id号的第4位标识用户区别地域和部门
15,Customer-service中根据销售人员或其他部门人员的具体工作关联到对应的Services列表
16,notification Management中修改Agent:Move,Agent::Addnote,Agent::NewTicket
标题新任务通知:<OTRS_CUSTOMER_SUBJECT[30]>
内容
你好,<OTRS_UserFirstname>:

你有一份新的工作任务已经通过部门审核,发起人:<OTRS_CUSTOMER_FROM>。
请登录公司的服务管理系统查看详情,并迅速进入工作执行状态。
在确定任务书后,通过服务管理系统回复确认信息。
完成任务后要回复相关工作服务记录。

地址:
[1]http://59.108.119.8/otrs/i?Action=AgentTicketZoom;TicketID=<OTRS_TICKET_ID>

此邮件不必回复。

=====================================
中标软件有限公司支持与服务管理系统
CS2C Support & Service Management System
=====================================

17,Notification Management中建立,
转发通知1,北京销售相关工作
Recipient groups:Agent(Owner)
Recipient agents:选择地域的支持服务负责人
Event:TicketCreate
Queue:support_bj
Service:选择对应Service
subject
通知:有新的任务提出,发起人:<OTRS_CUSTOMER_DATA_UserFirstname>,标题:<OTRS_CUSTOMER_SUBJECT[32]>
内容
你好:
有新的支持与服务任务书被提交,请相关负责人登录SSMS查看详情。
你可以对该任务书添加备注。

服务类型:销售项目有关

标题:<OTRS_CUSTOMER_SUBJECT[32]>
发起人:<OTRS_CUSTOMER_FROM>

本Ticket的访问地址:
[2]http://59.108.119.8/otrs/i?Action=AgentTicketZoom;TicketID=<OTRS_TICKET_ID>

此邮件不必回复。

========================================
中标软件有限公司支持与服务管理系统
CS2C Support & Service Management System
========================================

转发通知2, 北京内部工作,核高基,自主可控业务
转发通知3,广州事业部
转发通知4.新回复通知 北京 广州 上海
转发通知5,新回复通知 广州转发与李滨朱毅
以上具体内容查看详细配置

18,Type 建立一个名为 “维护与服务任务书”的type,用户customer登录端中进行的选择
19,Service Managemetn 中建立如下列表
Service Comment Valid Changed Created
其他工作 valid 08/12/2011 09:46 08/12/2011 09:46
内部工作 valid 08/18/2011 12:27 08/12/2011 09:46
售前现场支持服务 自主产品的售前现场支持服务
售前远程支持服务 自主产品
售后现场支持服务 自主产品
售后远程支持服务 自主产品
服务类项目 所承接的其他品牌的系统支持服务
标准服务 电话与远程
核高基项目 与核高基项目有关的,包括龙芯等
自主可控业务 国产cpu相关

20,SLA Management中建立如下SLA,并选择好对应的service
1小时响应,半个工作日完成
2小时响应,一个工作日完成
2小时响应,两个工作日完成
一天响应,10个工作日完成
一天响应,30个工作日完成
出差,1天响应,1-7个工作日完成

21,Framework -> Core::Log
LogModule=File
LogModule::LogFile=/opt/otrs/var/log/otrs.log

22,Framework -> Core::Time
TimeVacationDays
设置国庆,五一和元旦
TimeWorkingHours=8-20点

23,Framework -> Core::Time::Calendar1
TimeZone::Calendar1Name=中国日历
TimeVacationDays::Calendar1=中国的节假日填写
TimeWorkingHours::Calendar1=8=20点

24,中文
编辑/opt/otrs/Kernel/Language/zh_CN.pm

25,Framework -> Frontend::Agent
AgentLogo=skins/Agent/default/img/logo11.png
AgentLoginLogo=skins/Agent/default/img/logo1.png

26,Framework -> Core
ProductName=CS2C Support & Service Management System
AdminEmail=serviceadmin@cs2c.com.cn
Organization=CS2C
NotificationSenderName=CS2C SSMS Notification Master
NotificationSenderEmail=serviceadmin@cs2c.com.cn

27,Framework -> Frontend::Customer
CustomerHeadline=CS2C Support & Service Manag
CustomerLogo=skins/Customer/default/img/logo11.png
CustomerPanelCreateAccount=no

28,Framework -> Frontend::Agent::Dashboard
DashboardBackend###0400-UserOnline=选中
Reset this setting DashboardBackend###0000-ProductNotify =取消
DashboardBackend###0410-RSS=取消
DashboardBackend###0200-Image=http://59.108.119.8/banner_1.jpg

29,Framework -> Core::Session
SessionCheckRemoteIP=NO

30,建立两个软链接
/opt/otrs/bin/cgi-bin
lrwxrwxrwx 1 root root 11 9月 13 23:41 c -> customer.pl
lrwxrwxrwx 1 root root 8 9月 13 23:41 i -> index.pl

31,Ticket -> Frontend::Customer::Ticket::ViewNew
CustomerPanelSelectionType=Queue
CustomerPanelOwnSelection=support_bj=北京
support_sh=上海
support_gz=广州
Ticket::Frontend::CustomerTicketMessage###QueueDefault=取消

32,Framework -> Core::PDF
PDF=NO

33,Framework -> Core::Web
Frontend::RichTextWidth=850
Frontend::RichTextHeight=1100

34,Ticket -> Frontend::Agent::Ticket::ViewPhoneNew
Ticket::Frontend::AgentTicketPhone###Subject=400电话记录
Ticket::Frontend::AgentTicketPhone###Body=模板

35,/opt/otrs/Kernel/Output/HTML/Standard/CustomerTicketMessage.dtl

在最后添加

<script type="text/javascript">
Core.Customer.InitFocus();
switch ($('#TypeID').val() ) { //this is where the queue is relevant (Dest
= Queue)
case "1": // need to slash escape the pipes
document.compose.RichText.value = '<style type="text/css">p {
margin-bottom: 0cm; font-size: 10pt; text-align: justify; }</style><p
style="margin-left: 0cm; text-indent: -1.27cm; text-align: left;"> <span
style="font-size:
30px;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$Text{"weihuyufuwurenwushu"}</strong></spa
n><br
/> &nbsp;</p><table border="3" cellpadding="7" cellspacing="1" width="691">
<col width="70" /> <col width="0" /> <col width="237" /> <col
width="13" /> <col width="29" /> <col width="252" /> <tbody>
<tr> <td colspan="4" height="10" width="358"> <p
style="margin-left: -0.19cm; margin-right: -0.24cm; text-indent: 0.37cm;
margin-top: 0.11cm;"> $Text{"fuwuleixing"}(
$Text{"shouqian"}<font face="DejaVu Sans, serif"><font face="瀹嬩綋">
</font></font>$Text{"shouhou"}<font face="DejaVu Sans, serif"><font
face="瀹嬩綋"> </font></font>$Text{"peixun"}<font face="DejaVu Sans, serif"><font
face="瀹嬩綋"> </font></font>$Text{"qita"}):</p> </td> <td
colspan="2" width="296"> <p style="margin-right: -0.24cm;
margin-top: 0.11cm;"> $Text{"xiangyingjiezhiriqi"}:</p>
</td> </tr> <tr> <td colspan="6" height="11"
width="669"> <p align="CENTER" style="margin-top:
0.11cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
face="榛戜綋"><b>$Text{"khxx1"}</b></font><font face="榛戜綋"><b> </b></font><font
face="榛戜綋"><b>$Text{"khxx2"}</b></font><font face="榛戜綋"><b> </b></font><font
face="榛戜綋"><b>$Text{"khxx3"}</b></font><font face="榛戜綋"><b> </b></font><font
face="榛戜綋"><b>$Text{"khxx4"}</b></font></p> </td> </tr>
<tr> <td colspan="2" height="12" width="78"> <p
align="CENTER" style="margin-right: -0.19cm; text-indent: -0.19cm; margin-top:
0.11cm;"> $Text{"kehumingcheng"}</p> </td>
<td width="237"> <p align="CENTER" style="margin-top:
0.11cm;"> &nbsp;</p> </td> <td
colspan="2" width="57"> <p align="CENTER" style="margin-right:
-0.19cm; text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"hetonghao"}</p> </td> <td width="252">
<p align="CENTER" style="margin-left: 0.19cm; margin-right: -0.24cm;
text-indent: -0.19cm; margin-top: 0.11cm;"> &nbsp;</p>
</td> </tr> <tr> <td colspan="2" height="12"
width="78"> <p align="CENTER" style="margin-right: -0.19cm;
text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"chanpin"}<font face="瀹嬩綋">/</font>$Text{"xiangmumingcheng"}</p>
</td> <td width="237"> <p align="CENTER"
style="margin-top: 0.11cm;"> &nbsp;</p> </td>
<td colspan="2" width="57"> <p align="CENTER"
style="margin-right: -0.19cm; text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"fuwuhao"}</p> </td> <td
width="252"> <p align="CENTER" style="margin-left: 0.19cm;
margin-right: -0.24cm; text-indent: -0.19cm; margin-top: 0.11cm;">
&nbsp;</p> </td> </tr> <tr> <td
colspan="2" height="13" width="78"> <p align="CENTER"
style="margin-right: -0.19cm; text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"dizhi"}</p> </td> <td width="237">
<p align="CENTER" style="margin-top: 0.11cm;">
&nbsp;</p> </td> <td colspan="2" width="57">
<p align="CENTER" style="margin-left: -0.19cm; margin-right: -0.19cm;
text-indent: 0cm; margin-top: 0.11cm;">
$Text{"lianxiren"}</p> </td> <td width="252">
<p align="CENTER" style="margin-left: 0.19cm; margin-right: -0.24cm;
text-indent: -0.19cm; margin-top: 0.11cm;"> &nbsp;</p>
</td> </tr> <tr> <td colspan="2" height="13"
width="78"> <p align="CENTER" style="margin-right: -0.19cm;
text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"dianhua"}<font face="瀹嬩綋">/</font>$Text{"chuanzhen"}</p>
</td> <td width="237"> <p align="CENTER"
style="margin-top: 0.11cm;"> &nbsp;</p> </td>
<td colspan="2" width="57"> <p align="CENTER"
style="margin-left: -0.19cm; margin-right: -0.19cm; text-indent: 0cm;
margin-top: 0.11cm;"> <font face="瀹嬩綋">EMAIL</font></p>
</td> <td width="252"> <p align="CENTER"
style="margin-left: 0.19cm; margin-right: -0.24cm; text-indent: -0.19cm;
margin-top: 0.11cm;"> &nbsp;</p> </td>
</tr> <tr> <td colspan="6" height="3" width="669">
<p align="CENTER" style="margin-top: 0.21cm;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<font face="榛戜綋"><b>$Text{"rwnr1"}</b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b>$Text{"rwnr2"}</b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b>$Text{"rwnr3"}</b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b>$Text{"rwnr4"}</b></font></p>
<!-- <font face="榛戜綋"><b></b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b></b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b></b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b>$Text{"renwuneirong"}</b></font></p>
--> </td> </tr> <tr> <td colspan="6"
height="210" valign="TOP" width="669"> <p style="margin-top:
0.11cm; margin-bottom: 0.11cm;"> $Text{"jutineirong"}:</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
<br /> &nbsp;</p> <p
style="margin-top: 0.11cm; margin-bottom: 0.11cm;"> <br />
&nbsp;</p> <p style="margin-top: 0.11cm;
margin-bottom: 0.11cm;"> <br />
&nbsp;</p> <p style="margin-top: 0.11cm; margin-bottom:
0.11cm;"> <br /> &nbsp;</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
<br /> &nbsp;</p> <p style="margin-top:
0.11cm; margin-bottom: 0.11cm;"> &nbsp;</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;"> <br
/> &nbsp;</p> <p style="margin-top:
0.11cm;"> $Text{"renwutichuren"}:<font face="瀹嬩綋">
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
$Text{"riqi"}:</p> </td> </tr> <tr> <td
colspan="6" height="109" valign="TOP" width="669"> <p
style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
$Text{"xiaoshoujingli"}<font face="DejaVu Sans, serif"><font
face="瀹嬩綋">/</font></font>$Text{"xiaoshourenyuanshenpiyijian"}:</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
<font face="瀹嬩綋">1.</font>$Text{"renwuchengdanrendaodaxianchangshijian"}:</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
<font face="瀹嬩綋">2.</font>$Text{"jihuadegongzuotianshu"}:</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
<br /> &nbsp;</p> <p style="margin-top:
0.11cm;"> $Text{"qianzi"}:<font face="瀹嬩綋">
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
$Text{"riqi"}:</p> </td> </tr> <tr> <td
colspan="6" height="14" valign="TOP" width="669"> <p
align="CENTER" style="margin-right: -0.24cm; text-indent: -0.19cm; margin-top:
0.21cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
face="榛戜綋"><b>$Text{"jsrwrymd1"}</b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b>$Text{"jsrwrymd2"}</b></font><font
face="榛戜綋"><b> </b></font><font
face="榛戜綋"><b>$Text{"jsrwrymd3"}</b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b>$Text{"jsrwrymd4"}</b></font><font
face="榛戜綋"><b> </b></font><font
face="榛戜綋"><b>$Text{"jsrwrymd5"}</b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b>$Text{"jsrwrymd6"}</b></font><font
face="榛戜綋"><b> </b></font><font
face="榛戜綋"><b>$Text{"jsrwrymd7"}</b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b>$Text{"jsrwrymd8"}</b></font></p><!--
<font face="榛戜綋"><b>$Text{"jsrwrymd1"}</b></font><font
face="榛戜綋"><b>$Text{"jsrwrymd2"} </b></font><font
face="榛戜綋"><b>$Text{"jsrwrymd3"}</b></font><font
face="榛戜綋"><b>$Text{"jsrwrymd4"} </b></font><font
face="榛戜綋"><b>$Text{"jsrwrymd5"}</b></font><font
face="榛戜綋"><b>$Text{"jsrwrymd6"} </b></font><font
face="榛戜綋"><b>$Text{"jsrwrymd7"}</b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b></b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b></b></font><font face="榛戜綋"><b>
</b></font><font face="榛戜綋"><b></b></font><font face="榛戜綋"><b>
</b></font><font
face="榛戜綋"><b>$Text{"jieshourenwurenyuanmingdan"}</b></font></p> -->
</td> </tr> <tr> <td colspan="6" height="47"
valign="TOP" width="669"> <p style="margin-top: 0.11cm;">
$Text{"zhidingrenwuchengdanren"}:</p> <p
style="margin-top: 0.11cm;"> &nbsp;</p> <p
style="margin-top: 0.11cm;"> &nbsp;</p> <p
style="margin-top: 0.11cm;">
$Text{"renwuchengdanren"}:<font face="DejaVu Sans, serif">
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Text{"riqi"}:</p> </td>
</tr> <tr> <td colspan="6" height="15" valign="TOP"
width="669"> <p style="margin-left: 0.19cm; margin-right:
-0.24cm; text-indent: -0.19cm; margin-top: 0.21cm;">
$Text{"jishuzhichijingliqianzi"}:<font face="瀹嬩綋">
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$Text{"riqi"}:</p>
</td> </tr> <tr> <td height="68"
width="70"> <p align="CENTER" style="margin-right: -0.24cm;
text-indent: -0.19cm; margin-top: 0.21cm; margin-bottom: 0.21cm;">
$Text{"beizhu1"}</p> <p align="CENTER"
style="margin-right: -0.24cm; text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"beizhu2"}</p> </td> <td colspan="5"
valign="TOP" width="584"> <p style="margin-right: -0.24cm;
text-indent: -0.19cm; margin-top: 0.11cm;"> &nbsp;</p>
</td> </tr> </tbody></table><p>'; // only if you want to
change the body. destroys user input if queue changes
break;
default:
document.compose.RichText.value ='<span style="font-size:
18px;"><strong>$Text{"Please choose the Service Type ! "}<br> $Text{"CS2C
Support & Service Management System"}</strong></span>';
}
</script>



[1] http://59.108.119.8/otrs/i?Action=Agent ... ;TicketID=
[2] http://59.108.119.8/otrs/i?Action=Agent ... ;TicketID=




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
备注
创建: 2011.11.04 16:19:00 由 服务人员
类型: 外部注解
附件:

在添加了一个东西

master/slave

可以对几个ticket进行主从关系的链接




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2011.11.04 21:48:35 由 服务人员
类型: 外部注解
附件:

添加FAQ功能

在customer面板上有对应的菜单显示

对于内部管理系统来说 用处不大
对于外部的来说 就相当于知识库一样




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2011.11.04 22:52:51 由 服务人员
类型: 外部注解
附件:


Framework -> Frontend::Agent::ModuleNotify
Frontend::NotifyModule###3-ShowAgentOnline 选中

Frontend::NotifyModule###4-ShowCustomerOnline 选中

Frontend::Customer::ModuleNotify
CustomerFrontend::NotifyModule###1-ShowCustomerOnline 选中
CustomerFrontend::NotifyModule###1-ShowAgentOnline
选中

Ticket -> Frontend::Agent::ToolBarModule几个图标显示

选中三 x选中选中




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2011.11.05 23:13:21 由 服务人员
类型: 外部注解
附件:

Framework -> Frontend::Customer :CustomerPanelLogoutURL
ssms.cs2c.com.cn

Framework -> Frontend::Agent
ssms.cs2c.com.cn
www :




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2011.11.05 23:18:26 由 服务人员
类型: 外部注解
附件:

OpenMainMenuOnHover YES




发件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
备注
创建: 2011.11.07 09:11:50 由 服务人员
类型: 外部注解
附件:


好的,现在貌似没有太多时间写这个文档,我会一直收集信息,找时间完成,谢谢。 可能会托的久一点啊,长期工作。






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2011.12.21 15:54:42 由 服务人员
类型: 外部注解
附件:

将 Freetime 添加2个显示

一个 是 首次编辑时间
一个是 任务的实际响应节点




发件人:
小C cs2c_BJ 内部 <ss@cs2c.com.cn>
标题:
Re: ssms系统的二次开发过程说明
创建: 2011.12.23 09:51:41 由 客户
类型: Web请求
附件:

又多了一个 ticket时效性选择下拉框 一个是 后补的ticket 一个是新建的ticket




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2012.04.09 11:47:09 由 服务人员
类型: 外部注解
附件:

升级到 3.1

对 freetext 需要 进行升级 为 Dynamic Fields

By default, a clean installation of OTRS 3.1.x does not include any dynamic
fields. If you plan to use such fields in tickets or articles you need to
create dynamic fields.

An updated installation from OTRS 3.0.x will have all the old "free fields"
created as dynamic fields for compatibility and data preservation. The
following is the list of dynamic fields that are created during the migration
from OTRS 3.0.x to 3.1.x.

TicketFreeKey[1-16] (TicketFreeKey1, TicketFreeKey2 ... TicketFreeKey16)

TicketFreeText[1-16]

TicketFreeTime[1-6]

ArticleFreeKey[1-16]

ArticleFreeText[1-16]

Note

During the migration procedure from OTRS 3.0.x to OTRS 3.1.x all the old
"free fields" data and configuration are migrated to the new dynamic fields
architecture. Any custom development around the old "free fields" has to be
updated to use the new dynamic field framework.

The migration of the configuration include the field itself and the screen
configurations to hide, show or show field as mandatory for each screen.

The configuration of a dynamic field is split in two parts, to add a new
dynamic field or manage an existing one you need to navigate into the "Admin"
panel in the "Dynamic Fields" link. To show, show as mandatory or hide a
dynamic field in one screen you need to change the OTRS settings in the
"SysConfig" screen.

Adding a Dynamic Field

Click in the "Admin" button located in the navigation bar, then click on the
"Dynamic Field" link inside "Ticket Settings" box located in the lower center
of the screen. The dynamic fields overview will display as follows:

Figure: Dynamic fields overview screen, empty.

Notice that this screen will change as you add more dynamic fields to list
all created dynamic fields. This screen might already have some fields if the
installation was updated from an older version of OTRS.

The Actions in the side bar at the left of the screen describes two
possibilities: Article and Ticket, each one has it's own dropdown selection of
dynamic fields.

Note

The installation of an OTRS package could add more objects to the Action side
bar.

The general procedure to create a dynamic field is:

Click on the desired dynamic field object dropdown in the Action side bar.

Click on the dynamic field type that you want to add from the list.

Fill the configuration.

Save.

The configuration dialogs for the dynamic fields are split in two parts, the
upper section is common among all the fields and the lower part might be
different from one type of dynamic field to another.

General dynamic field settings:

Name: Mandatory, unique, only letters and numbers are allowed.

This is the internal name of the field, used for example to show or hide a
field in one screen. Any modification on field name (not recommended) will
need manual a update on the "SysConfig" settings where the field is
referenciated.

Label: Mandatory.

This is field name to be displayed in the screens, it supports translations.

Note

Label translations have to be added manually to language translations files.

Field order: Mandatory.

Defines the relative order in which the field will be displayed in the
screen, by default each new field has the last position, a change in this
setting will affect the other of the other created dynamic fields.

Validity: Mandatory.

An invalid dynamic field will not be displayed in any screen, no matter if is
configured to displayed.

Field type: Mandatory, Read only.

Shows the current selected field type.

Object type: Mandatory, Read only.

Shows the scope of field.

Note

To illustrate each specific field type settings a few fields will be added in
our example. These new fields will be referenciated in later sections.

For the following examples all the dynamic fields will be created for the
Ticket object if you need to create a dynamic field for Article object, just
chose the field from the Article dropdown list.

Table 22.1. The following fields will be added into the system:

Name

Label

Type

Field1 My Field 1 Text

Field2 My Field 2 Textarea

Field3 My Field 3 Checkbox

Field4 My Field 4 Dropdown

Field5 My Field 5 Multiselect

Field6 My Field 5 Date

Field7 My Field 6 Date / Time

Text Dynamic Field Configuration

Text dynamic field is used to store a single line string.

Text dynamic field settings:

Default value: Optional.

This is the value to be shown by default in the edit screens (like New Phone
Ticket or Ticket Compose).

Show link: Optional.

If set, the field value will be converted into a clickable link for display
screens (like ticket zoom or overviews).

For example, if "Show link" is set to "http://www.otrs.com", clicking on the
filled value will make your browser to open the OTRS web page.

Note

The use of $LQData{"NameX"} in the Set link value, where NameX is the name of
the field will add the field value as part of the link reference.

Figure: Dynamic field Text configuration dialog.

Textarea Dynamic Field Configuration

Textarea dynamic field is used to store a multiple line string.

Textarea dynamic field settings:

Number of rows: Optional, integer.

Used to define the height of the field in the edit screens (like New Phone
Ticket or Ticket Compose).

Number of cols: Optional, Integer.

This is value is used to define the width of the field in the edit screens.

Default value: Optional.

This is the value to be shown by default in the edit screens (it can be a
multiple line text).

Figure: Dynamic field Textarea configuration dialog.

Checkbox Dynamic Field Configuration

Checkbox dynamic field is used to store true or false value, represented by a
checked or unchecked check box.

Checkbox dynamic field settings:

Default value: Mandatory.

This is the value to be shown by default in the edit screens (like New Phone
Ticket or Ticket Compose), the default value for this field is closed
selection that can be Checked or Unchecked.

Figure: Dynamic field Checkbox configuration dialog.

Dropdown Dynamic Field Configuration

Dropdown dynamic field is used to store a single value, from a closed list.

Dropdown dynamic field settings:

Possible values: Mandatory.

List of values to choose. when add a new value is necessary to specify the
Key (internal value) and the Value (display value).

Default value: Optional.

This is the value to be show by default in the edit screens (like New Phone
Ticket or Ticket Compose), the default value for this field is closed
selection defined by the Possible values.

Add empty value: Mandatory, (Yes / No).

If this option is activated an extra value is defined to show a "-" in the
list of possible values, this special value is empty internally.

Translatable values: Mandatory, (Yes / No).

This setting is used mark the possible values of this field to be translated.
Only the display values are translated, internal values are not affected, the
translation of the values needs to be manually added to the language files.

Show link: Optional.

If set, the field value will be converted into a clickable HTP link for
display screens (like Zoom or overviews).

For example, if Show link is set to "[1]http://www.otrs.com", clicking on the
filed value will make your browser to open the OTRS web page.

Note

The use of $LQData{"NameX"} in the Set link value, where NameX is the name of
the field will add the field value as part of the link reference.

Figure: Dynamic field Dropdown configuration dialog.

Multiselect Dynamic Field Configuration

Multiselect dynamic field is used to store a multiple values, from a closed
list.

Multiselect dynamic field settings:

Possible values: Mandatory.

List of values to choose. when add a new value is necessary to specify the
Key (internal value) and the Value (display value).

Default value: Optional.

This is the value to be show by default in the edit screens (like New Phone
Ticket or Ticket Compose), the default value for this field is closed
selection defined by the Possible values.

Add empty value: Mandatory, (Yes / No).

If this option is activated an extra value is defined to show a "-" in the
list of possible values, this special value is empty internally.

Translatable values: Mandatory, (Yes / No).

This setting is used mark the possible values of this field to be translated.
Only the display values are translated, internal values are not affected, the
translation of the values needs to be manually added to the language files.

Figure: Dynamic field Multiselect configuration dialog.

Date Dynamic Field Configuration

Date dynamic field is used to store a date value (Day, Month and Year).

Date dynamic field settings:

Default date difference: Optional, Integer.

Number of seconds (positive or negative) between the current date and the
selected date to be show by default in the edit screens (like New Phone Ticket
or Ticket Compose).

Define years period: Mandatory (Yes / No).

Used to set a defined number of years in past and future from current date in
the year select of this field, If set to Yes the following options are
available:

Years in the past: Optional, Positive integer.

Define the number of years in past from current day to display in the year
selection for this dined in edit screens.

Years in the future: Optional, Positive integer.

Define the number of years in future from current day to display in the year
selection for this dined in edit screens.

Show link: Optional.

If set, the field value will be converted into a clickable HTP link for
display screens (like Zoom or overviews).

For example, if Show link is set to "[2]http://www.otrs.com", clicking on the
filed value will make your browser to open the OTRS web page.

Note

The use of $LQData{"NameX"} in the Set link value, where NameX is the name of
the field will add the field value as part of the link reference.

Figure: Dynamic field Date configuration dialog.

Date / Time Dynamic Field Configuration

Date / Time dynamic field is used to store a date time value (Minute, Hour,
Day, Month and Year).

Date / Time dynamic field settings:

Default date difference: Optional, Integer.

Number of seconds (positive or negative) between the current date and the
selected date to be show by default in the edit screens (like New Phone Ticket
or Ticket Compose).

Define years period: Mandatory (Yes / No).

Used to set a defined number of years in past and future from current date in
the year select of this field, If set to Yes the following options are
available:

Years in the past: Optional, Positive integer.

Define the number of years in past from current day to display in the year
selection for this dined in edit screens.

Years in the future: Optional, Positive integer.

Define the number of years in future from current day to display in the year
selection for this dined in edit screens.

Show link: Optional.

If set, the field value will be converted into a clickable HTP link for
display screens (like Zoom or overviews).

For example, if Show link is set to "http://www.otrs.com", clicking on the
filed value will make your browser to open the OTRS web page.

Note

The use of $LQData{"NameX"} in the Set link value, where NameX is the name of
the field will add the field value as part of the link reference.

Figure: Dynamic field Date / Time configuration dialog.

Editing a Dynamic Field

A filled dynamic field overview screen (with the previous examples) should
look like:

Figure: Dynamic field overview screen filled with sample data.

To change or edit a dynamic field you must have at least one field defined,
select an already added field from the dynamic fields overview screen and
update it's settings.

Note

Not all the dynamic field settings can be changed, the Field type and Object
type are fixed from the selection of the field and they can't be changed.

It is not recommended to change the field internal name, but the label can be
changed at any time. If internal name is changed all "SysConfig" settings that
has a reference to that particular field needs to be updated as well as user
preferences (if defined).

Showing a Dynamic Field on a Screen

To display a dynamic field on a particular screen there are two mandatory
conditions:

The dynamic field must be valid.

The dynamic field must be set to 1 or 2 in the configuration of the screen.

Follow this steps to show a dynamic field in a screen

Be sure that the dynamic field is set to valid, you can see the validity of
the field from the dynamic field overview screen. Set to valid by editing the
field if necessary.

Open the "sysconfig" and select "Ticket" from the dropdown list in the
Actions side bar located in the left part of the screen.

Note

You can also search for "DynamicField" in the search box above or the
"sysconfig" key directly if you already know it.

Locate the setting sub-group for the screen that you are looking for and
click on it. For example "Frontend::Agent::Ticket::ViewPhoneNew".

Search for the setting that ends with "###DynamicField". For example
"Ticket::Frontend::AgentTicketPhone###DynamicField".

If the setting is empty or does not have the required dynamic filed name,
click on the "+" button to add a new entry. For example Key: Field1, Content:
1.

If the setting already has the dynamic field name listed be sure that is set
to "1" to display the field or to "2" to display it as mandatory.

Save the configuration by clicking in the "Update" button and the bottom of
the screen and navigate to the screen where you want the field to be
displayed.

Show Examples

The following are "sysconfig" configurations examples to show or hide dynamic
fields on different screens.

Example 22.1. Activate Field1 in New Phone Ticket Screen.

Group: Ticket

Sub-group: Frontend::Agent::Ticket::ViewPhoneNew

Setting: Ticket::Frontend::AgentTicketPhone###DynamicField

Value:

KeyContentField11

Figure: Field1 in New Phone Ticket Screen.

Example 22.2. Activate Field1 in New Phone Ticket Screen as mandatory.

Group: Ticket

Sub-group: Frontend::Agent::Ticket::ViewPhoneNew

Setting: Ticket::Frontend::AgentTicketPhone###DynamicField

Value:

KeyContentField12

Figure: Field1 in New Phone Ticket Screen as mandatory.

Example 22.3. Activate several fields in New Phone Ticket Screen.

Group: Ticket

Sub-group: Frontend::Agent::Ticket::ViewPhoneNew

Setting: Ticket::Frontend::AgentTicketPhone###DynamicField

Value:

KeyContentField11Field21Field31Field41Field51Field61Field71

Figure: Several fields in New Phone Ticket Screen as mandatory.

Example 22.4. Deactivate some fields in New Phone Ticket Screen.

Group: Ticket

Sub-group: Frontend::Agent::Ticket::ViewPhoneNew

Setting: Ticket::Frontend::AgentTicketPhone###DynamicField

Value:

KeyContentField11Field20Field31Field40Field51Field60Field71

Figure: Some deactivated fields in New Phone Ticket Screen as mandatory.

Example 22.5. Activate Field1 in Ticket Zoom Screen.

Group: Ticket

Sub-group: Frontend::Agent::Ticket::ViewZoom

Setting: Ticket::Frontend::AgentTicketZoom###DynamicField

Value:

KeyContentField11

Figure: Field1 in Ticket Zoom Screen.

Example 22.6. Activate Field1 in Ticket Overview Small Screens.

Group: Ticket

Sub-group: Frontend::Agent::TicketOverview

Setting: Ticket::Frontend::OverviewSmall###DynamicField

Value:

KeyContentField11

Figure: Field1 in Ticket Overview Small Screen.

This setting affects: Escalation View, Locked View, Queue View, Responsible
View, Status View and Watch View screens.

Setting a Default Value by a Ticket Event Module

A ticket event (e.g. TicketCreate) can trigger a value set for a certain
field, if the field does not have a value yet.

Note

By using this method this default value, is not seen in the edit screen (e.g.
New Phone Ticket) since the value is set after the creation of the ticket.

To activate this feature is necessary to enable the following setting:
"Ticket::EventModulePost###TicketDynamicFieldDefault".

Example 22.7. Activate Field1 in TicketCreate event.

Group: Ticket

Sub-group: Core::TicketDynamicFieldDefault

Setting: Ticket::TicketDynamicFieldDefault###Element1

Note

This configuration can be set in any of the 16
Ticket::TicketDynamicFieldDefault###Element settings.

If more that 16 fields needs to be set up a custom XML file must be places in
$OTRS_HOME/Kernel/Config/files directory to extend this feature.

Value:

KeyContentEventTicketCreateNameField1Valuea new value

Set a Default Value by User Preferences

The dynamic field default value can be overwritten with a user defined value
stored in the user preferences.

Using this method, the default value of the field will be shown on any screen
where the field is activated (if the field does not have already a different
value).

The "sysconfig" setting "PreferencesGroups###DynamicField" located in the
"Frontend::Agent::Preferences" Sub-group. This setting is an example of how to
create an entry in the User Preferences screen to set an exclusive dynamic
field default value for the selected user. The limitation of this setting is
that it only admits one dynamic field. if two or more fields will use this
feature is necessary to create a custom XML configuration file to add more
settings similar to this one.

Note

Remember, if more settings are added in a new XML each setting name needs to
be unique in the system and different than "PreferencesGroups###DynamicField".
for example: PreferencesGroups###101-DynamicField-Field1,
PreferencesGroups###102-DynamicField-Field2, PreferencesGroups###My-Field1,
PreferencesGroups###My-Field2, etc.

Example 22.8. Activate Field1 in the User preferences.

Group: Ticket

Sub-group: Frontend::Agent::Preferences

Setting: PreferencesGroups###101-DynamicField-Field1

Value:

KeyContentEventTicketCreateActive1BlockInputColumnOther
SettingsData:$Env{"UserDynamicField_Field1"}Key:My Field 1Label:Default value
for: My Field
1Module:Kernel::Output::HTML::PreferencesGenericPrefKey:UserDynamicField_Field1Prio:7000


Figure: Field1 in User preferences screen.

Updating from OTRS 3.0

During the update from OTRS 3.0 there is an special step that is very
important and must not be skipped, there is an script file named
"DBUpdate-to-3.1.pl" under the "$OTRS_HOME/scripts" that must be called at the
precise time in the update procedure (please refer to UPGRADING file for more
details).

The script mentioned above is in charge to get all the "Free fields"
configurations and creates their dynamic field substitute, it also gathers
each "Free field" data from every ticket and article and move it to the
dynamic fields format. It also read the screen configuration for "Free fields"
and port it to the dynamic fields format.

Note

All the "Free fields" configurations are keep in the system but they are not
used anymore, they are placed under the group "Z_Deprecated", and the might be
removed in further versions of OTRS.

While the updating script tries to be very precise migrating the screen
configurations it is always good to do a manual fine tuning. Please note that
"Free fields" TicketFreeKey[1-16] and TicketFreeText[1-16] came always in pair
in OTRS 3.0 systems (and before). This is not longer necessary it could be
that the TicketFreeKey field is not necessary anymore for a particular
TicketFreeText field.

The dynamic fields overview screen from clean OTRS 3.0.x updated to 3.1.x
should look like:

Figure: Updated dynamic field overview screen page2.

Figure: Updated dynamic field overview screen page2.

Please note that the new dynamic field named "TicketFreeText2" has the label
"Product", this is because the default configuration from this "Free field" in
OTRS 3.0.x specifies that "TicketFreeKey2" has a fixed value of "Product". in
this case the dynamic field "TicketFreeKey2" is not needed anymore and it can
be manually set to invalid.

It might me also a very good idea to set the label value of each valid
migrated field to a text that describes better the use of the field in the
system.

[3]Prev [4]Up [5]Next

Chapter 22. Dynamic Fields [6]Home Chapter 23. Additional applications


[7]Discover it
- [8]Praise
- [9]Feature List
- [10]Blog
- [11]Demo System
- [12]Screenshots
- [13]Screencasts

- [14]Get it
- [15]Download
- [16]On Demand
- [17]Release Notes
- [18]Documentation
- [19]Source Code
- [20]Developer API

- [21]Get involved
- [22]User Forums
- [23]Mailing Lists
- [24]OTRS Ideas
- [25]Bug Tracking

- [26]Services / About
- [27]News / Announcements
- [28]Commercial Services (ext)
- [29]Contact us / Imprint

Copyright © 2001-2010 OTRS Team, All Rights Reserved.
[30] [31]

[32]Discover it [33]Get it [34]Get involved [35]Services / About



[1] http://www.otrs.com
[2] http://www.otrs.com
[3] http://doc.otrs.org/3.1/en/html/dynamicfields.html
[4] http://doc.otrs.org/3.1/en/html/dynamicfields.html
[5] http://doc.otrs.org/3.1/en/html/application.html
[6] http://doc.otrs.org/3.1/en/html/index.html
[7] http://otrs.org/praise/
[8] http://otrs.org/praise/
[9] http://otrs.org/products/otrs-help-desk/
[10] http://www.otrs-blog.org/
[11] http://demo.otrs.org/
[12] http://otrs.org/screenshots/
[13] http://www.youtube.com/user/diginin1974#g/u
[14] http://otrs.org/downloads/
[15] http://otrs.org/downloads/
[16] http://www.otrsondemand.com/
[17] http://otrs.org/releases/
[18] http://doc.otrs.org/
[19] http://otrs.org/source/
[20] http://dev.otrs.org/
[21] http://otrs.org/lists/
[22] http://forums.otrs.org/
[23] http://otrs.org/lists/
[24] http://otrsteam.ideascale.com/
[25] http://bugs.otrs.org/
[26] http://otrs.org/news/
[27] http://otrs.org/news/
[28] http://otrs.com/
[29] http://otrs.org/contact/
[30] http://www.ipexchange.de/
[31] http://www.thomas-krenn.com/
[32] http://otrs.org/
[33] http://otrs.org/downloads/
[34] http://otrs.org/lists/
[35] http://otrs.org/news/




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2012.04.09 11:51:17 由 服务人员
类型: 外部注解
附件:

从3.0升级到3.1 要做的一些事情

Upgrading the OTRS Framework

Upgrading the OTRS Framework

These instructions are for people upgrading OTRS from version 3.0 to 3.1, and
apply both for RPM and source code (tarball) upgrades.

If you are running a lower version of OTRS you have to follow the upgrade
path to 3.0 first (1.1->1.2->1.3->2.0->2.1->2.2->2.3->2.4->3.0->3.1 ...)!

Please note that if you upgrade from OTRS 2.2 or earlier, you have to take an
extra step; please read [1]http://bugs.otrs.org/show_bug.cgi?id=6798.

If you need to do a "patch level upgrade", which is an upgrade for instance
from OTRS version 3.1.1 to 3.1.3, you should skip steps 8, 10 and 12-19.

Please note that for upgrades from 3.1.beta1 or 3.1.beta2, an additional step
20 is needed!

If you are using Microsoft SQL Server as the DBMS for OTRS, please refer to
the manual, chapter "Upgrading Microsoft SQL Server Data Types" for
instructions how to upgrade the data types used by OTRS
([2]http://doc.otrs.org/3.1/en/html/upgrading-mssql-datatypes.html).

Stop all relevant services.

e. g. (depends on used services):

shell> /etc/init.d/cron stop
shell> /etc/init.d/postfix stop
shell> /etc/init.d/apache stop

Backup everything below $OTRS_HOME (default: OTRS_HOME=/opt/otrs):

Kernel/Config.pm

Kernel/Config/GenericAgent.pm

Kernel/Config/Files/ZZZAuto.pm

var/*

Backup the database.

Make sure that you have backed up everything ;-)

Setup new system (optional)

If possible, try this install on a separate machine for testing first.

Install the new release (tar or RPM).

With the tarball:

shell> cd /opt
shell> tar -xzf otrs-x.x.x.tar.gz
shell> ln -s otrs-x.x.x otrs

Restore old configuration files.

Kernel/Config.pm

Kernel/Config/GenericAgent.pm

Kernel/Config/Files/ZZZAuto.pm

With the RPM:

shell> rpm -Uvh otrs-x.x.x.-01.rpm

In this case the RPM update automatically restores the old configuration
files.

Own themes

Note: The OTRS themes between 3.0 and 3.1 are NOT compatible, so don't use
your old themes!

Themes are located under $OTRS_HOME/Kernel/Output/HTML/*/*.dtl (default:
OTRS_HOME=/opt/otrs).

Set file permissions.

If the tarball is used, execute:

shell> cd /opt/otrs/
shell> bin/otrs.SetPermissions.pl

with the permissions needed for your system setup.

Apply the database changes (part 1/2):

shell> cd /opt/otrs/

# MySQL:
shell> cat scripts/DBUpdate-to-3.1.mysql.sql | mysql -p -f -u root otrs
# PostgreSQL 8.2+:
shell> cat scripts/DBUpdate-to-3.1.postgresql.sql | psql otrs
# PostgreSQL, older versions:
shell> cat scripts/DBUpdate-to-3.1.postgresql_before_8_2.sql | psql otrs

NOTE: If you use PostgreSQL 8.1 or earlier, you need to activate the new
legacy driver for these older versions. Do this by adding a new line to your

Kernel/Config.pm

like this:

$Self->{DatabasePostgresqlBefore82} = 1;

Run the migration script (as user 'otrs', NOT as root):

You must execute the migration script to migrate some data from the old
database structure to the new one. Please run:

shell> scripts/DBUpdate-to-3.1.pl

Apply the database changes (part 2/2):

# MySQL:
shell> cat scripts/DBUpdate-to-3.1-post.mysql.sql | mysql -p -f -u root otrs
# PostgreSQL 8.2+:
shell> cat scripts/DBUpdate-to-3.1-post.postgresql.sql | psql otrs
# PostgreSQL, older versions:
shell> cat scripts/DBUpdate-to-3.1-post.postgresql_before_8_2.sql | psql otrs

Refresh the configuration and delete caches. Please run:

shell> bin/otrs.RebuildConfig.pl
shell> bin/otrs.DeleteCache.pl

Update your web server configuration

Note: this applies only if you use the Apache web server together with
mod_perl2, and do not use the configuration file directly from the OTRS
installation directory (e. g. with a symlink from the Apache configuration
directory).

Please add a new setting to the Apache configuration file for OTRS:

# set mod_perl2 option for generic interface
<Location /otrs/nph-genericinterface.pl>
PerlOptions -ParseHeaders
</Location>

Please see the file /opt/otrs/scripts/apache2-httpd.include.conf for an
example of where this new option needs to be added (inside the <IfModule
mod_perl.c> block).

In this file, you will also note a new section on caching:

<IfModule mod_headers.c>
<Directory "/opt/otrs/var/httpd/htdocs/skins/*/*/css-cache">
<FilesMatch "\.(css|CSS)$">
Header set Cache-Control "max-age=2592000 must-revalidate"
</FilesMatch>
</Directory>

<Directory "/opt/otrs/var/httpd/htdocs/js/js-cache">
<FilesMatch "\.(js|JS)$">
Header set Cache-Control "max-age=2592000 must-revalidate"
</FilesMatch>
</Directory>
</IfModule>

Please activate this in your local installation too, and make sure that
mod_headers is installed and active.

Restart your services.

e. g. (depends on used services):

shell> /etc/init.d/cron start
shell> /etc/init.d/postfix start
shell> /etc/init.d/apache start

Now you can log into your system.

Check installed packages

In the package manager, check if all packages are still marked as correctly
installed or if any require reinstallation or even a package upgrade.

Check for encoding issues

OTRS 3.1 only allows UTF-8 as internal charset. Non-UTF-8 installations of
OTRS must switch to UTF-8.

Escalation events

If you want to use the new escalation events in your system, you need to
activate the corresponding GenericAgent job in Kernel/Config/GenericAcent.pm.
Please look into Kernel/Config/GenericAgent.pm.dist for an example of how to
do this.

Ticket event handlers

The Event name TicketFreeTextUpdate_$Counter was renamed to
TicketDynamicFieldUpdate_$FieldName. If you have any custom event handlers for
these events, please adapt them.

DynamicField user preferences module

If you had one or more active custom settings for
"PreferencesGroups###Freetext", you need to adapt them to work with the new
DynamicFields engine. The PrefKey setting must be changed to
"UserDynamicField_DynamicField", where the part after the _ is the name of the
dynamic field. Existing values would need to be renamed in the database as
well.

Custom free field default value event handler

If you used the event handler
Ticket::EventModulePost###TicketFreeFieldDefault (not active by default),
you'll need to migrate its configuration to the new setting
Ticket::EventModulePost###TicketDynamicFieldDefault.

The configuration of this is slightly different; where you had to specify a
Counter indicating the TicketFreeText number previously, now you need to
specify the name of the DynamicField (for migrated fields, this will be
DynamicField_TicketFreeKey$Counter and DynamicField_TicketFreeText$Counter.
You need two separate entries now if you want to set both the key and the text
field.

FreeText/Time based ACLs

If you have any ACLs defined which involve freetext or freetime fields, you
need to adjust these ACL definitions.

Please have a look at [3]http://doc.otrs.org/3.1/en/html/acl.html. There you
can find a list of all possible ACL settings. In general, you need to add the
prefix "DynamicField_" to existing free field definitions, and you can add a
new "DynamicField" section to the "Properties" list for situations when a
ticket does not exist yet.

Database Upgrade During Beta Phase

This step is ONLY needed if you upgrade from 3.1.beta1 or 3.1.beta2! Please
apply the required database changes as follows:

MySQL:
shell> cat scripts/DBUpdate-3.1.beta.mysql.sql | mysql -p -f -u root otrs

PostgreSQL 8.2+:
shell> cat scripts/DBUpdate-3.1.beta.postgresql.sql | psql otrs

PostgreSQL, older versions:
shell> cat scripts/DBUpdate-3.1.beta.postgresql_before_8_2.sql | psql otrs

Well done!



[1] http://bugs.otrs.org/show_bug.cgi?id=6798
[2] http://doc.otrs.org/3.1/en/html/upgradi ... types.html
[3] http://doc.otrs.org/3.1/en/html/acl.html




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2012.04.24 17:10:06 由 服务人员
类型: 外部注解
附件:

开启
Ticket Escalations 通知

icket Escalations Part Two - SLA Based Escalations

In our last Tips and Tricks article we looked at setting up queue based
escalations. This week we're going to look at setting up SLA based
escalations.

Escalations are defined by setting a time limit by which your agents must
respond to a ticket - if the ticket is not responded to or updated
appropriately, it will escalate. When a ticket escalates, a few things happen:

- The ticket appears in the Escalated Tickets window of the Dashboard, making
escalated tickets highly visible even if the agent has not seen the email
notification.
- If the ticket is locked to an agent, the system unlocks it so that other
agents can take action on the ticket.

SLA based escalations work in conjunction with Services, which in turn work
in conjunction with Customers.

Let's say that ACME Inc. is a new customer of ours and we will be providing
them several services. One of these services is called High Priority Service.
In our OTRS system, we have previously created High Priority Service and
connected it to High Priority SLA to define escalation times. Now all we have
to do is connect High Priority Service to the Customer record for each person
from ACME Inc. who will be able to submit tickets.

If an individual from ACME Inc. creates a ticket through the customer portal,
they will be able to choose through dropdown menus which Service and SLA apply
to the ticket.

If an individual from ACME Inc. sends an email ticket, OTRS will recognize
the Customer based on email address, but an internal agent will have to
associate the correct service with the Ticket. Alternately, PostMaster Filters
can be configured to set the Service and SLA based on a subject or body
search.

If an individual from ACME Inc. opens a ticket via phone, the agent handling
the phone call will be able to select the appropriate Service and SLA once
they identify the Customer.

This example uses a B2B scenario, but the system works just as well in a B2C
scenario, because tickets get created by individuals, not organizations. In
OTRS, Customer records represent individuals. If you want to link all of the
Customers to an organization, use the CustomerID field as the common field. In
our example above, the CustomerID field for each individual would contain
'ACME Inc.'.

Directions:

Define your Services: Navigate to the Admin / Services dialog, and define
your service catalog; sub services are supported. We'll connect Services with
SLAs in the next step.

Define your SLAs: Navigate to the Admin / Service Level Agreements dialog,
and define your SLAs. In this step, you need to select which Services the SLA
will apply to. In the screenshot below you can see that the Security SLA we
are creating applies to Security, Security::Access Control, and three other
services. The '::' indicates a sub service:

-
- Escalation - first response time: Applies to new tickets only. If the first
response time is reached and no email or phone contact has been logged, the
ticket is escalated.
- Escalation - update time: If an article is added, such as a follow-up by
email or the customer portal, the escalation update time is reset. If there is
no customer contact, either email or phone, added to a ticket before the
update time is reached, the ticket is escalated.
- Escalation - solution time: If the ticket state is not set to 'closed'
before the solution time is reached, the ticket is escalated.

- Escalation times are set in minutes, so if you want tickets to escalate
after 2 hours, enter 120 into the appropriate field. To disable escalations,
set the appropriate field to 0.

- Notify by - define when the system sends escalation 'warning' emails, that
tell Agents a ticket will escalate soon. These are sent based on a percentage
of the escalation time; if you set the escalation time to 120, and Notify by
to 50%, an escalation warning email will get sent after 60 minutes. If you
don't want escalation warnings, leave the field blank. To use this feature,
you must enable escalation notification emails in the GenericAgent.pm file
(see below).

Enable Escalation Notification Emails: enabling escalation notifications
causes an email to get sent for every ticket that escalates, and enables the
sending of warning emails (defined above).

Who will receive the notifications: all agents who have at least read
permission into the queue which contains the escalated ticket, and who also
have that queue selected in their My Queues dialog. To learn more about agent
notifications, see this article.

To enable escalation notifications, edit GenericAgent.pm located at
/opt/otrs/Kernal/Config, and un-comment these lines:

-

When you're done it should look like this:

-

Create a Calendar: You have the option to choose a calendar to use for the
escalations. Calendars define when the escalations can actually happen. For
example, you can limit escalations to just business hours, so that tickets
won't continue to escalate during off hours. If you don't define a calendar,
tickets will escalate Mon-Fri, 8am-8pm, based on the default system calendar
(as defined in SysConfig -> Framework -> Core::Time). In the screenshot above
you can see that we have defined and selected Calender 2 for 24/7 escalations.

To edit calenders, go to Admin / SysConfig and search for 'Calendar'. In the
search results you'll see Core::Time::Calender1, Core::Time::Calender2, etc.
Edit one of these calendars to define the active escalation hours. When you're
done, click 'Submit'.

Connect your Customers: Once you have defined your Services and SLAs, you
need to create Customers via Admin / Customers, and then connect each customer
to the appropriate service via Admin / Customers <-> Services. From the
Customers <-> Services panel, you can connect individual services to each
customer, or you can define which services will be available to all customers
by default by clicking 'Edit default services'.






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2012.04.27 18:24:17 由 服务人员
类型: 外部注解
附件:

打开 负责人制度

Ticket::Responsible

Default value: No

Enables ticket responsible feature, to keep track of a specific ticket.






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2012.05.03 15:16:20 由 服务人员
类型: 外部注解
附件:

./otrs.UnlockTickets.pl --all

解除所有ticket的锁定

Ticket::Frontend::AgentTicketCompose###RequiredLock

Default value: Yes

Defines if a ticket lock is required in the ticket compose screen of the
agent interface (if the ticket isn't locked yet, the ticket gets locked and
the current agent will be set automatically as its owner).


关闭lock




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.05.04 15:28:21 由 服务人员
类型: 外部注解
附件:

in Ticket -> Frontend::Agent::ModuleRegistration

取消 phoneinbound phonoutbound




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2012.05.09 17:33:44 由 服务人员
类型: 外部注解
附件:

Frontend::Module###AgentTicketPhone Group:
Group ro:

取消 new phoone ticket

用于 客户满意度调查





发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.07 17:19:07 由 服务人员
类型: 外部注解
附件:

增加 对 customer 的 modulenotify

编辑
/opt/otrs/Kernel/Config/Files/Framework.xml

<ConfigItem Name="CustomerFrontend::NotifyModule###900-Generic" Required="0"
Valid="0">
<Description Translatable="1">Defines the module that shows a generic
notification in the agent interface. Either "Text" - if configured - or the
contents of "File" will be displayed.</Description>
<Group>Framework</Group>
<SubGroup>Frontend::Customer::ModuleNotify</SubGroup>
<Setting>
<Hash>
<Item
Key="Module">Kernel::Output::HTML::NotificationGeneric</Item>

<Item Key="Priority">Warning</Item>

<Item Key="Text">The OTRS Website</Item>

<Item
Key="File">&lt;OTRS_CONFIG_Home&gt;/var/notify.txt</Item>

<Item
Key="Link">[1]http://www.otrs.com</Item>

</Hash>

</Setting>

</ConfigItem>

然后 进入
Framework -> Frontend::Customer::ModuleNotify
即可 出现新的 notify编辑选项


[1] http://www.otrs.com




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2012.08.13 12:44:17 由 服务人员
类型: 外部注解
附件:

找回 ticket

[1]Re: How to activate the companytickets for the customer

[2]by [3]crythias » 10 Sep 2010, 17:58

The customer_id is indeed stored with the ticket. That would be why you can't
see it. New tickets won't have that problem.
To test on your test server, either:
option 1
make sure the customer user has the correct new customerid, then:
change customers on a ticket, then change to the original customer

or
option 2 - the faster way, but it's also the more dangerous way
Code: [4]Select all

UPDATE ticket SET customer_id="customerID" WHERE
customer_user_id="customeruserid";

customerID is the string that you assigned to the company/customer.
customeruserid is a little bit more difficult to determine. It's a unique
value to the customer user that could be the email address, the username, an
index number...

If I knew a ticketnumber (tn), I'd do this:
Code: [5]Select all

SELECT tn, title, customer_user_id, customer_id FROM ticket WHERE
tn="ticketnumber";

Obviously, the only thing that is important is the third column, but "seeing"
the other information can give you a better piece of mind that you've got the
right ticket, therefore the correct customer_user_id.


[1] viewtopic.php?f=61&amp;t=5931#p23875
[2] viewtopic.php?p=23875#p23875
[3] memberlist.php?mode=viewprofile&amp;u=3561
[4] viewtopic.php?f=61&amp;t=5931#
[5] viewtopic.php?f=61&amp;t=5931#




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.18 13:51:38 由 服务人员
类型: 外部注解
附件:

添加“关注”功能

watch




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.19 15:07:22 由 服务人员
类型: 外部注解
附件:

RSS 显示还是有点用处的

DashboardBackend###0410-RSS 字段值
删除该条目删除该条目删除该条目删除该条目删除该条目删除该条目删除该条目删除该条目删除该条目






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.21 05:48:48 由 服务人员
类型: 外部注解
附件:

不上 前期 做 满调时候 页面自动带模板

文件 AgentTicketPhone.dtl

最后部分修改

<script type="text/javascript">//<![CDATA[
Core.Agent.TicketAction.Init();

# example template form for customizations
#<form action="$Env{"CGIHandle"}" method="post" enctype="multipart/form-data"
id="Template1">
# <input type="hidden" name="Action" value="$Env{"Action"}"/>
# <input type="hidden" name="Subaction" value="StoreNew"/>
# <input type="hidden" name="FormID" value="$QData{"FormID"}"/>
# <input type="hidden" name="ExpandCustomerName" value="1"/>
# <input type="hidden" name="Subject" value="Example Subject"/>
# <input type="hidden" name="Body" value="Name:
#Product:
#Comment:"/>
#</form>

switch ($('#TypeID').val() ) { //this is where the queue is relevant (Dest =
Queue)
case "1": // need to slash escape the pipes
document.compose.RichText.value = '<style type="text/css"><!--
BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"WenQuanYi Zen Hei";
font-size:small } --></style><table border="0" cellspacing="0" cols="6"
frame="VOID" rules="NONE"><colgroup><col width="96" /><col width="162" /><col
width="73" /><col width="101" /><col width="67" /><col width="77"
/></colgroup><tbody><tr><td align="CENTER" colspan="6" height="41"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE" width="577"><b>$Text{"301"}</b></td></tr><tr><td
align="JUSTIFY" bgcolor="#CCFFFF" height="29" style="border-top: 1px solid
#000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"302"}</td><td
align="JUSTIFY" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td><td align="JUSTIFY" bgcolor="#CCFFFF"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"303"}</td><td align="JUSTIFY" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000" valign="MIDDLE">&nbsp;</td><td
align="JUSTIFY" bgcolor="#CCFFFF" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"339"}</td><td
align="CENTER" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#E6E6E6"
colspan="6" height="23" style="border-top: 1px solid #000000; border-bottom:
1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid
#000000" valign="MIDDLE">$Text{"305"}</td></tr><tr><td align="LEFT"
bgcolor="#CCFFFF" height="31" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"306"}</td><td
align="LEFT" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td><td align="LEFT" bgcolor="#CCFFFF"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"307"}</td><td align="CENTER" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000" valign="MIDDLE">&nbsp;</td><td
align="LEFT" bgcolor="#CCFFFF" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"308"}</td><td
align="CENTER" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="JUSTIFY" bgcolor="#CCFFFF"
height="31" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"309"}</td><td align="CENTER" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000" valign="MIDDLE">&nbsp;</td><td
align="LEFT" bgcolor="#CCFFFF" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE"><font
size="2">$Text{"310"}</font></td><td align="MIDDLE" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000">&nbsp;</td><td align="LEFT"
bgcolor="#CCFFFF" style="border-top: 1px solid #000000; border-bottom: 1px
solid #000000; border-left: 1px solid #000000; border-right: 1px solid
#000000" valign="MIDDLE">$Text{"311"}</td><td align="CENTER"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="JUSTIFY" bgcolor="#CCFFFF"
height="37" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"312"}</td><td align="CENTER" colspan="5"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"322"} $Text{"323"} $Text{"324"}
$Text{"325"}</font></td></tr><tr><td align="JUSTIFY" bgcolor="#CCFFFF"
height="91" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"313"}</td><td align="LEFT" colspan="5"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="LEFT">&nbsp;</td></tr><tr><td align="LEFT" bgcolor="#C0C0C0"
height="33" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"337"}</td><td align="CENTER" colspan="5"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr></tbody></table>';
break;
case "2": // need to slash escape the pipes
document.compose.RichText.value = '<style type="text/css"><!--
BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"WenQuanYi Zen Hei";
font-size:small } --></style><table border="0" cellspacing="0" cols="6"
frame="VOID" rules="NONE"><colgroup><col width="96" /><col width="162" /><col
width="73" /><col width="101" /><col width="67" /><col width="77"
/></colgroup><tbody><tr><td align="CENTER" colspan="6" height="41"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE" width="577"><b>$Text{"301"}</b></td></tr><tr><td
align="JUSTIFY" bgcolor="#CCFFFF" height="29" style="border-top: 1px solid
#000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"302"}</td><td
align="JUSTIFY" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td><td align="JUSTIFY" bgcolor="#CCFFFF"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"303"}</td><td align="JUSTIFY" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000" valign="MIDDLE">&nbsp;</td><td
align="JUSTIFY" bgcolor="#CCFFFF" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"339"}</td><td
align="CENTER" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#E6E6E6"
colspan="6" height="23" style="border-top: 1px solid #000000; border-bottom:
1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid
#000000" valign="MIDDLE">$Text{"305"}</td></tr><tr><td align="LEFT"
bgcolor="#CCFFFF" height="31" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"306"}</td><td
align="LEFT" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td><td align="LEFT" bgcolor="#CCFFFF"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"307"}</td><td align="CENTER" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000" valign="MIDDLE">&nbsp;</td><td
align="LEFT" bgcolor="#CCFFFF" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"308"}</td><td
align="CENTER" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="JUSTIFY" bgcolor="#CCFFFF"
height="31" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"309"}</td><td align="CENTER" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000" valign="MIDDLE">&nbsp;</td><td
align="LEFT" bgcolor="#CCFFFF" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE"><font
size="2">$Text{"310"}</font></td><td align="MIDDLE" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000">&nbsp;</td><td align="LEFT"
bgcolor="#CCFFFF" style="border-top: 1px solid #000000; border-bottom: 1px
solid #000000; border-left: 1px solid #000000; border-right: 1px solid
#000000" valign="MIDDLE">$Text{"311"}</td><td align="CENTER"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="JUSTIFY" bgcolor="#CCFFFF"
height="37" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"312"}</td><td align="CENTER" colspan="5"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"322"} $Text{"323"} $Text{"324"}
$Text{"325"}</font></td></tr><tr><td align="JUSTIFY" bgcolor="#CCFFFF"
height="91" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"313"}</td><td align="LEFT" colspan="5"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="LEFT">&nbsp;</td></tr><tr><td align="LEFT" bgcolor="#C0C0C0"
height="33" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"337"}</td><td align="CENTER" colspan="5"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr></tbody></table>';
break;
default:
document.compose.RichText.value ='<style type="text/css"><!--
BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"WenQuanYi Zen Hei";
font-size:small } --></style><table border="0" cellspacing="0" cols="4"
frame="VOID" rules="NONE"><colgroup><col width="72" /><col width="128" /><col
width="72" /><col width="158" /></colgroup><tbody><tr><td align="CENTER"
colspan="4" height="42" style="border-top: 1px solid #000000; border-bottom:
1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid
#000000" valign="MIDDLE" width="431"><b>$Text{"401"}</b></td></tr><tr><td
align="CENTER" bgcolor="#CCFFFF" height="35" style="border-top: 1px solid
#000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"402"}</td><td
align="CENTER" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td><td align="CENTER" bgcolor="#CCFFFF"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"403"}</td><td align="CENTER" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#CCFFFF"
height="36" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"404"}</font></td><td align="CENTER"
colspan="3" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#CCFFFF"
height="115" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"405"}</font></td><td align="CENTER"
colspan="3" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#CCFFFF"
height="116" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"406"}</font></td><td align="CENTER"
colspan="3" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="LEFT">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#C0C0C0"
height="56" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"407"}</font></td><td align="CENTER"
bgcolor="#FFFFFF" colspan="3" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr></tbody></table>';

}

//]]></script>
<!--dtl:js_on_document_complete-->
Last edited by BOoRFGOnZ on 19 Aug 2013, 03:13, edited 1 time in total.

BOoRFGOnZ
OTRS newbie
Posts: 8
Joined: 09 Aug 2013, 03:19
OTRS Version?: 3.2.9

Re: 大家好,我也共享一下改过的一些地方,供大家参考

Postby BOoRFGOnZ » 09 Aug 2013, 06:07

发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.21 07:50:03 由 服务人员
类型: 外部注解
附件:


修改程序,添加 400电话类型 和 满调类型 不同的 typeid 设置

还是这个文件 AgentTicketPhone.dtl

<!-- dtl:block:TicketType -->
<label class="Mandatory" for="TypeID"><span
class="Marker">*</span> $Text{"Type"}:</label>
<div class="Field">
$Data{"TypeStrg"}
<div id="TypeIDError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<div id="TypeIDServerError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
#weiwei
if (document.compose.TypeID.value=='1')
{
document.compose.TypeID.value='5';
#$("#TypeID").val($("#TypeID option:eq(2)").val());
}
else
{

$("#TypeID").val($("#TypeID option:eq(1)").val());
}
-- 插入




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.22 15:36:00 由 服务人员
类型: 外部注解
附件:

实现company 查看 利用acl来控制

1,删除默认配置

[1]http://59.108.119.9/otrs/index.pl?Action=AdminSysConfig;Subaction=Edit;SysConfigSubGroup=Frontend
%3A%3ACustomer%3A%3AModuleRegistration;SysConfigGroup=Ticket

以下为存在时候的配置

导航栏 => 组名: 新群组
群组ro: 新群组ro
描述:
名称:
链接:
链接选项:
类型:
优先级:
块:
导航栏:
进钥:
删除该条目

组名: 新群组
群组ro: 新群组ro
描述:
名称:
链接:
链接选项:
类型:
优先级:
块:
导航栏:
进钥:
删除该条目

新增导航栏条目

2,添加 acl

Hide Company Tickets tab in Customer Portal based on Users Group Membership
From OtterHub - OTRS Community Wiki

Jump to: [2]navigation, [3]search

If you wish to restrict the Company Tickets tab in the Customer Portal to a
select few, e.g. Managers, then here is recipe that works for v3 --ekovarski

In Config.pm, add the following:

$Self->{CustomerGroupAlwaysGroups} = ['users'];
$Self->{CustomerGroupSupport} = 1;
$Self->{'CustomerFrontend::Module'}->{'CustomerTicketOverView'} = {
'Title' => 'Overview',
'Description' => 'Overview of customer tickets',
'NavBarName' => 'Ticket',
'NavBar' => [
{
'Description' => 'My Tickets',
'Name' => 'My Tickets',
'Link' =>
'Action=CustomerTicketOverView;Subaction=MyTickets',
'Prio' => '110',
'AccessKey' => 'm'
},
{
'Group' => [ 'acl_CompanyTicketOverView' ],
'Description' => 'Company Tickets',
'Name' => 'Company Tickets',
'Link' =>
'Action=CustomerTicketOverView;Subaction=CompanyTickets',
'Prio' => '120',
'AccessKey' => 'c'
}
],
};

Now login as an administrator in OTRS, and create a group called
'acl_CompanyTicketOverView' in Admin -> Agent Management -> Groups.

Once the group is created, go to Admin -> Customer Management -> Customers
<-> Groups. From Customers, select the user that you wish to have rights to
view the Company Tickets tab and give them "RW" permissions to
acl_CompanyTicketOverView.

If you find any errors in this, please correct the wiki entry so it doesn't
get stale. Thank you!

3, 配置 company 编号


[1] http://59.108.119.9/otrs/index.pl?Actio ... up=Fronten
d%3A%3ACustomer%3A%3AModuleRegistration;SysConfigGroup=Ticket
[2] http://wiki.otterhub.org/index.php?titl ... ased_on_Us
ers_Group_Membership#mw-head
[3] http://wiki.otterhub.org/index.php?titl ... ased_on_Us
ers_Group_Membership#p-search




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.23 04:01:53 由 服务人员
类型: 外部注解
附件:

对 yan.xiang bin.li 添加 acl_company 组的权限 提供company视图

另外 添加公司名称与id相对应

并修改所有 customerid




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.23 07:43:12 由 服务人员
类型: 外部注解
附件:

利用 “链接” 进行主从 ticket设置,现在已经用起来了。




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.23 08:13:35 由 服务人员
类型: 外部注解
附件:

修改 Action=AgentTicketEmail

默认显示 维护与任务书 以及 richtext 界面

[root@otrs Standard]# cat AgentTicketEmail.dtl
# --
# AgentTicketEmail.dtl - provides HTML form for agent email
# Copyright (C) 2001-2012 OTRS AG, [1]http://otrs.org/
# --
# $Id: AgentTicketEmail.dtl,v 1.158.2.3 2012/05/25 13:32:30 mg Exp $
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see [2]http://www.gnu.org/licenses/agpl.txt.
# --

$Include{"AgentCustomerSearch"}
<div class="MainBox ARIARoleMain">

<h1>$Text{"Create New Email Ticket"}</h1>

<div class="LayoutFixedSidebar SidebarLast">

# show customer info table
<!-- dtl:block:CustomerTable -->
<div id="CustomerInfo" class="SidebarColumn WidgetSimple">
<div class="Header">
<h2>$Text{"Customer Information"}</h2>
</div>
<div class="Content">
$Data{"CustomerTable"}
</div>
</div>
<!-- dtl:block:CustomerTable -->

<div class="ContentColumn">
<form action="$Env{"CGIHandle"}" method="post"
enctype="multipart/form-data" name="compose" id="NewEmailTicket"
class="Validate PreventMultipleSubmits">
<input type="hidden" name="Action" value="$Env{"Action"}"/>
<input type="hidden" name="Subaction" value="StoreNew"/>
<input type="hidden" name="FormID" value="$QData{"FormID"}"/>
<input type="hidden" name="ExpandCustomerName"
id="ExpandCustomerName" value="0"/>
<input type="hidden" name="OwnerAll" id="OwnerAll"
value="$QData{"OwnerAll"}"/>
<input type="hidden" name="ResponsibleAll" id="ResponsibleAll"
value="$QData{"ResponsibleAll"}"/>
<input type="hidden" name="PreSelectedCustomerUser"
id="PreSelectedCustomerUser" value=""/>
<input type="hidden" name="SelectedCustomerUser"
id="SelectedCustomerUser" value="$QData{"CustomerUser"}"/>
<input type="hidden" name="TicketID"
value="$QData{"TicketID"}"/>
<fieldset class="TableLike">

# example template for customizations, see hidden form at the end of the file
# <label>$Text{"Templates"}:</label>
# <div class="Field">
# <button type="button"
onclick="$('#Template1').submit()" value="$Text{"Example
Template"}">$Text{"Example Template"}</button>
# </div>
# <div class="Clear"></div>

<!-- dtl:block:TicketType -->
<label class="Mandatory" for="TypeID"><span
class="Marker">*</span> $Text{"Type"}:</label>
<div class="Field">
$Data{"TypeStrg"}
<div id="TypeIDError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<div id="TypeIDServerError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
#weiwei
document.compose.TypeID.value='1';

$('#TypeID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate', 'TypeID', [
'Dest', 'NewUserID', 'NewResponsibleID', 'NextStateID', 'PriorityID',
'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>
<!-- dtl:block:TicketType -->

<label class="Mandatory" for="Dest"><span
class="Marker">*</span> $Text{"From queue"}:</label>
<div class="Field">
$Data{"FromStrg"}
<div id="DestError" class="TooltipErrorMessage"
><p>$Text{"This field is required."}</p></div>
<div id="DestServerError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#Dest').bind('change', function (Event) {
var SignatureURL =
'$Env{"Baselink"}Action=$Env{"Action"};Subaction=Signature;Dest=' +
$(this).val();
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate', 'Dest',
['Signature', 'NewUserID', 'NewResponsibleID', 'NextStateID', 'PriorityID',
'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
if (!Core.Config.Get('SessionIDCookie')) {
SignatureURL += ';' + Core.Config.Get('SessionName') + '=' +
Core.Config.Get('SessionID');
}
$('#Signature').attr('src', SignatureURL);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>

<div class="Field $QData{"CustomerHiddenContainer"}">
<div class="CustomerTicketTemplateToCustomer
SpacingTopSmall Hidden">
<input name="CustomerSelected"
id="CustomerSelected" class="CustomerTicketRadio" type="radio" value=""/>
<input name="CustomerKey" id="CustomerKey"
class="CustomerKey" type="hidden" value=""/>
<input class="CustomerTicketText W75pc"
name="CustomerTicketText" id="CustomerTicketText" type="text" value=""
readonly="readonly" />
<button type="button" id="RemoveCustomerTicket"
class="Remove CustomerTicketRemove" value="$Text{"Remove Ticket
Customer"}">$Text{"Remove Ticket Customer"}</button>
</div>

<div id="TicketCustomerContentToCustomer"
class="CustomerContainer">
<!-- dtl:block:MultipleCustomer -->
<div class="SpacingTopSmall ">
<input name="CustomerSelected"
id="CustomerSelected" class="CustomerTicketRadio" type="radio"
value="$QData{"Count"}" $QData{"CustomerSelected"} $QData{"CustomerDisabled"}
/>
<input name="CustomerKey_$QData{"Count"}"
id="CustomerKey_$QData{"Count"}" class="CustomerKey" type="hidden"
value="$QData{"CustomerKey"}"/>
<input class="CustomerTicketText W75pc
$QData{"CustomerError"}" name="CustomerTicketText_$Data{"Count"}"
id="CustomerTicketText_$Data{"Count"}" type="text"
value="$QData{"CustomerElement"}" readonly="readonly" />
<button type="button"
id="RemoveCustomerTicket_$Data{"Count"}" class="Remove CustomerTicketRemove"
value="$Text{"Remove Ticket Customer"}">$Text{"Remove Ticket
Customer"}</button>

<!-- dtl:block:CustomerErrorExplantion -->
<p class="Explanation Error">$Text{"Please
remove this entry and enter a new one with the correct value."}</p>
<!-- dtl:block:CustomerErrorExplantion -->

<div
id="CustomerTicketText_$Data{"Count"}ServerError" class="TooltipErrorMessage">
<!-- dtl:block:CustomerGenericServerErrorMsg -->
<p>$Text{"This field is required."}</p>
<!-- dtl:block:CustomerGenericServerErrorMsg -->
<!-- dtl:block:InvalidConfigServerErrorMsg -->
<p>$Text{"This email address is not
allowed due to the system configuration."}</p>
<!-- dtl:block:InvalidConfigServerErrorMsg -->
<!-- dtl:block:InvalidMXServerErrorMsg -->
<p>$Text{"This email address failed MX
check."}</p>
<!-- dtl:block:InvalidMXServerErrorMsg -->
<!-- dtl:block:InvalidDNSServerErrorMsg -->
<p>$Text{"DNS problem, please check your
configuration and the error log."}</p>
<!-- dtl:block:InvalidDNSServerErrorMsg -->
<!-- dtl:block:InvalidSyntaxServerErrorMsg -->
<p>$Text{"The syntax of this email address
is incorrect."}</p>
<!-- dtl:block:InvalidSyntaxServerErrorMsg -->
<!-- dtl:block:IsDuplicatedServerErrorMsg -->
<p>$Text{"This address already exists on
the address list."}</p>
<!-- dtl:block:IsDuplicatedServerErrorMsg -->
</div>
</div>
<!-- dtl:block:MultipleCustomer -->

</div>
<!-- dtl:block:MultipleCustomerCounter -->
<input name="CustomerTicketCounterToCustomer"
id="CustomerTicketCounterToCustomer" type="hidden"
value="$QData{"CustomerCounter"}"/>
<!-- dtl:block:MultipleCustomerCounter -->
</div>
<div class="Clear"></div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('.CustomerTicketRadio').bind('change', function () {
var CustomerKey;
if ( $(this).attr('checked') ){

CustomerKey = $( '#CustomerKey_' +$(this).val() ).val();
// get customer tickets
Core.Agent.CustomerSearch.ReloadCustomerInfo(CustomerKey);
}
return false;
});

$('.CustomerTicketRemove').bind('click', function () {
Core.Agent.CustomerSearch.RemoveCustomerTicket( $(this) );
return false;
});
//]]></script>
<!--dtl:js_on_document_complete-->

<!-- dtl:block:FromExternalCustomer -->
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
Core.Agent.CustomerSearch.AddTicketCustomer( 'ToCustomer',
"$QData{"Email"}", "$QData{"Customer"}", true );
//]]></script>
<!--dtl:js_on_document_complete-->
<!-- dtl:block:FromExternalCustomer -->

<label for="ToCustomer" class="Mandatory"><span
class="Marker">*</span>$Text{"To customer"}:</label>
<div class="Field">
<input id="ToCustomer" type="text" name="ToCustomer"
value="" class="CustomerAutoComplete W75pc AutocompleteOff
$QData{"ToInvalid"}"/>
<div id="ToCustomerServerError"
class="TooltipErrorMessage">
<!-- dtl:block:ToServerErrorMsg -->
<p>$Text{"Please include at least one customer for
the ticket."}</p>
<!-- dtl:block:ToServerErrorMsg -->
</div>
</div>
<div class="Clear"></div>

<div class="Field $QData{"CcCustomerHiddenContainer"}">
<div class="CustomerTicketTemplateCcCustomer
SpacingTopSmall Hidden">
<input name="CcCustomerKey" id="CcCustomerKey"
class="CustomerKey" type="hidden" value=""/>
<input class="CcCustomerTicketText W75pc"
name="CcCustomerTicketText" id="CcCustomerTicketText" type="text" value=""
readonly="readonly" />
<button type="button" id="CcRemoveCustomerTicket"
class="Remove CustomerTicketRemove" value="$Text{"Remove Cc"}">$Text{"Remove
Cc"}</button>
</div>

<div id="TicketCustomerContentCcCustomer">
<!-- dtl:block:CcMultipleCustomer -->
<div class="SpacingTopSmall ">
<input name="CcCustomerKey_$QData{"Count"}"
id="CcCustomerKey_$QData{"Count"}" class="CustomerKey" type="hidden"
value="$QData{"CustomerKey"}"/>
<input class="CcCustomerTicketText W75pc
$QData{"CustomerError"}" name="CcCustomerTicketText_$Data{"Count"}"
id="CcCustomerTicketText_$Data{"Count"}" type="text"
value="$QData{"CustomerElement"}" readonly="readonly" />
<button type="button"
id="CcRemoveCustomerTicket_$Data{"Count"}" class="Remove CustomerTicketRemove"
value="$Text{"Remove Cc"}">$Text{"Remove Cc"}</button>

<!-- dtl:block:CcCustomerErrorExplantion -->
<p class="Explanation Error">$Text{"Please
remove this entry and enter a new one with the correct value."}</p>
<!-- dtl:block:CcCustomerErrorExplantion -->

<div
id="CcCustomerTicketText_$Data{"Count"}ServerError"
class="TooltipErrorMessage">
<!-- dtl:block:CcCustomerGenericServerErrorMsg -->
<p>$Text{"This field is required."}</p>
<!-- dtl:block:CcCustomerGenericServerErrorMsg -->
<!-- dtl:block:CcInvalidConfigServerErrorMsg -->
<p>$Text{"This email address is not
allowed due to the system configuration."}</p>
<!-- dtl:block:CcInvalidConfigServerErrorMsg -->
<!-- dtl:block:CcInvalidMXServerErrorMsg -->
<p>$Text{"This email address failed MX
check."}</p>
<!-- dtl:block:CcInvalidMXServerErrorMsg -->
<!-- dtl:block:CcInvalidDNSServerErrorMsg -->
<p>$Text{"DNS problem, please check your
configuration and the error log."}</p>
<!-- dtl:block:CcInvalidDNSServerErrorMsg -->
<!-- dtl:block:CcInvalidSyntaxServerErrorMsg -->
<p>$Text{"The syntax of this email address
is incorrect."}</p>
<!-- dtl:block:CcInvalidSyntaxServerErrorMsg -->
<!-- dtl:block:CcIsDuplicatedServerErrorMsg -->
<p>$Text{"This address already exists on
the address list."}</p>
<!-- dtl:block:CcIsDuplicatedServerErrorMsg -->
</div>
</div>
<!-- dtl:block:CcMultipleCustomer -->

</div>
<!-- dtl:block:CcMultipleCustomerCounter -->
<input name="CustomerTicketCounterCcCustomer"
id="CustomerTicketCounterCcCustomer" type="hidden"
value="$QData{"CustomerCounter"}"/>
<!-- dtl:block:CcMultipleCustomerCounter -->
</div>
<div class="Clear"></div>

<label for="CcCustomer">$Text{"Cc"}:</label>
<div class="Field">
<input id="CcCustomer" type="text" name="CcCustomer"
value="" class="CustomerAutoComplete W75pc AutocompleteOff
$QData{"CcInvalid"}"/>
</div>
<div class="Clear"></div>

<div class="Field $QData{"BccCustomerHiddenContainer"}">
<div class="CustomerTicketTemplateBccCustomer
SpacingTopSmall Hidden">
<input name="BccCustomerKey" id="BccCustomerKey"
class="CustomerKey" type="hidden" value=""/>
<input class="BccCustomerTicketText W75pc"
name="BccCustomerTicketText" id="BccCustomerTicketText" type="text" value=""
readonly="readonly" />
<button type="button" id="BccRemoveCustomerTicket"
class="Remove CustomerTicketRemove" value="$Text{"Remove Bcc"}">$Text{"Remove
Bcc"}</button>
</div>

<div id="TicketCustomerContentBccCustomer">
<!-- dtl:block:BccMultipleCustomer -->
<div class="SpacingTopSmall ">
<input name="BccCustomerKey_$QData{"Count"}"
id="BccCustomerKey_$QData{"Count"}" class="CustomerKey" type="hidden"
value="$QData{"CustomerKey"}"/>
<input class="BccCustomerTicketText W75pc
$QData{"CustomerError"}" name="BccCustomerTicketText_$Data{"Count"}"
id="BccCustomerTicketText_$Data{"Count"}" type="text"
value="$QData{"CustomerElement"}" readonly="readonly" />
<button type="button"
id="BccRemoveCustomerTicket_$Data{"Count"}" class="Remove
CustomerTicketRemove" value="$Text{"Remove Bcc"}">$Text{"Remove Bcc"}</button>

<!-- dtl:block:BccCustomerErrorExplantion -->
<p class="Explanation Error">$Text{"Please
remove this entry and enter a new one with the correct value."}</p>
<!-- dtl:block:BccCustomerErrorExplantion -->

<div
id="BccCustomerTicketText_$Data{"Count"}ServerError"
class="TooltipErrorMessage">
<!-- dtl:block:BccCustomerGenericServerErrorMsg -->
<p>$Text{"This field is required."}</p>
<!-- dtl:block:BccCustomerGenericServerErrorMsg -->
<!-- dtl:block:BccInvalidConfigServerErrorMsg -->
<p>$Text{"This email address is not
allowed due to the system configuration."}</p>
<!-- dtl:block:BccInvalidConfigServerErrorMsg -->
<!-- dtl:block:BccInvalidMXServerErrorMsg -->
<p>$Text{"This email address failed MX
check."}</p>
<!-- dtl:block:BccInvalidMXServerErrorMsg -->
<!-- dtl:block:BccInvalidDNSServerErrorMsg -->
<p>$Text{"DNS problem, please check your
configuration and the error log."}</p>
<!-- dtl:block:BccInvalidDNSServerErrorMsg -->
<!-- dtl:block:BccInvalidSyntaxServerErrorMsg -->
<p>$Text{"The syntax of this email address
is incorrect."}</p>
<!-- dtl:block:BccInvalidSyntaxServerErrorMsg -->
<!-- dtl:block:BccIsDuplicatedServerErrorMsg -->
<p>$Text{"This address already exists on
the address list."}</p>
<!-- dtl:block:BccIsDuplicatedServerErrorMsg -->
</div>
</div>
<!-- dtl:block:BccMultipleCustomer -->

</div>
<!-- dtl:block:BccMultipleCustomerCounter -->
<input name="CustomerTicketCounterBccCustomer"
id="CustomerTicketCounterBccCustomer" type="hidden"
value="$QData{"CustomerCounter"}"/>
<!-- dtl:block:BccMultipleCustomerCounter -->
</div>
<div class="Clear"></div>

<label for="BccCustomer">$Text{"Bcc"}:</label>
<div class="Field">
<input id="BccCustomer" type="text" name="BccCustomer"
value="" class="CustomerAutoComplete W75pc AutocompleteOff
$QData{"BccInvalid"}"/>
</div>
<div class="Clear"></div>

<!-- dtl:block:TicketService -->
<label for="ServiceID">$Text{"Service"}:</label>
<div class="Field">
$Data{"ServiceStrg"}
<div id="ServiceIDServerError"
class="TooltipErrorMessage"><p>$Text{"Service invalid."}</p></div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#ServiceID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate', 'ServiceID',
['TypeID', 'Dest', 'NewUserID', 'NewResponsibleID', 'NextStateID',
'PriorityID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>
<!-- dtl:block:TicketService -->

<!-- dtl:block:TicketSLA -->
<label for="SLAID">$Text{"Service Level
Agreement"}:</label>
<div class="Field">
$Data{"SLAStrg"}
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#SLAID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate', 'SLAID',
['TypeID', 'Dest', 'NewUserID', 'NewResponsibleID', 'ServiceID',
'NextStateID', 'PriorityID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>
<!-- dtl:block:TicketSLA -->

<!-- dtl:block:OwnerSelection -->
<label for="NewUserID">$Text{"Owner"}:</label>
<div class="Field">
$Data{"OptionStrg"}
<a href="#" id="OwnerSelectionGetAll"
class="GetAllAJAX" title="$Text{"Get all"}">$Text{"Get all"}</a>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#OwnerSelectionGetAll').bind('click', function (Event) {
$('#OwnerAll').val('1'); // Needed? Why?
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate', 'OwnerAll',
['NewUserID'], function() {
$('#NewUserID').focus();
});
return false;
});

$('#NewUserID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate', 'NewUserID', [
'TypeID', 'Dest', 'NewResponsibleID', 'NextStateID', 'PriorityID',
'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>
<!-- dtl:block:OwnerSelection -->

<!-- dtl:block:ResponsibleSelection -->
<label
for="NewResponsibleID">$Text{"Responsible"}:</label>
<div class="Field">
$Data{"ResponsibleOptionStrg"}
<a href="#" id="ResponsibleSelectionGetAll"
class="GetAllAJAX" title="$Text{"Get all"}">$Text{"Get all"}</a>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#ResponsibleSelectionGetAll').bind('click', function (Event) {
$('#ResponsibleAll').val('1'); // Needed? Why?
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate', 'ResponsibleAll',
['NewResponsibleID'], function() {
$('#NewResponsibleID').focus();
});
return false;
});

$('#NewResponsibleID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate',
'NewResponsibleID', [ 'TypeID', 'Dest', 'NewUserID', 'NextStateID',
'PriorityID', 'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>
<!-- dtl:block:ResponsibleSelection -->

<!-- dtl:block:Option -->
<label for="$QData{"Name"}">$Text{"$Data{"Key"}"}:</label>
<div class="Field">
$Data{"Value"}
<div id="$QData{"Name"}ServerError"
class="TooltipErrorMessage"><p>$QData{"Invalid"}</p></div>
</div>
<div class="Clear"></div>
<!-- dtl:block:Option -->

<label class="Mandatory" for="Subject"><span
class="Marker">*</span> $Text{"Subject"}:</label>
<div class="Field">
<input type="text" class="Validate_Required
$QData{"SubjectInvalid"} W75pc " name="Subject" id="Subject"
value="$QData{"Subject"}"/>
<div id="SubjectError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<div id="SubjectServerError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
</div>
<div class="Clear"></div>

<!-- dtl:block:TicketOptions -->
<label>$Text{"Options"}:</label>
<div class="Field">

<!-- OutputFilterHook_TicketOptionsBegin -->

<!-- dtl:block:SpellCheck -->
<a href="#" id="OptionSpellCheck">[ $Text{"Spell
check"} ]</a>
<!-- dtl:block:SpellCheck -->
<!-- dtl:block:AddressBook -->
<a href="#" id="OptionAddressBook">[ $Text{"Address
book"} ]</a>
<!-- dtl:block:AddressBook -->
<!-- dtl:block:OptionCustomer -->
<a href="#" id="OptionCustomer">[ $Text{"Customer"}
]</a>
<!-- dtl:block:OptionCustomer -->

<!-- OutputFilterHook_TicketOptionsEnd -->

</div>
<div class="Clear"></div>
<!-- dtl:block:TicketOptions -->

<!-- OutputFilterHook_NoTicketOptionsFallback -->

<label class="Mandatory" for="RichText"><span
class="Marker">*</span> $Text{"Text"}:</label>
<div class="RichTextField">

<!-- dtl:block:RichText -->
$Include{"RichTextEditor"}
<!-- dtl:block:RichText -->

<textarea id="RichText" class="RichText
Validate_Required $QData{"BodyInvalid"}" name="Body" title="Message body"
rows="15"
cols="$Config{"Ticket::Frontend::TextAreaEmail"}">$QData{"Body"}</textarea>
<div id="RichTextError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<div id="RichTextServerError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
</div>
<div class="Clear"></div>

<label for="Signature">$Text{"Signature"}:</label>
<div class="RichTextField">
<input type="hidden" name="Signature"
value="$QData{"Signature"}"/>
<iframe height="140" width="620" frameborder="0"
id="Signature" class="Signature"
src="$Env{"Baselink"}Action=$Env{"Action"};Subaction=Signature;QueueID=$QData{"QueueID"}"></iframe>
</div>
<div class="Clear"></div>

<label>$Text{"Attachment"}:</label>
<div class="Field">
<ul>

<!-- dtl:block:Attachment -->
<li>
$QData{"Filename"} ($QData{"Filesize"})
<button type="button"
id="AttachmentDeleteButton$QData{"FileID"}"
name="AttachmentDeleteButton$QData{"FileID"}" value="$Text{"Delete"}"
class="SpacingLeft">$Text{"Delete"}</button>
<input type="hidden"
id="AttachmentDelete$QData{"FileID"}" name="AttachmentDelete$QData{"FileID"}"
/>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#AttachmentDeleteButton$QData{"FileID"}').bind('click', function () {
var $Form =
$('#AttachmentDeleteButton$QData{"FileID"}').closest('form');
$('#AttachmentDelete$QData{"FileID"}').val(1);
Core.Form.Validate.DisableValidation($Form);
$Form.trigger('submit');
});
//]]></script>
<!--dtl:js_on_document_complete-->
</li>
<!-- dtl:block:Attachment -->

<li>
<input id="FileUpload" name="FileUpload"
type="file" size="40" />
<input type="hidden" id="AttachmentUpload"
name="AttachmentUpload" value="0" />
</li>
</ul>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#FileUpload').bind('change', function () {
var $Form = $('#FileUpload').closest('form');
Core.Form.Validate.DisableValidation($Form);
$Form.find('#AttachmentUpload').val('1').end().submit();
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>

<label for="CustomerID">$Text{"CustomerID"}:</label>
<div class="Field">
<input type="text" name="CustomerID" id="CustomerID"
value="$QData{"CustomerID"}" class="W50pc"/>
</div>
<div class="Clear"></div>

<label for="NextStateID">$Text{"Next ticket
state"}:</label>
<div class="Field">
$Data{"NextStatesStrg"}
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#NextStateID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate',
'NextStateID', [ 'TypeID', 'Dest', 'NewUserID','NewResponsibleID',
'PriorityID', 'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>

<label>$Text{"Pending Date"} ($Text{"for pending*
states"}):</label>
<div class="Field">
$Data{"PendingDateString"}
<div id="DayServerError"
class="TooltipErrorMessage"><p>$Text{"Date invalid!"}</p></div>
<div id="HourServerError"
class="TooltipErrorMessage"><p>$Text{"Date invalid!"}</p></div>
</div>
<div class="Clear"></div>

<label for="PriorityID">$Text{"Priority"}:</label>
<div class="Field">
$Data{"PriorityStrg"}
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#PriorityID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewEmailTicket'), 'AJAXUpdate', 'PriorityID',
[ 'TypeID', 'Dest', 'NewUserID','NewResponsibleID', 'NextStateID',
'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>

<!-- dtl:block:DynamicField -->
<div class="Row Row_DynamicField_$QData{"Name"}">
$Data{"Label"}
<div class="Field">
$Data{"Field"}
</div>
<div class="Clear"></div>
</div>
<!-- dtl:block:DynamicField -->

# example of how to use fixed dynamic field blocks for customizations
# Note: Field1 and Field2 are the names of the fields and had to be replaced
with the actual
# field names
#<!-- dtl:block:DynamicField_Field1 -->
# <div class="Row Row_DynamicField_$QData{"Name"}">
# $Data{"Label"}
# <div class="Field">
# $Data{"Field"}
# </div>
# <div class="Clear"></div>
# </div>
#<!-- dtl:block:DynamicField_Field1 -->
#<!-- dtl:block:DynamicField_Field2 -->
# <div class="Row Row_DynamicField_$QData{"Name"}">
# $Data{"Label"}
# <div class="Field">
# $Data{"Field"}
# </div>
# <div class="Clear"></div>
# </div>
#<!-- dtl:block:DynamicField_Field2 -->

<!-- dtl:block:TimeUnitsLabel -->
<label for="TimeUnits">$Text{"Time
units"}$Text{"$Config{"Ticket::Frontend::TimeUnits"}"}:</label>
<!-- dtl:block:TimeUnitsLabel -->
<!-- dtl:block:TimeUnitsLabelMandatory -->
<label class="Mandatory" for="TimeUnits"><span
class="Marker">*</span> $Text{"Time
units"}$Text{"$Config{"Ticket::Frontend::TimeUnits"}"}:</label>
<!-- dtl:block:TimeUnitsLabelMandatory -->
<!-- dtl:block:TimeUnits -->
<div class="Field">
<input type="text" class="W25pc Validate_TimeUnits
$QData{"TimeUnitsRequired"} $QData{"TimeUnitsInvalid"}" name="TimeUnits"
id="TimeUnits" value="$QData{"TimeUnits"}"/>
<div id="TimeUnitsError"
class="TooltipErrorMessage"><p>$Text{"Invalid time!"}</p></div>
<div id="TimeUnitsServerError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
</div>
<div class="Clear"></div>
<!-- dtl:block:TimeUnits -->

<div class="Field SpacingTop">
<button class="Primary" id="submitRichText"
accesskey="g" title="$Text{"Send mail!"} (g)" type="submit" value="$Text{"Send
mail!"}" >$Text{"Send mail!"}</button>
</div>
</fieldset>
</form>
</div>
</div>
<div id="CustomerTickets"></div>
</div>

<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
Core.Agent.TicketAction.Init();

#Core.Customer.InitFocus();
switch ($('#TypeID').val() ) { //this is where the queue is relevant (Dest
= Queue)
case "1": // need to slash escape the pipes
document.compose.RichText.value = '<style type="text/css">p {
margin-bottom: 0cm; font-size: 10pt; text-align: justify; }</style><p
style="margin-left: 0cm; text-indent: -1.27cm; text-align: left;"> <span
style="font-size:
30px;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$Text{"weihuyufuwurenwushu"}</strong></spa
n><br
/> &nbsp;</p><table border="3" cellpadding="7" cellspacing="1" width="691">
<col width="70" /> <col width="0" /> <col width="237" /> <col
width="13" /> <col width="29" /> <col width="252" /> <tbody>
<tr> <td colspan="4" height="10" width="358"> <p
style="margin-left: -0.19cm; margin-right: -0.24cm; text-indent: 0.37cm;
margin-top: 0.11cm;"> $Text{"fuwuleixing"}(
$Text{"shouqian"}<font face="DejaVu Sans, serif"><font face="\CB\CE\CC\E5">
</font></font>$Text{"shouhou"}<font face="DejaVu Sans, serif"><font
face="\CB\CE\CC\E5"> </font></font>$Text{"peixun"}<font face="DejaVu Sans,
serif"><font face="\CB\CE\CC\E5"> </font></font>$Text{"qita"}):</p>
</td> <td colspan="2" width="296"> <p
style="margin-right: -0.24cm; margin-top: 0.11cm;">
$Text{"xiangyingjiezhiriqi"}:</p> </td> </tr> <tr>
<td colspan="6" height="11" width="669"> <p
align="CENTER" style="margin-top:
0.11cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
face="\BA\DA\CC\E5"><b>$Text{"khxx1"}</b></font><font face="\BA\DA\CC\E5"><b>
</b></font><font face="\BA\DA\CC\E5"><b>$Text{"khxx2"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"khxx3"}</b></font><font face="\BA\DA\CC\E5"><b>
</b></font><font face="\BA\DA\CC\E5"><b>$Text{"khxx4"}</b></font></p>
</td> </tr> <tr> <td colspan="2" height="12"
width="78"> <p align="CENTER" style="margin-right: -0.19cm;
text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"kehumingcheng"}</p> </td> <td width="237">
<p align="CENTER" style="margin-top: 0.11cm;">
&nbsp;</p> </td> <td colspan="2" width="57">
<p align="CENTER" style="margin-right: -0.19cm; text-indent: -0.19cm;
margin-top: 0.11cm;"> $Text{"hetonghao"}</p>
</td> <td width="252"> <p align="CENTER"
style="margin-left: 0.19cm; margin-right: -0.24cm; text-indent: -0.19cm;
margin-top: 0.11cm;"> &nbsp;</p> </td>
</tr> <tr> <td colspan="2" height="12" width="78">
<p align="CENTER" style="margin-right: -0.19cm; text-indent: -0.19cm;
margin-top: 0.11cm;"> $Text{"chanpin"}<font
face="\CB\CE\CC\E5">/</font>$Text{"xiangmumingcheng"}</p> </td>
<td width="237"> <p align="CENTER" style="margin-top:
0.11cm;"> &nbsp;</p> </td> <td
colspan="2" width="57"> <p align="CENTER" style="margin-right:
-0.19cm; text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"fuwuhao"}</p> </td> <td width="252">
<p align="CENTER" style="margin-left: 0.19cm; margin-right: -0.24cm;
text-indent: -0.19cm; margin-top: 0.11cm;"> &nbsp;</p>
</td> </tr> <tr> <td colspan="2" height="13"
width="78"> <p align="CENTER" style="margin-right: -0.19cm;
text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"dizhi"}</p> </td> <td width="237">
<p align="CENTER" style="margin-top: 0.11cm;"> &nbsp;</p>
</td> <td colspan="2" width="57"> <p
align="CENTER" style="margin-left: -0.19cm; margin-right: -0.19cm;
text-indent: 0cm; margin-top: 0.11cm;">
$Text{"lianxiren"}</p> </td> <td width="252">
<p align="CENTER" style="margin-left: 0.19cm; margin-right: -0.24cm;
text-indent: -0.19cm; margin-top: 0.11cm;"> &nbsp;</p>
</td> </tr> <tr> <td colspan="2" height="13"
width="78"> <p align="CENTER" style="margin-right: -0.19cm;
text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"dianhua"}<font face="\CB\CE\CC\E5">/</font>$Text{"chuanzhen"}</p>
</td> <td width="237"> <p align="CENTER"
style="margin-top: 0.11cm;"> &nbsp;</p> </td>
<td colspan="2" width="57"> <p align="CENTER"
style="margin-left: -0.19cm; margin-right: -0.19cm; text-indent: 0cm;
margin-top: 0.11cm;"> <font
face="\CB\CE\CC\E5">EMAIL</font></p> </td> <td
width="252"> <p align="CENTER" style="margin-left: 0.19cm;
margin-right: -0.24cm; text-indent: -0.19cm; margin-top: 0.11cm;">
&nbsp;</p> </td> </tr> <tr> <td
colspan="6" height="3" width="669"> <p align="CENTER"
style="margin-top: 0.21cm;">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<font face="\BA\DA\CC\E5"><b>$Text{"rwnr1"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"rwnr2"}</b></font><font face="\BA\DA\CC\E5"><b>
</b></font><font face="\BA\DA\CC\E5"><b>$Text{"rwnr3"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"rwnr4"}</b></font></p> <!--
<font face="\BA\DA\CC\E5"><b></b></font><font face="\BA\DA\CC\E5"><b>
</b></font><font face="\BA\DA\CC\E5"><b></b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b></b></font><font face="\BA\DA\CC\E5"><b>
</b></font><font face="\BA\DA\CC\E5"><b>$Text{"renwuneirong"}</b></font></p>
--> </td> </tr> <tr> <td colspan="6"
height="210" valign="TOP" width="669"> <p style="margin-top:
0.11cm; margin-bottom: 0.11cm;"> $Text{"jutineirong"}:</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
<br /> &nbsp;</p> <p
style="margin-top: 0.11cm; margin-bottom: 0.11cm;"> <br />
&nbsp;</p> <p style="margin-top: 0.11cm;
margin-bottom: 0.11cm;"> <br />
&nbsp;</p> <p style="margin-top: 0.11cm; margin-bottom:
0.11cm;"> <br /> &nbsp;</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
<br /> &nbsp;</p> <p style="margin-top:
0.11cm; margin-bottom: 0.11cm;"> &nbsp;</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;"> <br
/> &nbsp;</p> <p style="margin-top:
0.11cm;"> $Text{"renwutichuren"}:<font face="\CB\CE\CC\E5">
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
$Text{"riqi"}:</p> </td> </tr> <tr> <td
colspan="6" height="109" valign="TOP" width="669"> <p
style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
$Text{"xiaoshoujingli"}<font face="DejaVu Sans, serif"><font
face="\CB\CE\CC\E5">/</font></font>$Text{"xiaoshourenyuanshenpiyijian"}:</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
<font
face="\CB\CE\CC\E5">1.</font>$Text{"renwuchengdanrendaodaxianchangshijian"}:</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;">
<font
face="\CB\CE\CC\E5">2.</font>$Text{"jihuadegongzuotianshu"}:</p>
<p style="margin-top: 0.11cm; margin-bottom: 0.11cm;"> <br
/> &nbsp;</p> <p style="margin-top:
0.11cm;"> $Text{"qianzi"}:<font face="\CB\CE\CC\E5">
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
$Text{"riqi"}:</p> </td> </tr> <tr> <td
colspan="6" height="14" valign="TOP" width="669"> <p
align="CENTER" style="margin-right: -0.24cm; text-indent: -0.19cm; margin-top:
0.21cm;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd1"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd2"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd3"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd4"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd5"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd6"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd7"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd8"}</b></font></p><!--
<font face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd1"}</b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd2"} </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd3"}</b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd4"} </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd5"}</b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd6"} </b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jsrwrymd7"}</b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b></b></font><font face="\BA\DA\CC\E5"><b>
</b></font><font face="\BA\DA\CC\E5"><b></b></font><font
face="\BA\DA\CC\E5"><b> </b></font><font
face="\BA\DA\CC\E5"><b></b></font><font face="\BA\DA\CC\E5"><b>
</b></font><font
face="\BA\DA\CC\E5"><b>$Text{"jieshourenwurenyuanmingdan"}</b></font></p>
--> </td> </tr> <tr> <td colspan="6"
height="47" valign="TOP" width="669"> <p style="margin-top:
0.11cm;"> $Text{"zhidingrenwuchengdanren"}:</p>
<p style="margin-top: 0.11cm;"> &nbsp;</p>
<p style="margin-top: 0.11cm;"> &nbsp;</p>
<p style="margin-top: 0.11cm;">
$Text{"renwuchengdanren"}:<font face="DejaVu Sans, serif">
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Text{"riqi"}:</p> </td>
</tr> <tr> <td colspan="6" height="15" valign="TOP"
width="669"> <p style="margin-left: 0.19cm; margin-right:
-0.24cm; text-indent: -0.19cm; margin-top: 0.21cm;">
$Text{"jishuzhichijingliqianzi"}:<font face="\CB\CE\CC\E5">
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$Text{"riqi"}:</p>
</td> </tr> <tr> <td height="68"
width="70"> <p align="CENTER" style="margin-right: -0.24cm;
text-indent: -0.19cm; margin-top: 0.21cm; margin-bottom: 0.21cm;">
$Text{"beizhu1"}</p> <p align="CENTER"
style="margin-right: -0.24cm; text-indent: -0.19cm; margin-top: 0.11cm;">
$Text{"beizhu2"}</p> </td> <td colspan="5"
valign="TOP" width="584"> <p style="margin-right: -0.24cm;
text-indent: -0.19cm; margin-top: 0.11cm;"> &nbsp;</p>
</td> </tr> </tbody></table><p>'; // only if you want to
change the body. destroys user input if queue changes
break;
break;
break;
break;
break;
break;
default:
document.compose.RichText.value ='<span style="font-size:
18px;"><strong>$Text{"Please choose the Service Type ! "}<br> $Text{"CS2C
Support & Service Management System"}</strong></span>';
}

//]]></script>
<!--dtl:js_on_document_complete-->

# example template form for customizations
#<form action="$Env{"CGIHandle"}" method="post" enctype="multipart/form-data"
id="Template1">
# <input type="hidden" name="Action" value="$Env{"Action"}"/>
# <input type="hidden" name="Subaction" value="StoreNew"/>
# <input type="hidden" name="FormID" value="$QData{"FormID"}"/>
# <input type="hidden" name="ExpandCustomerName" value="2"/>
# <input type="hidden" name="Subject" value="Example Subject"/>
# <input type="hidden" name="Body" value="Name:
#Product:
#Comment:"/>
#</form>



[1] http://otrs.org/
[2] http://www.gnu.org/licenses/agpl.txt.




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.23 23:23:30 由 服务人员
类型: 外部注解
附件:

CustomerLogin.dtl
添加
<div><p><img src="[1]http://ssms.cs2c.com.cn/banner.jpg"
align="center"/></p></div>


[1] http://ssms.cs2c.com.cn/banner.jpg

BOoRFGOnZ
OTRS newbie
Posts: 8
Joined: 09 Aug 2013, 03:19
OTRS Version?: 3.2.9

Re: 大家好,我也共享一下改过的一些地方,供大家参考

Postby BOoRFGOnZ » 09 Aug 2013, 06:08

发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.08.24 05:54:36 由 服务人员
类型: 外部注解
附件:

在 用户信息 block 中 添加 googlemap信息,有助与今后统计 400热线用户位置。

Frontend::CustomerUser::Item###1-GoogleMaps 字段 值

Defines a customer item, which generates a google maps icon at the end of a
customer info block.






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2012.08.25 15:19:15 由 服务人员
类型: 外部注解
附件:

更改一下ticket显示的 from

Reset this settingTicket::DefineEmailFrom Agent NameAgent Name +
FromSeparator + System Address Display NameSystem Address Display Name

Default value: System Address Display Name

Defines how the From field from the emails (sent from answers and email
tickets) should look like.






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2012.08.26 02:45:52 由 服务人员
类型: 外部注解
附件:

打开

Ticket::EventModulePost###120-ForceOwnerResetOnMove 字段 值
删除该条目 删除该条目
新增新条目

Resets and unlocks the owner of a ticket if it was moved to another queue.






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2012.08.26 02:56:46 由 服务人员
类型: 外部注解
附件:

还是把这个 打开吧
RequiredLock

自动锁定 然后 自动设置 owner




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2012.08.28 09:50:47 由 服务人员
类型: 外部注解
附件:

修改一下 bar
filter=all
Frontend::ToolBarModule###1-Ticket::AgentTicketQueue 字段 值




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2012.08.28 09:52:25 由 服务人员
类型: 外部注解
附件:

对上一个注解 更新

QueueID=0;View=;Filter=All;;SortBy=TicketNumber;OrderBy=Down




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
Note
创建: 2012.08.31 11:52:51 由 服务人员
类型: 外部注解
附件:

为了对注册用户进行expire 提醒

修改

/opt/otrs/Kernel/Config/Files/Ticket.xml

添加 一个 下拉菜单

<ConfigItem Name="Frontend::Module###AgentTicketPhone" Required="0"
Valid="1">
<Description Translatable="1">Frontend module registration for the
agent interface.</Description>
<Group>Ticket</Group>
<SubGroup>Frontend::Agent::ModuleRegistration</SubGroup>
<Setting>
<FrontendModuleReg>
<Description>Create new phone ticket</Description>
<Title>New phone ticket</Title>
<NavBarName>Ticket</NavBarName>
<NavBar>
<Description Translatable="1">Create new phone ticket
(inbound)</Description>
<Name Translatable="1">New phone ticket</Name>
<Link>Action=AgentTicketPhone</Link>
<LinkOption></LinkOption>
<NavBar>Ticket</NavBar>
<Type></Type>
<Block></Block>
<AccessKey>n</AccessKey>
<Prio>200</Prio>
</NavBar>
<Loader>
<JavaScript>Core.Agent.CustomerSearch.js</JavaScript>
<JavaScript>Core.Agent.TicketAction.js</JavaScript>
</Loader>
</FrontendModuleReg>
</Setting>
</ConfigItem>




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2012.08.31 15:16:25 由 服务人员
类型: 外部注解
附件:

重新修改 文件 可以从首页上直接提交 新建注册用户事件

[root@otrs Standard]# cat AgentTicketPhone.dtl
# --
# AgentTicketPhone.dtl - provides HTML form for phone
# Copyright (C) 2001-2012 OTRS AG, [1]http://otrs.org/
# --
# $Id: AgentTicketPhone.dtl,v 1.146.2.2 2012/05/25 13:32:30 mg Exp $
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see [2]http://www.gnu.org/licenses/agpl.txt.
# --

$Include{"AgentCustomerSearch"}
<div class="MainBox ARIARoleMain">

<h1>$Text{"Create New Phone Ticket"}</h1>

<div class="LayoutFixedSidebar SidebarLast">
<!-- dtl:block:CustomerTable -->
<div id="CustomerInfo" class="SidebarColumn WidgetSimple">
<div class="Header">
<h2>$Text{"Customer Information"}</h2>
</div>
<div class="Content">
$Data{"CustomerTable"}
</div>
</div>
<!-- dtl:block:CustomerTable -->

<div class="ContentColumn">
<form action="$Env{"CGIHandle"}" method="post"
enctype="multipart/form-data" name="compose" id="NewPhoneTicket"
class="Validate PreventMultipleSubmits">
<input type="hidden" name="Action" value="$Env{"Action"}"/>
<input type="hidden" name="Subaction" value="StoreNew"/>
<input type="hidden" name="FormID" value="$QData{"FormID"}"/>
<input type="hidden" name="ExpandCustomerName"
id="ExpandCustomerName" value="0"/>
<input type="hidden" name="OwnerAll" id="OwnerAll"
value="$QData{"OwnerAll"}"/>
<input type="hidden" name="ResponsibleAll" id="ResponsibleAll"
value="$QData{"ResponsibleAll"}"/>
<input type="hidden" name="PreSelectedCustomerUser"
id="PreSelectedCustomerUser" value=""/>
<input type="hidden" name="SelectedCustomerUser"
id="SelectedCustomerUser" value="$QData{"CustomerUser"}"/>
<input type="hidden" name="TicketID"
value="$QData{"TicketID"}"/>
<input type="hidden" name="LinkTicketID"
value="$QData{"LinkTicketID"}"/>

<fieldset class="TableLike">

# example template for customizations, see hidden form at the end of the file
# <label>$Text{"Templates"}:</label>
# <div class="Field">
# <button type="button"
onclick="$('#Template1').submit()" value="$Text{"Example
Template"}">$Text{"Example Template"}</button>
# </div>
# <div class="Clear"></div>
<!-- dtl:block:TicketType -->
<label class="Mandatory" for="TypeID"><span
class="Marker">*</span> $Text{"Type"}:</label>
<div class="Field">
$Data{"TypeStrg"}
<div id="TypeIDError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<div id="TypeIDServerError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
#weiwei
if (document.compose.TypeID.value=='4')
{
document.compose.TypeID.value='4';
$("#TypeID").val($("#TypeID option:eq(4)").val());
}
else{
if (document.compose.TypeID.value=='1')
{
document.compose.TypeID.value='5';
#$("#TypeID").val($("#TypeID option:eq(2)").val());
}
else
{

document.compose.TypeID.value='1';
$("#TypeID").val($("#TypeID option:eq(1)").val());
}
}
$('#TypeID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate', 'TypeID',
['Dest', 'NewUserID', 'NewResponsibleID', 'NextStateID', 'PriorityID',
'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>

<!-- dtl:block:TicketType -->

<div class="Field $QData{"CustomerHiddenContainer"}">
<div class="CustomerTicketTemplateFromCustomer
SpacingTopSmall Hidden">
<input name="CustomerSelected"
id="CustomerSelected" class="CustomerTicketRadio" type="radio" value=""/>
<input name="CustomerKey" id="CustomerKey"
class="CustomerKey" type="hidden" value=""/>
<input class="CustomerTicketText W75pc"
name="CustomerTicketText" id="CustomerTicketText" type="text" value=""
readonly="readonly" />
<button type="button" id="RemoveCustomerTicket"
class="Remove CustomerTicketRemove" value="$Text{"Remove Ticket
Customer"}">$Text{"Remove Ticket Customer"}</button>
</div>

<div id="TicketCustomerContentFromCustomer"
class="CustomerContainer">
<!-- dtl:block:MultipleCustomer -->
<div class="SpacingTopSmall ">
<input name="CustomerSelected"
id="CustomerSelected" class="CustomerTicketRadio" type="radio"
value="$QData{"Count"}" $QData{"CustomerSelected"} $QData{"CustomerDisabled"}
/>
<input name="CustomerKey_$QData{"Count"}"
id="CustomerKey_$QData{"Count"}" class="CustomerKey" type="hidden"
value="$QData{"CustomerKey"}"/>
<input class="CustomerTicketText W75pc
$QData{"CustomerError"}" name="CustomerTicketText_$Data{"Count"}"
id="CustomerTicketText_$Data{"Count"}" type="text"
value="$QData{"CustomerElement"}" readonly="readonly" />
<button type="button"
id="RemoveCustomerTicket_$Data{"Count"}" class="Remove CustomerTicketRemove"
value="$Text{"Remove Ticket Customer"}">$Text{"Remove Ticket
Customer"}</button>

<!-- dtl:block:CustomerErrorExplantion -->
<p class="Explanation Error">$Text{"Please
remove this entry and enter a new one with the correct value."}</p>
<!-- dtl:block:CustomerErrorExplantion -->

<div
id="CustomerTicketText_$Data{"Count"}ServerError" class="TooltipErrorMessage">
<!-- dtl:block:CustomerGenericServerErrorMsg -->
<p>$Text{"This field is required."}</p>
<!-- dtl:block:CustomerGenericServerErrorMsg -->
<!-- dtl:block:InvalidConfigServerErrorMsg -->
<p>$Text{"This email address is not
allowed due to the system configuration."}</p>
<!-- dtl:block:InvalidConfigServerErrorMsg -->
<!-- dtl:block:InvalidMXServerErrorMsg -->
<p>$Text{"This email address failed MX
check."}</p>
<!-- dtl:block:InvalidMXServerErrorMsg -->
<!-- dtl:block:InvalidDNSServerErrorMsg -->
<p>$Text{"DNS problem, please check your
configuration and the error log."}</p>
<!-- dtl:block:InvalidDNSServerErrorMsg -->
<!-- dtl:block:InvalidSyntaxServerErrorMsg -->
<p>$Text{"The syntax of this email address
is incorrect."}</p>
<!-- dtl:block:InvalidSyntaxServerErrorMsg -->
<!-- dtl:block:IsDuplicatedServerErrorMsg -->
<p>$Text{"This address already exists on
the address list."}</p>
<!-- dtl:block:IsDuplicatedServerErrorMsg -->
</div>
</div>
<!-- dtl:block:MultipleCustomer -->

</div>
<!-- dtl:block:MultipleCustomerCounter -->
<input name="CustomerTicketCounterFromCustomer"
id="CustomerTicketCounterFromCustomer" type="hidden"
value="$QData{"CustomerCounter"}"/>
<!-- dtl:block:MultipleCustomerCounter -->
</div>
<div class="Clear"></div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('.CustomerTicketRadio').bind('change', function () {
var CustomerKey;
if ( $(this).attr('checked') ){

CustomerKey = $( '#CustomerKey_' +$(this).val() ).val();
// get customer tickets
Core.Agent.CustomerSearch.ReloadCustomerInfo(CustomerKey);
}
return false;
});

$('.CustomerTicketRemove').bind('click', function () {
Core.Agent.CustomerSearch.RemoveCustomerTicket( $(this) );
return false;
});
//]]></script>
<!--dtl:js_on_document_complete-->

<label for="FromCustomer" class="Mandatory"><span
class="Marker">*</span>$Text{"From customer"}:</label>
<div class="Field">
<input id="FromCustomer" type="text"
name="FromCustomer" value="" class="CustomerAutoComplete W75pc AutocompleteOff
$QData{"FromInvalid"}"/>
<div id="FromCustomerServerError"
class="TooltipErrorMessage">
<!-- dtl:block:FromServerErrorMsg -->
<p>$Text{"Please include at least one customer for
the ticket."}</p>
<!-- dtl:block:FromServerErrorMsg -->
</div>
</div>
<div class="Clear"></div>

<!-- dtl:block:FromExternalCustomer -->
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
Core.Agent.CustomerSearch.AddTicketCustomer( 'FromCustomer',
"$QData{"Email"}", "$QData{"Customer"}", true );
//]]></script>
<!--dtl:js_on_document_complete-->
<!-- dtl:block:FromExternalCustomer -->

<label class="Mandatory" for="Dest"><span
class="Marker">*</span> $Text{"To queue"}:</label>
<div class="Field">
$Data{"ToStrg"}
<div id="DestError" class="TooltipErrorMessage"
><p>$Text{"This field is required."}</p></div>
<div id="DestServerError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#Dest').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate', 'Dest',
['TypeID', 'NewUserID', 'NewResponsibleID', 'NextStateID', 'PriorityID',
'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>

<!-- dtl:block:TicketService -->
<label for="ServiceID">$Text{"Service"}:</label>
<div class="Field">
$Data{"ServiceStrg"}
<div id="ServiceIDServerError"
class="TooltipErrorMessage"><p>$Text{"Service invalid."}</p></div>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#ServiceID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate', 'ServiceID',
['TypeID', 'Dest', 'NewUserID', 'NewResponsibleID', 'NextStateID',
'PriorityID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>
<!-- dtl:block:TicketService -->

<!-- dtl:block:TicketSLA -->
<label for="SLAID">$Text{"Service Level
Agreement"}:</label>
<div class="Field">
$Data{"SLAStrg"}
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#SLAID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate', 'SLAID',
['TypeID', 'Dest', 'NewUserID', 'NewResponsibleID', 'ServiceID',
'NextStateID', 'PriorityID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>
<!-- dtl:block:TicketSLA -->

<!-- dtl:block:OwnerSelection -->
<label for="NewUserID">$Text{"Owner"}:</label>
<div class="Field">
$Data{"OptionStrg"}
<a href="#" id="OwnerSelectionGetAll"
class="GetAllAJAX" title="$Text{"Get all"}">$Text{"Get all"}</a>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#OwnerSelectionGetAll').bind('click', function (Event) {
$('#OwnerAll').val('1'); // Needed? Why?
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate', 'OwnerAll',
['NewUserID'], function() {
$('#NewUserID').focus();
});
return false;
});

$('#NewUserID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate', 'NewUserID',
[ 'TypeID', 'Dest', 'NewResponsibleID', 'NextStateID', 'PriorityID',
'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>
<!-- dtl:block:OwnerSelection -->

<!-- dtl:block:ResponsibleSelection -->
<label
for="NewResponsibleID">$Text{"Responsible"}:</label>
<div class="Field">
$Data{"ResponsibleOptionStrg"}
<a href="#" id="ResponsibleSelectionGetAll"
class="GetAllAJAX" title="$Text{"Get all"}">$Text{"Get all"}</a>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#ResponsibleSelectionGetAll').bind('click', function (Event) {
$('#ResponsibleAll').val('1'); // Needed? Why?
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate',
'ResponsibleAll', ['NewResponsibleID'], function() {
$('#NewResponsibleID').focus();
});
return false;
});

$('#NewResponsibleID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate',
'NewResponsibleID', [ 'TypeID', 'Dest', 'NewUserID', 'NextStateID',
'PriorityID', 'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>
<!-- dtl:block:ResponsibleSelection -->

<label class="Mandatory" for="Subject"><span
class="Marker">*</span> $Text{"Subject"}:</label>
<div class="Field">
<input class="W75pc Validate_Required
$QData{"SubjectInvalid"}" type="text" name="Subject" id="Subject"
value="$QData{"Subject"}"/>
<div id="SubjectError" class="TooltipErrorMessage">
<p>$Text{"This field is required."}</p>
</div>
<div id="SubjectServerError"
class="TooltipErrorMessage">
<p>$Text{"This field is required."}</p>
</div>
</div>
<div class="Clear"></div>

<!-- dtl:block:TicketOptions -->
<label>$Text{"Options"}:</label>
<div class="Field">

<!-- OutputFilterHook_TicketOptionsBegin -->

<!-- dtl:block:SpellCheck -->
<a href="#" id="OptionSpellCheck">[ $Text{"Spell
check"} ]</a>
<!-- dtl:block:SpellCheck -->

<!-- dtl:block:OptionCustomer -->
<a href="#" id="OptionCustomer">[ $Text{"Customer"}
]</a>
<!-- dtl:block:OptionCustomer -->

<!-- OutputFilterHook_TicketOptionsEnd -->

</div>
<div class="Clear"></div>
<!-- dtl:block:TicketOptions -->

<!-- OutputFilterHook_NoTicketOptionsFallback -->

<label class="Mandatory" for="RichText"><span
class="Marker">*</span> $Text{"Text"}:</label>
<div class="RichTextField">

<!-- dtl:block:RichText -->
$Include{"RichTextEditor"}
<!-- dtl:block:RichText -->
<textarea id="RichText" class="RichText
Validate_Required $QData{"RichTextInvalid"}" name="Body" title="Message body"
rows="15"
cols="$Config{"Ticket::Frontend::TextAreaNote"}">$QData{"Body"}</textarea>
<div id="RichTextError" class="TooltipErrorMessage">
<p>$Text{"This field is required."}</p>
</div>
<div id="RichTextServerError"
class="TooltipErrorMessage">
<p>$Text{"This field is required."}</p>
</div>
</div>
<div class="Clear"></div>

<label>$Text{"Attachment"}:</label>
<div class="Field">
<ul>
<!-- dtl:block:Attachment -->
<li>
$QData{"Filename"} ($QData{"Filesize"})
<button type="button"
id="AttachmentDeleteButton$QData{"FileID"}"
name="AttachmentDeleteButton$QData{"FileID"}" value="$Text{"Delete"}"
class="SpacingLeft">$Text{"Delete"}</button>
<input type="hidden"
id="AttachmentDelete$QData{"FileID"}" name="AttachmentDelete$QData{"FileID"}"
/>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#AttachmentDeleteButton$QData{"FileID"}').bind('click', function () {
var $Form =
$('#AttachmentDeleteButton$QData{"FileID"}').closest('form');
$('#AttachmentDelete$QData{"FileID"}').val(1);
Core.Form.Validate.DisableValidation($Form);
$Form.trigger('submit');
});
//]]></script>
<!--dtl:js_on_document_complete-->
</li>
<!-- dtl:block:Attachment -->
<li>
<input id="FileUpload" name="FileUpload"
type="file" size="40" />
<input type="hidden" id="AttachmentUpload"
name="AttachmentUpload" value="0" />
</li>
</ul>
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#FileUpload').bind('change', function () {
var $Form = $('#FileUpload').closest('form');
Core.Form.Validate.DisableValidation($Form);
$Form.find('#AttachmentUpload').val('1').end().submit();
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>

<label for="CustomerID">$Text{"CustomerID"}:</label>
<div class="Field">
<input type="text" name="CustomerID" id="CustomerID"
value="$QData{"CustomerID"}" class="W50pc"/>
</div>
<div class="Clear"></div>

<label for="NextStateID">$Text{"Next ticket
state"}:</label>
<div class="Field">
$Data{"NextStatesStrg"}
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#NextStateID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate',
'NextStateID', [ 'TypeID', 'Dest', 'NewUserID','NewResponsibleID',
'PriorityID', 'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>

<label>$Text{"Pending Date"} ($Text{"for pending*
states"}):</label>
<div class="Field">
$Data{"PendingDateString"}
<div id="DayError"
class="TooltipErrorMessage"><p>$Text{"Date invalid!"}</p></div>
<div id="HourError"
class="TooltipErrorMessage"><p>$Text{"Date invalid!"}</p></div>
</div>
<div class="Clear"></div>

<label for="PriorityID">$Text{"Priority"}:</label>
<div class="Field">
$Data{"PriorityStrg"}
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
$('#PriorityID').bind('change', function (Event) {
Core.AJAX.FormUpdate($('#NewPhoneTicket'), 'AJAXUpdate', 'PriorityID',
[ 'TypeID', 'Dest', 'NewUserID','NewResponsibleID', 'NextStateID',
'ServiceID', 'SLAID', 'SignKeyID', 'CryptKeyID',
$Data{"DynamicFieldNamesStrg"}, 'To', 'Cc', 'Bcc']);
});
//]]></script>
<!--dtl:js_on_document_complete-->
</div>
<div class="Clear"></div>

<!-- dtl:block:DynamicField -->
<div class="Row Row_DynamicField_$QData{"Name"}">
$Data{"Label"}
<div class="Field">
$Data{"Field"}
</div>
<div class="Clear"></div>
</div>
<!-- dtl:block:DynamicField -->

# example of how to use fixed dynamic field blocks for customizations
# Note: Field1 and Field2 are the names of the fields and had to be replaced
with the actual
# field names
#<!-- dtl:block:DynamicField_Field1 -->
# <div class="Row Row_DynamicField_$QData{"Name"}">
# $Data{"Label"}
# <div class="Field">
# $Data{"Field"}
# </div>
# <div class="Clear"></div>
# </div>
#<!-- dtl:block:DynamicField_Field1 -->
#<!-- dtl:block:DynamicField_Field2 -->
# <div class="Row Row_DynamicField_$QData{"Name"}">
# $Data{"Label"}
# <div class="Field">
# $Data{"Field"}
# </div>
# <div class="Clear"></div>
# </div>
#<!-- dtl:block:DynamicField_Field2 -->

<!-- dtl:block:TimeUnitsLabel -->
<label for="TimeUnits">$Text{"Time
units"}$Text{"$Config{"Ticket::Frontend::TimeUnits"}"}:</label>
<!-- dtl:block:TimeUnitsLabel -->
<!-- dtl:block:TimeUnitsLabelMandatory -->
<label class="Mandatory" for="TimeUnits"><span
class="Marker">*</span> $Text{"Time
units"}$Text{"$Config{"Ticket::Frontend::TimeUnits"}"}:</label>
<!-- dtl:block:TimeUnitsLabelMandatory -->
<!-- dtl:block:TimeUnits -->
<div class="Field">
<input type="text" class="W25pc Validate_TimeUnits
$QData{"TimeUnitsRequired"} $QData{"TimeUnitsInvalid"}" name="TimeUnits"
id="TimeUnits" value="$QData{"TimeUnits"}" />
<div id="TimeUnitsError"
class="TooltipErrorMessage"><p>$Text{"Invalid time!"}</p></div>
<div id="TimeUnitsServerError"
class="TooltipErrorMessage"><p>$Text{"This field is required."}</p></div>
</div>
<div class="Clear"></div>
<!-- dtl:block:TimeUnits -->
<div class="Field SpacingTop">
<button class="Primary" id="submitRichText"
accesskey="g" title="$Text{"Create"} (g)" type="submit"
value="$Text{"Create"}">$Text{"Create"}</button>
</div>
</fieldset>
</form>
</div>
</div>
<div id="CustomerTickets"></div>
</div>

<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
Core.Agent.TicketAction.Init();

# example template form for customizations
#<form action="$Env{"CGIHandle"}" method="post" enctype="multipart/form-data"
id="Template1">
# <input type="hidden" name="Action" value="$Env{"Action"}"/>
# <input type="hidden" name="Subaction" value="StoreNew"/>
# <input type="hidden" name="FormID" value="$QData{"FormID"}"/>
# <input type="hidden" name="ExpandCustomerName" value="1"/>
# <input type="hidden" name="Subject" value="Example Subject"/>
# <input type="hidden" name="Body" value="Name:
#Product:
#Comment:"/>
#</form>

switch ($('#TypeID').val() ) { //this is where the queue is relevant (Dest =
Queue)
case "9": // need to slash escape the pipes
document.compose.RichText.value = '$Text{"zhucexinxi"}';
break;
case "5": // need to slash escape the pipes
document.compose.RichText.value = '<style type="text/css"><!--
BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"WenQuanYi Zen Hei";
font-size:small } --></style><table border="0" cellspacing="0" cols="6"
frame="VOID" rules="NONE"><colgroup><col width="96" /><col width="162" /><col
width="73" /><col width="101" /><col width="67" /><col width="77"
/></colgroup><tbody><tr><td align="CENTER" colspan="6" height="41"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE" width="577"><b>$Text{"301"}</b></td></tr><tr><td
align="JUSTIFY" bgcolor="#CCFFFF" height="29" style="border-top: 1px solid
#000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"302"}</td><td
align="JUSTIFY" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td><td align="JUSTIFY" bgcolor="#CCFFFF"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"303"}</td><td align="JUSTIFY" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000" valign="MIDDLE">&nbsp;</td><td
align="JUSTIFY" bgcolor="#CCFFFF" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"339"}</td><td
align="CENTER" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#E6E6E6"
colspan="6" height="23" style="border-top: 1px solid #000000; border-bottom:
1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid
#000000" valign="MIDDLE">$Text{"305"}</td></tr><tr><td align="LEFT"
bgcolor="#CCFFFF" height="31" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"306"}</td><td
align="LEFT" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td><td align="LEFT" bgcolor="#CCFFFF"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"307"}</td><td align="CENTER" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000" valign="MIDDLE">&nbsp;</td><td
align="LEFT" bgcolor="#CCFFFF" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"308"}</td><td
align="CENTER" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="JUSTIFY" bgcolor="#CCFFFF"
height="31" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"309"}</td><td align="CENTER" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000" valign="MIDDLE">&nbsp;</td><td
align="LEFT" bgcolor="#CCFFFF" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE"><font
size="2">$Text{"310"}</font></td><td align="MIDDLE" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000">&nbsp;</td><td align="LEFT"
bgcolor="#CCFFFF" style="border-top: 1px solid #000000; border-bottom: 1px
solid #000000; border-left: 1px solid #000000; border-right: 1px solid
#000000" valign="MIDDLE">$Text{"311"}</td><td align="CENTER"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="JUSTIFY" bgcolor="#CCFFFF"
height="37" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"312"}</td><td align="CENTER" colspan="5"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"322"} $Text{"323"} $Text{"324"}
$Text{"325"}</font></td></tr><tr><td align="JUSTIFY" bgcolor="#CCFFFF"
height="91" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"313"}</td><td align="LEFT" colspan="5"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="LEFT">&nbsp;</td></tr><tr><td align="LEFT" bgcolor="#C0C0C0"
height="33" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"337"}</td><td align="CENTER" colspan="5"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr></tbody></table>';
break;
default:
document.compose.RichText.value ='<style type="text/css"><!--
BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"WenQuanYi Zen Hei";
font-size:small } --></style><table border="0" cellspacing="0" cols="4"
frame="VOID" rules="NONE"><colgroup><col width="72" /><col width="128" /><col
width="72" /><col width="158" /></colgroup><tbody><tr><td align="CENTER"
colspan="4" height="42" style="border-top: 1px solid #000000; border-bottom:
1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid
#000000" valign="MIDDLE" width="431"><b>$Text{"401"}</b></td></tr><tr><td
align="CENTER" bgcolor="#CCFFFF" height="35" style="border-top: 1px solid
#000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">$Text{"402"}</td><td
align="CENTER" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td><td align="CENTER" bgcolor="#CCFFFF"
style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;
border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">$Text{"403"}</td><td align="CENTER" style="border-top: 1px
solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid
#000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#CCFFFF"
height="36" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"404"}</font></td><td align="CENTER"
colspan="3" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#CCFFFF"
height="115" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"405"}</font></td><td align="CENTER"
colspan="3" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#CCFFFF"
height="116" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"406"}</font></td><td align="CENTER"
colspan="3" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="LEFT">&nbsp;</td></tr><tr><td align="CENTER" bgcolor="#C0C0C0"
height="56" style="border-top: 1px solid #000000; border-bottom: 1px solid
#000000; border-left: 1px solid #000000; border-right: 1px solid #000000"
valign="MIDDLE"><font size="2">$Text{"407"}</font></td><td align="CENTER"
bgcolor="#FFFFFF" colspan="3" style="border-top: 1px solid #000000;
border-bottom: 1px solid #000000; border-left: 1px solid #000000;
border-right: 1px solid #000000" valign="MIDDLE">&nbsp;$Text{"408"}<br
/>$Text{"409"}</td></tr></tbody></table>';

}

//]]></script>
<!--dtl:js_on_document_complete-->

修改系统配置 in Ticket -> Frontend::Agent::ModuleRegistration
Frontend::Module###AgentTicketPhone 组名:
群组ro:
加载: 类型:
类型:
称谓: 描述: 导航栏名称: 导航栏 => 组名:
群组ro:
描述: 名称: 链接: 链接选项: 类型: 优先级: 块: 导航栏: 进钥:

Frontend module registration for the agent interface.

Frontend::Module###AgentTicketPhoneccc 组名:
群组ro:
加载: 类型:
类型:
称谓: 描述: 导航栏名称: 导航栏 => 组名:
群组ro:
描述: 名称: 链接: 链接选项: 类型: 优先级: 块: 导航栏: 进钥:

Action=AgentTicketPhone;Subaction=StoreNew;TypeID=4;Subject=新客户注册;ExpandCustomerName=2;Dest=57||regi
stered_customer;NextStateID=2


[1] http://otrs.org/
[2] http://www.gnu.org/licenses/agpl.txt.




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2012.08.31 15:23:35 由 服务人员
类型: 外部注解
附件:

承接上一个note

#weiwei
if (document.compose.TypeID.value=='4')
{
document.compose.TypeID.value='4';
$("#TypeID").val($("#TypeID option:eq(4)").val());
}
else{
if (document.compose.TypeID.value=='1')
{
document.compose.TypeID.value='5';
document.compose.Dest.value='41||niki';
document.compose.ServiceID.value='';
document.compose.NewUserID.value='';
document.compose.NewResponsibleID.value='';

BOoRFGOnZ
OTRS newbie
Posts: 8
Joined: 09 Aug 2013, 03:19
OTRS Version?: 3.2.9

Re: 大家好,我也共享一下改过的一些地方,供大家参考

Postby BOoRFGOnZ » 09 Aug 2013, 06:18

发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2012.08.31 15:32:14 由 服务人员
类型: 外部注解
附件:

新注册用户提醒

注册信息:

注册时间:<OTRS_TICKET_Created>;
注册号:<OTRS_CUSTOMER_DATA_UserCustomerID>;
姓名:<OTRS_CUSTOMER_DATA_UserFirstname>;
地址:<OTRS_CUSTOMER_DATA_UserCity>;
单位:<OTRS_CUSTOMER_DATA_UserLastname>;
座机:<OTRS_CUSTOMER_DATA_UserMobile>;
手机:<OTRS_CUSTOMER_DATA_UserPhone>;
备注:<OTRS_CUSTOMER_DATA_UserComment>;




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
Note
创建: 2012.08.31 16:16:41 由 服务人员
类型: 外部注解
附件:


[1]注册客户一年时间提醒(11个月) 08/31/2012 16:09:10 valid [2]Delete this task
[3]Run this task

[4]注册用户一年时间提醒(12个月

建立两个 note自动添加

再建立两个提醒

[5]新注册客户提醒 新注册客户提醒 valid 08/31/2012 15:45 08/31/2012 11:07 [6]Delete
this notification

[7]客户到期提醒 客户到期提醒 valid 08/31/2012 16:14 08/31/2012 15:42 [8]Delete this
notification

建立两个类型 用于约束查询条件

[9]成功关闭,注册剩余一个月过期 closed 成功关闭,注册剩余一个月过期 valid 08/31/2012 16:08
08/31/2012 16:08

[10]成功关闭,注册已经过期 closed 注册已经过期 valid 08/31/2012 16:08 08/31/2012 16:08




[1] http://59.108.119.8/otrs/i?Action=Admin ... 8%E5%86%8C%
E5%AE%A2%E6%88%B7%E4%B8%80%E5%B9%B4%E6%97%B6%E9%97%B4%E6%8F%90%E9%86%92%EF%BC%8811%E4%B8%AA%E6%9C%88%
EF%BC%89
[2] http://59.108.119.8/otrs/i?Action=Admin ... 8%E5%86%8C%
E5%AE%A2%E6%88%B7%E4%B8%80%E5%B9%B4%E6%97%B6%E9%97%B4%E6%8F%90%E9%86%92%EF%BC%8811%E4%B8%AA%E6%9C%88%
EF%BC%89;ChallengeToken=bb4d5b03d230d20701b957369b34f820;
[3] http://59.108.119.8/otrs/i?Action=Admin ... 8%E5%86%8C%
E5%AE%A2%E6%88%B7%E4%B8%80%E5%B9%B4%E6%97%B6%E9%97%B4%E6%8F%90%E9%86%92%EF%BC%8811%E4%B8%AA%E6%9C%88%
EF%BC%89;ChallengeToken=bb4d5b03d230d20701b957369b34f820;
[4] http://59.108.119.8/otrs/i?Action=Admin ... 8%E5%86%8C%
E7%94%A8%E6%88%B7%E4%B8%80%E5%B9%B4%E6%97%B6%E9%97%B4%E6%8F%90%E9%86%92%EF%BC%8812%E4%B8%AA%E6%9C%88%
EF%BC%89
[5] http://59.108.119.8/otrs/i?Action=Admin ... ange;ID=21
[6] http://59.108.119.8/otrs/i?Action=Admin ... ngeToken=b
b4d5b03d230d20701b957369b34f820;
[7] http://59.108.119.8/otrs/i?Action=Admin ... ange;ID=22
[8] http://59.108.119.8/otrs/i?Action=Admin ... ngeToken=b
b4d5b03d230d20701b957369b34f820;
[9] http://59.108.119.8/otrs/i?Action=Admin ... ange;ID=14
[10] http://59.108.119.8/otrs/i?Action=Admin ... ange;ID=13




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2012.09.01 15:01:40 由 服务人员
类型: 外部注解
附件:

ForceOwnerResetOnMove

这个 还是取消
否则 对管理员操作不便




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
更新所有者!
创建: 2012.09.01 15:36:38 由 服务人员
类型: 内部注解
附件:

更新所有者!




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.09.01 15:38:30 由 服务人员
类型: 外部注解
附件:

Ticket::Frontend::AgentTicketClose###Owner 否是






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.09.01 15:40:20 由 服务人员
类型: 外部注解
附件:

icket::Frontend::AgentTicketOwner###Note 否是






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.09.01 15:42:08 由 服务人员
类型: 外部注解
附件:

Ticket::Frontend::AgentTicketResponsible###Note 否是

默认值: 是






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.09.02 17:01:34 由 服务人员
类型: 外部注解
附件:


创建客户注册事件 url 参数如下

Action=AgentTicketPhone;Subaction=StoreNew;TypeID=4;Subject=新客户注册;ExpandCustomerName=2;Dest=57||regi
stered_customer;NextStateID=2




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.09.05 17:29:54 由 服务人员
类型: 外部注解
附件: 截止2012-9-4日ssms系统中所有支持过的客户信息.xls 236.0 KBytes

截止2012-9-4日ssms系统中所有支持过的客户信息.xls




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.09.06 11:13:53 由 服务人员
类型: 外部注解
附件:

General OTRS environmental attributes
- <OTRS_CONFIG_HttpType>
This tag reads from the SysConfig whether plain HTTP or HTTPS is used and
returns one of these values
- <OTRS_CONFIG_FQDN>
This tag returns the Fully Qualified Domain Name as defined in your SysConfig

OTRS Ticket attributes
- <OTRS_TICKET_TicketNumber>
Return the Ticket number of the current ticket. If you’re using this tag,
please keep in mind that the Ticket number does not contain the Ticket Hook,
for example Ticket# but only the Ticket number!
- <OTRS_TICKET_TicketID>
This return the ID of the Ticket as given by your application database. Please
notice that the OTRS front-ends mainly operate with the Ticket number rather
than with the Ticket ID.
- <OTRS_TICKET_Title>
Contains the Title of the ticket. Most likely the Ticket Title will become the
subject of the first Ticket article. If you add [xy] to this tag, OTRS will
shorten the title to xy chars.
- <OTRS_TICKET_Queue>
This tag returns the queue the Ticket resides in.
- <OTRS_TICKET_QueueID>
The Queue ID is the ID a given by the application database
- <OTRS_TICKET_State>
If you want to propagate the current Status of a Ticket, you can use this tag.

- <OTRS_TICKET_StateID>
This returns the ID of the current Ticket State as given by your application
database.
- <OTRS_TICKET_StateType>
The State Type reflects the type of the current Ticket according to your OTRS
configuration. Valid types are for example open, closed, pending, pending auto

- <OTRS_TICKET_Priority>
Returns the Priority of the current Ticket as defined in your OTRS
configuration.
- <OTRS_TICKET_PriorityID>
The Priority ID contains the ID as given by your application database.
- <OTRS_TICKET_Lock>
Returns if the current Ticket is “locked” or “unlocked”
- <OTRS_TICKET_LockID>
The Lock ID returns the ID of ”locked” or “unlocked” according to your OTRS
application database
- <OTRS_TICKET_Owner>
This tag returns the current Owner / Agent this Ticket is assigned to
- <OTRS_TICKET_OwnerID>
Returns the User ID of the Owner of this Ticket
- <OTRS_TICKET_CustomerID>
This Tag returns the Customer ID of the current Customer this Tickets is
assigned to. This value is queried from your Customer Database.
- <OTRS_TICKET_CustomerUserID>
This tag returns the username of a Customer as given by your Customer
Database.
- <OTRS_TICKET_Created>
Returns the creation date of the Ticket in the format YYYY-MM-DD HH:MM:SS
- <OTRS_TICKET_Changed>
Returns the date when Ticket was changed the last time in the format
YYYY-MM-DD HH:MM:SS
- <OTRS_TICKET_TicketFreeKey1>
This tag is available for all Ticket Free Keys 1-16. Simply change the suffix
to the according number of the Free Key you want to refer to.
- <OTRS_TICKET_TicketFreeText1>
This tag is available for all Ticket Free Text Fields 1-16. Simply change the
suffix to the according number of the Free Key you want to refer to.
- <OTRS_TICKET_TicketFreeTime1>
This tag is available for all Free Time Fields 1-6. Simply change the suffix
to the Free Time Field you need.

((enjoy))






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.09.10 10:31:47 由 服务人员
类型: 外部注解
附件:

AgentTicketPhone.dtl
修改一下
if (document.compose.TypeID.value=='1'||document.compose.TypeID.value=='2')




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.09.12 10:14:45 由 服务人员
类型: 外部注解
附件:

改系统配置 in Ticket -> Frontend::Agent::Preferences

取消 重置设定PreferencesGroups###LockTimeoutNotify 字段 值
删除该条目 删除该条目 删除该条目 删除该条目 删除该条目 删除该条目 删除该条目 删除该条目 删除该条目 Data =>
删除该条目 删除该条目
新增条目

新增新条目






发件人:
cs2c_BJ <serviceadmin@otrs.cs2c.com.cn>
收件人:
ss@cs2c.com.cn,
标题:
来自ssms的回复: ssms系统的二次开发过程说明 [Ticket#2011101310000033]
创建: 2012.12.04 09:49:29 由 服务人员
类型: 外部邮件
附件:

你好,Cissy:

ceshi

------------------------------------------------------------------------------------------------
本邮件发自:
回复信息请按照以下方式

任务发起人的访问地址:
[1]http://ssms.cs2c.com.cn/otrs/c?Action=CustomerTicketZoom;TicketID=219

本Ticket的访问地址:
[2]http://ssms.cs2c.com.cn/otrs/i?Action=AgentTicketZoom;TicketID=219

========================================
中标软件有限公司支持与服务管理系统
CS2C Support & Service Management System
URL:[3]http://ssms.cs2c.com.cn
========================================



[1] http://ssms.cs2c.com.cn/otrs/c?Action=C ... cketID=219
[2] http://ssms.cs2c.com.cn/otrs/i?Action=A ... cketID=219
[3] http://ssms.cs2c.com.cn/




发件人:
cs2c_BJ <serviceadmin@otrs.cs2c.com.cn>
收件人:
ss@cs2c.com.cn,
标题:
来自ssms的回复: ssms系统的二次开发过程说明 [Ticket#2011101310000033]
创建: 2012.12.04 09:50:19 由 服务人员
类型: 外部邮件
附件:

你好,Cissy:

ceshi

------------------------------------------------------------------------------------------------
本邮件发自:
回复信息请按照以下方式

任务发起人的访问地址:
[1]http://ssms.cs2c.com.cn/otrs/c?Action=CustomerTicketZoom;TicketID=219

本Ticket的访问地址:
[2]http://ssms.cs2c.com.cn/otrs/i?Action=AgentTicketZoom;TicketID=219

========================================
中标软件有限公司支持与服务管理系统
CS2C Support & Service Management System
URL:[3]http://ssms.cs2c.com.cn
========================================



[1] http://ssms.cs2c.com.cn/otrs/c?Action=C ... cketID=219
[2] http://ssms.cs2c.com.cn/otrs/i?Action=A ... cketID=219
[3] http://ssms.cs2c.com.cn/




发件人:
cs2c_BJ <serviceadmin@otrs.cs2c.com.cn>
收件人:
ss@cs2c.com.cn,
标题:
来自ssms的回复: ssms系统的二次开发过程说明 [Ticket#2011101310000033]
创建: 2012.12.04 09:56:05 由 服务人员
类型: 外部邮件
附件:

你好,Cissy:

------------------------------------------------------------------------------------------------
本邮件发自:
回复信息请按照以下方式

任务发起人的访问地址:
[1]http://ssms.cs2c.com.cn/otrs/c?Action=CustomerTicketZoom;TicketID=219


本Ticket的访问地址:
[2]http://ssms.cs2c.com.cn/otrs/i?Action=AgentTicketZoom;TicketID=219

========================================
中标软件有限公司支持与服务管理系统
CS2C Support & Service Management System
URL:[3]http://ssms.cs2c.com.cn
========================================



[1] http://ssms.cs2c.com.cn/otrs/c?Action=C ... KET_ID&gt;
[2] http://ssms.cs2c.com.cn/otrs/i?Action=A ... KET_ID&gt;
[3] http://ssms.cs2c.com.cn/




发件人:
cs2c_BJ <serviceadmin@otrs.cs2c.com.cn>
收件人:
ss@cs2c.com.cn,
标题:
来自ssms的回复: ssms系统的二次开发过程说明 [Ticket#2011101310000033]
创建: 2012.12.04 10:06:47 由 服务人员
类型: 外部邮件
附件:

你好,Cissy:

s

------------------------------------------------------------------------------------------------
本邮件发自:
回复信息请按照以下方式

任务发起人的访问地址:
[1]http://ssms.cs2c.com.cn/otrs/c?Action=CustomerTicketZoom;TicketID=219

本Ticket的访问地址:
[2]http://ssms.cs2c.com.cn/otrs/i?Action=AgentTicketZoom;TicketID=219

========================================
中标软件有限公司支持与服务管理系统
CS2C Support & Service Management System
URL:[3]http://ssms.cs2c.com.cn
========================================



[1] http://ssms.cs2c.com.cn/otrs/c?Action=C ... cketID=219
[2] http://ssms.cs2c.com.cn/otrs/i?Action=A ... cketID=219
[3] http://ssms.cs2c.com.cn/




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
ss@cs2c.com.cn,
标题:
来自ssms的回复: ssms系统的二次开发过程说明 [Ticket#2011101310000033]
创建: 2012.12.04 10:11:52 由 服务人员
类型: 外部邮件
附件:

你好,Cissy:

------------------------------------------------------------------------------------------------
本邮件发自:
回复信息请按照以下方式

任务发起人的访问地址:
[1]http://ssms.cs2c.com.cn/otrs/c?Action=CustomerTicketZoom;TicketID=219

本Ticket的访问地址:
[2]http://ssms.cs2c.com.cn/otrs/i?Action=AgentTicketZoom;TicketID=219

========================================
中标软件有限公司支持与服务管理系统
CS2C Support & Service Management System
URL:[3]http://ssms.cs2c.com.cn
========================================



[1] http://ssms.cs2c.com.cn/otrs/c?Action=C ... cketID=219
[2] http://ssms.cs2c.com.cn/otrs/i?Action=A ... cketID=219
[3] http://ssms.cs2c.com.cn/




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.12.25 11:22:19 由 服务人员
类型: 外部注解
附件:

修改各种回复模板到 V6版本




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.12.25 15:24:40 由 服务人员
类型: 外部注解
附件:

更新 队列 服务 以及其他中文标示

并将service 设置成强制

<label class="Mandatory" for="ServiceID"><span class="Marker">*</span>




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.12.25 15:47:25 由 服务人员
类型: 外部注解
附件:

接上一个 注解 添加相关Service强制选项

修改 /otrs/otrs/Kernel/Modules/CustomerTicketMessage.pm

$Param{ServiceStrg} = $Self->{LayoutObject}->BuildSelection(
Data => \%Services,
Name => 'ServiceID',
SelectedID => $Param{ServiceID},
PossibleNone => 1,
TreeView => $TreeView,
Sort => 'TreeView',
Translation => 0,
Max => 200,
Class => 'Validate_Required' . ($Param{Errors}->{ServiceIDInvalid} || '
'),




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.12.26 17:40:12 由 服务人员
类型: 外部注解
附件:

升级到 3.1.12版本




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.12.27 14:14:35 由 服务人员
类型: 外部注解
附件:

在文章下方 增加 “拆分为多个任务”的功能, 此功能可以一个任务分给多人

修改几处文件

AgentTicketPhone.pm

),
To => $Self->_GetTos(
%GetParam,
%ACLCompatGetParam,
%SplitTicketParam,
CustomerUserID => $CustomerData{UserLogin} || '',
QueueID => $Self->{QueueID},
),
From => $Article{From},
Subject => $Subject,
Body => $Body,
CustomerID => $Article{CustomerID},
CustomerUser => $Article{CustomerUserID},
CustomerData => \%CustomerData,
Attachments => \@Attachments,
LinkTicketID => $GetParam{LinkTicketID} || '',
#weiwei
aa => $GetParam{aa} || '1',

# %GetParam,
%SplitTicketParam,
DynamicFieldHTML => \%DynamicFieldHTML,
MultipleCustomer => \@MultipleCustomer,

AgentTicketZoom.pm

# check if split link should be shown
if (
$Self->{ConfigObject}->Get('Frontend::Module')->{AgentTicketPhone}
&& ( !defined $AclAction{AgentTicketPhone} ||
$AclAction{AgentTicketPhone} )
)
{
$Self->{LayoutObject}->Block(
Name => 'ArticleMenu',
Data => {
%Ticket, %Article, %AclAction,
Description => 'Split this article',
Name => 'Split',
Link =>

'Action=AgentTicketPhone;TicketID=$Data{"TicketID"};ArticleID=$Data{"ArticleID"};LinkTicketID=$Data{
"TicketID"}'
},
);
#weiwei
$Self->{LayoutObject}->Block(
Name => 'ArticleMenu',
Data => {
%Ticket, %Article, %AclAction,
Description => 'Split this article',
Name => 'Splitt',
Link =>

'Action=AgentTicketPhone;TicketID=$Data{"TicketID"};ArticleID=$Data{"ArticleID"};LinkTicketID=$Data{
"TicketID"};aa=11'
},
);
}

AgentTicketPhone.dtl

if($Data{"aa"}=="1"){
if (document.compose.TypeID.value=='4')
{
document.compose.TypeID.value='4';
$("#TypeID").val($("#TypeID option:eq(4)").val());
}
else{
if (document.compose.TypeID.value=='1'||document.compose.TypeID.value=='2')
{

。。。
。。


if($Data{"aa"}=="1"){

switch ($('#TypeID').val() ) { //this is where the queue is relevant (Dest =
Queue)
case "9": // need to slash escape the pipes
document.compose.RichText.value = '$Text{"zhucexinxi"}';
break;




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.12.27 14:22:14 由 服务人员
类型: 外部注解
附件:

接上一个注解

将 新客户注册

修改一下链接

cket -> Frontend::Agent::ModuleRegistration

Action=AgentTicketPhone;Subaction=StoreNew;TypeID=4;Subject=新客户注册;ExpandCustomerName=2;Dest=57||regi
stered_customer;NextStateID=2;aa=1




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2012.12.27 18:27:18 由 服务人员
类型: 外部注解
附件:

“新建满调任务” 修改 把标题修改为固定

Output/HTML/Standard/AgentTicketPhone.dtl
。。。
。。

document.compose.Subject.value='$Text{"manyidudiaocha"}';
break;
default:

。。
。。




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2013.01.02 11:09:33 由 服务人员
类型: 外部注解
附件: SSMS系统中记录的客户信息-截止2012年12月31日.xls 190.0 KBytes

从数据库中 将所有客户信息整理出来

#!/bin/bash

rm /tmp/a.txt
rm /tmp/wei -rf
rm /tmp/customer_wei.txt
mysql -uroot -pqwe123 <<EOF
use otrs
select a_body from article into outfile "/tmp/a.txt";
EOF

###维护与任务书
awk '/ 维护与服务任务书/,/
任 务/ {print}' /tmp/a.txt > /tmp/wei.txt
mkdir /tmp/wei
cp /tmp/wei.txt /tmp/wei
cd /tmp/wei
awk 'BEGIN { i = 1; system( "rm [1-9]* >/dev/null 2>&1" ) }
{
printf("%s\n", $0) >> i
close(i)
if ($0~/
任 务/)
i++
}' /tmp/wei/wei.txt

sed -i '/
任 务/d' *
sed -i '2d' *
sed -i '2d' *
sed -i '/
客 户/d' *
sed -i '/^\\/d' *
sed -i '/信 息\\/d' *
sed -i 's/ 维护与服务任务书/维护与服务任务书/g' *
sed -i 's/^ //g' *
sed -i 's/响应截止日期:/响应截止日期\\\n/g' *
sed -i 's/服务类型( 售前 售后 培训 其他):/服务类型\\\n/g' *
sed -i '/维护与服务任务书/d' *
sed -i 's/服务类型\\/服务类型: /g' *
sed -i 's/响应截止日期\\/响应截止日期: /g' *
sed -i 's/客户名称\\/客户名称: /g' *
sed -i 's/用户名称\\/用户名称: /g' *
sed -i 's/合同号\\/合同号: /g' *
sed -i 's/产品\/项目名称\\/产品\/项目名称: /g' *
sed -i 's/服务号\\/服务号: /g' *
sed -i 's/地址\\/地址: /g' *
sed -i 's/联系人\\/联系人: /g' *
sed -i 's/电话\/传真\\/电话: /g' *
sed -i 's/EMAIL\\/EMAIL: /g' *
sed ':a;N;$!ba;s/\n//g' * -i
sed -i 's/\\//g' *

sed -i 's/响应截止日期:/\t/g' *
sed -i 's/客户名称:/\t/g' *
sed -i 's/用户名称:/\t/g' *
sed -i 's/合同号:/\t/g' *
sed -i 's/产品\/项目名称:/\t/g' *
sed -i 's/服务号:/\t/g' *
sed -i 's/地址:/\t/g' *
sed -i 's/联系人:/\t/g' *
sed -i 's/电话:/\t/g' *
sed -i 's/EMAIL:/\t/g' *
sed -i 's/服务类型://g' *
echo -e "服务类型\t响应截止日期\t客户名称\t合同号\t产品/项目名称\t服务号\t地址\t联系人\t电话\tEMAIL\t"
>/tmp/wei/0
rm /tmp/wei/wei.txt
cat /tmp/wei/* > /tmp/customer_wei.txt
cd -

###自主可控
rm /tmp/zi.txt
rm /tmp/zi -rf
awk '/ 自主可控任务书/,/ 任 务 内 容/ {print}' /tmp/a.txt >
/tmp/zi.txt
mkdir /tmp/zi
cp /tmp/zi.txt /tmp/zi/zi.txt
cd /tmp/zi
awk 'BEGIN { i = 1; system( "rm [1-9]* >/dev/null 2>&1" ) }
{
printf("%s\n", $0) >> i
close(i)
if ($0~/ 任 务 内 容/)
i++
}' /tmp/zi/zi.txt
rm /tmp/zi/zi.txt
sed -i '/ 任 务 内 容/d' *
sed -i '2d' *
sed -i '2d' *
sed -i '/^\\/d' *
sed -i '/ 客 户 信 息\\/d' *
sed -i 's/ 自主可控任务书/自主可控任务书/g' *
sed -i 's/^ //g' *
sed -i 's/时间日期:/时间日期\\\n/g' *
sed -i 's/客户类型( 新客户 老客户 其他 ):/客户类型\\\n/g' *
sed -i '/自主可控任务书/d' *
sed -i 's/客户类型\\/客户类型: /g' *
sed -i 's/时间日期\\/时间日期: /g' *
sed -i 's/客户名称\\/客户名称: /g' *
sed -i 's/用户名称\\/用户名称: /g' *
sed -i 's/合同号\\/合同号: /g' *
sed -i 's/项目名称\\/项目名称: /g' *
sed -i 's/职务\\/职务: /g' *
sed -i 's/地址\\/地址: /g' *
sed -i 's/联系人\\/联系人: /g' *
sed -i 's/电话\/传真\\/电话: /g' *
sed -i 's/EMAIL\\/EMAIL: /g' *
sed ':a;N;$!ba;s/\n//g' * -i
sed -i 's/\\//g' *

sed -i 's/时间日期:/\t/g' *
sed -i 's/客户名称:/\t/g' *
sed -i 's/用户名称:/\t/g' *
sed -i 's/合同号:/\t/g' *
sed -i 's/项目名称:/\t/g' *
sed -i 's/职务:/\t/g' *
sed -i 's/地址:/\t/g' *
sed -i 's/联系人:/\t/g' *
sed -i 's/电话:/\t/g' *
sed -i 's/EMAIL:/\t/g' *
sed -i 's/客户类型://g' *
echo -e "客户类型\t时间日期\t客户名称\t地址\t项目名称\t合同号\t联系人\t职务\t电话\tEMAIL\t" >/tmp/zi/0
cat /tmp/zi/* > /tmp/customer_zi.txt
cd -







发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2013.01.08 17:37:49 由 服务人员
类型: 外部注解
附件:

6962


Ticket -> Frontend::Agent::Ticket::ViewZoom
更改几个有关 freefields 以及显示的配置

BOoRFGOnZ
OTRS newbie
Posts: 8
Joined: 09 Aug 2013, 03:19
OTRS Version?: 3.2.9

Re: 大家好,我也共享一下改过的一些地方,供大家参考

Postby BOoRFGOnZ » 09 Aug 2013, 06:28

发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2013.01.08 23:32:22 由 服务人员
类型: 外部注解
附件:


增加 几个 Dynamic Fields Management

[1]dd 有效工作时间(小时)
7
正文
票单
有效
[2]Delete this field

[3]ee 文档等级
8
Dropdown
票单
有效

并在 该显示的区域 提供显示 以及配置功能

Frontend::Agent::Ticket::ViewFreeText

Ticket::Frontend::AgentTicketFreeText###DynamicField 字段 值
删除该条目 删除该条目 删除该条目
新增新条目

Dynamic fields shown in the ticket free text screen of the agent interface.
Possible settings: 0 = Disabled, 1 = Enabled, 2 = Enabled and required.

-> Frontend::Agent::Ticket::ViewZoom

重置设定Ticket::Frontend::AgentTicketZoom###DynamicField 字段 值
删除该条目 删除该条目 删除该条目 删除该条目 删除该条目 删除该条目 删除该条目
新增新条目



[1] http://211.103.183.236/otrs/i?Action=Ad ... =Ticket;Fi
eldType=Text;ID=58
[2] http://211.103.183.236/otrs/i?Action=AdminDynamicField#
[3] http://211.103.183.236/otrs/i?Action=Ad ... Type=Ticke
t;FieldType=Dropdown;ID=59




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
Note
创建: 2013.01.08 23:55:37 由 服务人员
类型: 外部注解
附件:

取消

Accunt time
time unit

Ticket -> Frontend::Agent
Reset this settingTicket::Frontend::AccountTime NoYes

Default value: Yes






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2013.01.13 15:46:52 由 服务人员
类型: 外部注解
附件:

这个一个 navigation 个人周报

在kernel/config/file/Framework.xml

添加

<ConfigItem Name="Frontend::Module###AgentDashboard_zhoubao" Required="0"
Valid="1">
<Description Translatable="1">Frontend module registration for the
agent interface.</Description>
<Group>Framework</Group>
<SubGroup>Frontend::Agent::ModuleRegistration</SubGroup>
<Setting>
<FrontendModuleReg>
<Description>Agent Dashboard</Description>
<Title></Title>
<NavBarName>zhoubao</NavBarName>
<NavBar>
<Description Translatable="1"></Description>
<Name Translatable="1">zhoubao</Name>
<Link>Action=AgentDashboard</Link>
<LinkOption></LinkOption>
<NavBar>zhoubao</NavBar>
<Type>Menu</Type>
<Description Translatable="1"></Description>
<Block>ItemArea</Block>
<AccessKey>z</AccessKey>
<Prio>9500</Prio>
</NavBar>
</FrontendModuleReg>
</Setting>
</ConfigItem>

稍后再新建一个页面 加入office控件




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2013.01.16 15:04:53 由 服务人员
类型: 外部注解
附件:

添加 toolbar

/opt/otrs/Kernel/Config/Files/Ticket.xml

增加

<ConfigItem
Name="Frontend::ToolBarModule###8-Ticket::TicketLocked_zhudongfuwu"
Required="0" Valid="1">
<Description Translatable="1">Agent interface notification module to
check the used charset.</Description>
<Group>Ticket</Group>
<SubGroup>Frontend::Agent::ToolBarModule</SubGroup>
<Setting>
<Hash>
<Item
Key="Module">Kernel::Output::HTML::ToolBarTicketLocked</Item>
<Item Key="CssClass">Locked</Item>
<Item Key="CssClassNew">Locked New</Item>
<Item Key="CssClassReached">Locked Reached</Item>
<Item Key="Priority">1030030</Item>
</Hash>
</Setting>
</ConfigItem>

修改系统配置 in Ticket -> Frontend::Agent::ToolBarModule

Frontend::ToolBarModule###8-Ticket::TicketLocked_zhudongfuwu 字段 值


Agent interface notification module to check the used charset.






发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
收件人:
cs2c_BJ 支持 <xxxx@cs2c.com.cn>
标题:
注解
创建: 2013.01.17 18:21:08 由 服务人员
类型: 外部注解
附件:


DashboardTicketGeneric.pm 更改 大小到 50

ub Preferences {
my ( $Self, %Param ) = @_;

my @Params = (
{
Desc => 'Shown Tickets',
Name => $Self->{PrefKey},
Block => 'Option',

# Block => 'Input',
Data => {
5 => ' 5',
10 => '10',
15 => '15',
20 => '20',
25 => '25',
35 => '35',
50 => '50',
},

TicketOverviewPreview.pm ,更改显示列表的多少

);
if ($MimeTypeText) {
$ArticleItem->{BodyNote} = $MimeTypeText;
$ArticleItem->{Body} = '';
}
else {

# html quoting
$ArticleItem->{Body} = $Self->{LayoutObject}->Ascii2Html(
NewLine => $Param{Config}->{DefaultViewNewLine} || 90,
Text => $ArticleItem->{Body},
VMax => $Param{Config}->{DefaultPreViewLines} || 50,
LinkFeature => 1,
HTMLResultMode => 1,
StripEmptyLines => $P




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2013.01.30 00:01:33 由 服务人员
类型: 外部注解
附件:

升级到 3.2.1

[1]Documentation[2]Skip to Navigation
[3]HTML Admin-Manual [4]OTRS 3.2 (en)
- [5]OTRS 3.1 (en)
- [6]OTRS 3.0 (en)
- [7]OTRS 3.0 (de)
- [8]OTRS 3.0 (ru)
- [9]OTRS 2.4 (en)
- [10]OTRS 2.4 (de)

[11]PDF Admin-Manual
- [12]OTRS 3.2 (en)
- [13]OTRS 3.1 (en)
- [14]OTRS 3.0 (en)
- [15]OTRS 3.0 (de)
- [16]OTRS 3.0 (ru)
- [17]OTRS 2.4 (en)
- [18]OTRS 2.4 (de)

[19]HTML ITSM-Manual
- [20]OTRS::ITSM 3.2 (en)
- [21]OTRS::ITSM 3.2 (de)
- [22]OTRS::ITSM 2.0 (en)
- [23]OTRS::ITSM 2.0 (de)
- [24]OTRS::ITSM 1.3 (en)
- [25]OTRS::ITSM 1.3 (de)
- [26]OTRS::ITSM 1.2 (en)
- [27]OTRS::ITSM 1.2 (de)

[28]PDF ITSM-Manual
- [29]OTRS::ITSM 3.2 (en)
- [30]OTRS::ITSM 3.2 (de)
- [31]OTRS::ITSM 2.0 (en)
- [32]OTRS::ITSM 2.0 (de)
- [33]OTRS::ITSM 1.3 (en)
- [34]OTRS::ITSM 1.3 (de)
- [35]OTRS::ITSM 1.2 (en)
- [36]OTRS::ITSM 1.2 (de)

[37]HTML Developer-Manual
- [38]OTRS 3.1 (en)
- [39]OTRS 3.0 (en)
- [40]OTRS 2.4 (en)

[41]PDF Developer-Manual
- [42]OTRS 3.1 (en)
- [43]OTRS 3.0 (en)
- [44]OTRS 2.4 (en)

[45]HTML Developer-API
- [46]OTRS API (en)

Upgrading the OTRS Framework

[47]Prev

Chapter 2. Installation [48]Next

Upgrading the OTRS Framework

These instructions are for people upgrading OTRS from version 3.1 to 3.2, and
apply both for RPM and source code (tarball) upgrades.

If you are running a lower version of OTRS you have to follow the upgrade path
to 3.1 first (1.1->1.2->1.3->2.0->2.1->2.2->2.3->2.4->3.0->3.1->3.2 ...)!

Please note that if you upgrade from OTRS 2.2 or earlier, you have to take an
extra step; please read [49]http://bugs.otrs.org/show_bug.cgi?id=6798.

Please note that for upgrades from 3.2.0.beta1, an additional step 9 is
needed!

Within a single minor version you can skip patch level releases if you want to
upgrade. For instance you can upgrade directly from OTRS 3.2.1 to version
3.2.4. If you need to do such a "patch level upgrade", you should skip steps
9, 13, 15, 16 and 17.

Stop all relevant services.

e. g. (depends on used services):

shell> /etc/init.d/cron stop
shell> /etc/init.d/postfix stop
shell> /etc/init.d/apache stop

Backup everything below $OTRS_HOME (default: OTRS_HOME=/opt/otrs):

Kernel/Config.pm

Kernel/Config/GenericAgent.pm

Kernel/Config/Files/ZZZAuto.pm

var/*

as well as the database

Make sure that you have backed up everything ;-)

Setup new system (optional)

If possible, try this install on a separate machine for testing first.

Install the new release (tar or RPM).

With the tarball:

shell> cd /opt
shell> tar -xzf otrs-x.x.x.tar.gz
shell> ln -s otrs-x.x.x otrs

Restore old configuration files.

Kernel/Config.pm

Kernel/Config/GenericAgent.pm

Kernel/Config/Files/ZZZAuto.pm

With the RPM:

shell> rpm -Uvh otrs-x.x.x.-01.rpm

In this case the RPM update automatically restores the old configuration
files.

Own themes

Note: The OTRS themes between 3.1 and 3.2 are NOT compatible, so don't use
your old themes!

Themes are located under $OTRS_HOME/Kernel/Output/HTML/*/*.dtl (default:
OTRS_HOME=/opt/otrs).

Set file permissions.

If the tarball is used, execute:

shell> cd /opt/otrs/
shell> bin/otrs.SetPermissions.pl

with the permissions needed for your system setup.

Check needed Perl modules

Verify that all needed perl modules are installed on your system and install
any modules that might be missing.

shell> /opt/otrs/bin/otrs.CheckModules.pl

Schema update:

Note: new tables created in the MySQL UPGRADING process will be created with
the default table storage engine set in your MySQL server. In MySQL 5.5 the
new default type is InnoDB. If existing tables, e.g. "users", have the table
storage engine e.g. MyISAM, then an error will be displayed when creating the
foreign key constraints.

You have two options: you can change the default storage engine of MySQL back
to MyISAM so that new tables will have the same engine as the existing tables,
or change the existing tables to use InnoDB as storage engine.

Any problems with regards to the storage engine will be reported by the
otrs.CheckDB.pl script, so please run it to check for possible issues.

shell> cd /opt/otrs/

# MySQL:
shell> bin/otrs.CheckDB.pl
shell> cat scripts/DBUpdate-to-3.2.mysql.sql | mysql -p -f -u root otrs

# PostgreSQL 8.2+:
shell> cat scripts/DBUpdate-to-3.2.postgresql.sql | psql otrs

# PostgreSQL, older versions:
shell> cat scripts/DBUpdate-to-3.2.postgresql_before_8_2.sql | psql otrs

Note: If you use PostgreSQL 8.1 or earlier, you need to activate the new
legacy driver for these older versions. Do this by adding a new line to your

Kernel/Config.pm

like this:

$Self->{DatabasePostgresqlBefore82} = 1;

Run the migration script (as user 'otrs', NOT as root):

shell> scripts/DBUpdate-to-3.2.pl

Do not continue the upgrading process if this script did not work properly for
you. Otherwise data loss may occur.

Database Upgrade During Beta Phase

This step is ONLY needed if you upgrade from 3.2.0.beta1!

Please apply the required database changes as follows:

MySQL:
shell> cat scripts/DBUpdate-3.2.beta.mysql.sql | mysql -p -f -u root otrs

PostgreSQL 8.2+:
shell> cat scripts/DBUpdate-3.2.beta.postgresql.sql | psql otrs

PostgreSQL, older versions:
shell> cat scripts/DBUpdate-3.2.beta.postgresql_before_8_2.sql | psql otrs

Refresh the configuration and delete caches. Please run:

shell> bin/otrs.RebuildConfig.pl
shell> bin/otrs.DeleteCache.pl

Restart your services.

e. g. (depends on used services):

shell> /etc/init.d/cron start
shell> /etc/init.d/postfix start
shell> /etc/init.d/apache start

Now you can log into your system.

Check 'Cache::Module' setting

The file cache backend 'FileRaw' was removed in favor of the faster
'FileStorable'. The DBUpdate-to-3.2.pl automatically updates the config
setting 'Cache::Module', but you need to change it manually if you defined
this setting in Kernel/Config.pm directly. It needs to be changed from
'Kernel::System::Cache::FileRaw' to 'Kernel::System::Cache::FileStorable'.

Check installed packages

In the package manager, check if all packages are still marked as correctly
installed or if any require reinstallation or even a package upgrade.

Cleanup metadata of archived tickets

Note: This step only applies if you use the ticket archiving feature of OTRS.

With OTRS 3.2, when tickets are archived, the information which agent read the
ticket and articles can be removed, as well as the ticket subscriptions of
agents. This is active by default and helps reduce the amount of data in the
database on large systems with many tickets and agents.

If you also want to cleanup this information for existing archived tickets,
please run this script:

shell> bin/otrs.CleanupTicketMetadata.pl --archived

If you want to KEEP this information instead, please set these SysConfig
settings to "No":

Ticket::ArchiveSystem::RemoveSeenFlags
Ticket::ArchiveSystem::RemoveTicketWatchers

Review (Modify) ACLs for Dynamic Fields

Note: This step only applies if you use ACLs to limit Dynamic Fields Dropdown
or Multiselect possible values.

Now in OTRS 3.2 the Possible and PossibleNot ACL sections for Dynamic Fields
Dropdown and Multiselect must refer to the key (internal values) rather than
the value (shown values).

Example:

For the defined field "Dropdown1" with possible values:
1 => 'A',
2 => 'B',
3 => 'C',

ACLs prior OTRS 3.2 should look like:

$Self->{TicketAcl}->{'Limit Dropdown1 entries'} = {
Properties => {},
Possible => {
Ticket => {
# White list entries with VALUES containing 'B' and 'C'
DynamicField_Dropdown1 => [ 'B', 'C' ],
},
},
};

ACLs must be modified to:

$Self->{TicketAcl}->{'Limit Dropdown1 entries'} = {
Properties => {},
Possible => {
Ticket => {
# White list entries with VALUES containing 'B' and 'C' (now using
KEYS)
DynamicField_Dropdown1 => [ '2', '3' ],
},
},
};

By doing this change ACLs will look much more consistent, since Possible and
PossibleDatabase
sections already use Keys instead of Values, please look at the following
example:

$Self->{TicketAcl}->{'Limit Dropdown1 entries based in Dropdown2'} = {
Properties => {
Ticket => {
# Match on the DeopDown2 KEY '1'
DynamicField_Dwondown2 => ['1'],
},
},
Possible => {
Ticket => {
# White list Dropdown1 entries with VALUES containing 'B' and 'C'
(now using KEYS)
DynamicField_Dropdown1 => ['1', '2'],
},
},
};

Adapt custom event handler modules

Note: this only applies if you have any custom developed event handler
modules.

Since OTRS 3.2, the data payload for event handler modules is no longer copied
into the %Param hash. You need to explicitly access it through $Param{Data}.

Old:

# get ticket
my %Ticket = $Self->{TicketObject}->TicketGet(
TicketID => $Param{TicketID},
UserID => 1,
);

New:

# get ticket
my %Ticket = $Self->{TicketObject}->TicketGet(
TicketID => $Param{Data}->{TicketID},
UserID => 1,
);

Well done!

[50]Prev [51]Up [52]Next

Installation from source (Linux, Unix) [53]Home Upgrading Windows Installer


[54]Discover it
- [55]Praise
- [56]Feature List
- [57]Blog
- [58]Demo System
- [59]Screenshots
- [60]Screencasts

- [61]Get it
- [62]Download
- [63]On Demand
- [64]Release Notes -->
- [66]Documentation
- [67]Source Code
- [68]Developer API

- [69]Get involved
- [70]User Forums
- [71]Mailing Lists -->
- [73]OTRS Ideas
- [74]Bug Tracking
- [76]Brainstorm / Ideas -->

- [77]Services / About
- [78]News / Announcements
- [79]Commercial Services (ext)
- [80]Contact us / Imprint OTRS.com Newsletter
Stay up-to-date with new product releases, case studies and more. -->

Copyright © 2001-2012 OTRS Team, All Rights Reserved. - [81]Imprint
[83] -->

[84]Discover it
- [85]Praise[86]Feature List[87]Demo System[88]Screencasts

[89]Get it
- [90]Download[91]Release Notes[92]Documentation[93]Source Code[94]Developer
API

[95]Get involved
- [96]Mailing Lists[97]Bug Tracking

[98]Services / About
- [99]News / Announcements[100]Commercial Services (ext)[101]Contact us /
Imprint

[102]^ Use Elevator


[1] http://doc.otrs.org/
[2] http://doc.otrs.org/3.2/en/html/upgradi ... navigation
[3] " target=
[4] http://doc.otrs.org/3.2/en/html/
[5] http://doc.otrs.org/3.1/en/html/
[6] http://doc.otrs.org/3.0/en/html/
[7] http://doc.otrs.org/3.0/de/html/
[8] http://doc.otrs.org/3.0/ru/html/
[9] http://doc.otrs.org/2.4/en/html/
[10] http://doc.otrs.org/2.4/de/html/
[11] " target=
[12] http://ftp.otrs.org/pub/otrs/doc/doc-ad ... n_book.pdf
[13] http://ftp.otrs.org/pub/otrs/doc/doc-ad ... n_book.pdf
[14] http://ftp.otrs.org/pub/otrs/doc/doc-ad ... n_book.pdf
[15] http://ftp.otrs.org/pub/otrs/doc/doc-ad ... n_book.pdf
[16] http://ftp.otrs.org/pub/otrs/doc/doc-ad ... n_book.pdf
[17] http://ftp.otrs.org/pub/otrs/doc/doc-ad ... n_book.pdf
[18] http://ftp.otrs.org/pub/otrs/doc/doc-ad ... n_book.pdf
[19] " target=
[20] http://doc.otrs.org/itsm/3.2/en/html/
[21] http://doc.otrs.org/itsm/3.2/de/html/
[22] http://doc.otrs.org/itsm/2.0/en/html/
[23] http://doc.otrs.org/itsm/2.0/de/html/
[24] http://doc.otrs.org/itsm/1.3/en/html/
[25] http://doc.otrs.org/itsm/1.3/de/html/
[26] http://doc.otrs.org/itsm/1.2/en/html/
[27] http://doc.otrs.org/itsm/1.2/de/html/
[28] " target=
[29] http://ftp.otrs.org/pub/otrs/doc/doc-it ... m_book.pdf
[30] http://ftp.otrs.org/pub/otrs/doc/doc-it ... m_book.pdf
[31] http://ftp.otrs.org/pub/otrs/doc/doc-it ... m_book.pdf
[32] http://ftp.otrs.org/pub/otrs/doc/doc-it ... m_book.pdf
[33] http://ftp.otrs.org/pub/otrs/doc/doc-it ... m_book.pdf
[34] http://ftp.otrs.org/pub/otrs/doc/doc-it ... m_book.pdf
[35] http://ftp.otrs.org/pub/otrs/doc/doc-it ... m_book.pdf
[36] http://ftp.otrs.org/pub/otrs/doc/doc-it ... m_book.pdf
[37] " target=
[38] http://doc.otrs.org/developer/3.1/en/html/
[39] http://doc.otrs.org/developer/3.0/en/html/
[40] http://doc.otrs.org/developer/2.4/en/html/
[41] " target=
[42] http://ftp.otrs.org/pub/otrs/doc/doc-de ... r_book.pdf
[43] http://ftp.otrs.org/pub/otrs/doc/doc-de ... r_book.pdf
[44] http://ftp.otrs.org/pub/otrs/doc/doc-de ... r_book.pdf
[45] " target=
[46] http://dev.otrs.org/
[47] http://doc.otrs.org/3.2/en/html/manual- ... -otrs.html
[48] http://doc.otrs.org/3.2/en/html/upgrade ... aller.html
[49] http://bugs.otrs.org/show_bug.cgi?id=6798
[50] http://doc.otrs.org/3.2/en/html/manual- ... -otrs.html
[51] http://doc.otrs.org/3.2/en/html/installation.html
[52] http://doc.otrs.org/3.2/en/html/upgrade ... aller.html
[53] http://doc.otrs.org/3.2/en/html/index.html
[54] http://otrs.org/praise/
[55] http://otrs.org/praise/
[56] http://otrs.org/products/otrs-help-desk/
[57] http://www.otrs-blog.org/
[58] http://demo.otrs.org/
[59] http://otrs.org/screenshots/
[60] http://www.youtube.com/user/diginin1974#g/u
[61] http://otrs.org/downloads/
[62] http://otrs.org/downloads/
[63] http://www.otrsondemand.com/
[64] http://otrs.org/releases/
[65] http://otrs.org/
[66] http://doc.otrs.org/
[67] http://otrs.org/source/
[68] http://dev.otrs.org/
[69] http://otrs.org/lists/
[70] http://forums.otrs.org/
[71] http://otrs.org/lists/
[72] http://faq.otrs.org/
[73] http://otrsteam.ideascale.com/
[74] http://bugs.otrs.org/
[75] http://otrs.org/
[76] http://otrs.org/
[77] http://otrs.org/news/
[78] http://otrs.org/news/
[79] http://otrs.com/
[80] http://otrs.org/contact/
[81] http://www.otrs.com/en/corporate-navigation/imprint/
[82] http://www.ipexchange.de/
[83] http://www.thomas-krenn.com/
[84] http://otrs.org/
[85] http://otrs.org/praise/
[86] http://otrs.org/products/otrs-help-desk/
[87] http://demo.otrs.org/
[88] http://www.youtube.com/user/diginin1974#g/u
[89] http://otrs.org/downloads/
[90] http://otrs.org/downloads/
[91] http://otrs.org/releases/
[92] http://doc.otrs.org/
[93] http://otrs.org/source/
[94] http://dev.otrs.org/
[95] http://otrs.org/lists/
[96] http://otrs.org/lists/
[97] http://bugs.otrs.org/
[98] http://otrs.org/news/
[99] http://otrs.org/news/
[100] http://otrs.com/
[101] http://otrs.org/contact/
[102] http://doc.otrs.org/3.2/en/html/upgrading.html#top

BOoRFGOnZ
OTRS newbie
Posts: 8
Joined: 09 Aug 2013, 03:19
OTRS Version?: 3.2.9

Re: 大家好,我也共享一下改过的一些地方,供大家参考

Postby BOoRFGOnZ » 09 Aug 2013, 06:34

发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2013.01.30 15:53:44 由 服务人员
类型: 外部注解
附件:

升级到新的3.2.1后,由于自动对dynamic区域注入ajaxupdate的脚本,导致customerticketmessage错误的显示接受队列。修改以下内容
/opt/otrs/Kernel/System/DynamicField/Backend/Dropdown.pm

$FirstItem = 0;
}
else {
$FieldsToUpdate .= ', ';
}
$FieldsToUpdate .= "'" . $Field . "'";
}
}

#add js to call FormUpdate()
#weiwei
$HTMLString .= <<"EOF";
<!--dtl:js_on_document_complete-->
<script type="text/javascript">//<![CDATA[
去掉 \$('$FieldSelector').bind('change', function (Event) {
去掉 Core.AJAX.FormUpdate(\$(this).parents('form'), 'AJAXUpdate',
'$FieldName', [ $FieldsToUpdate ]);
});
//]]></script>
<!--dtl:js_on_document_complete-->
EOF
}

# call EditLabelRender on the common backend
my $LabelString = $Self->{BackendCommonObject}->EditLabelRender(
DynamicFieldConfig => $Param{DynamicFieldConfig},
Mandatory => $Param{Mandatory} || '0',
FieldName => $FieldName,
);





发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2013.02.02 21:44:43 由 服务人员
类型: 外部注解
附件:

mysql后天备份

#!/bin/bash
t=`date +%Y%m%d`
/opt/otrs/bin/otrs.UnlockTickets.pl --all
mysqldump --databases otrs -u root -p1234567 >
/opt/backotrs_mysql/mysql_otrs_$t.sql
find /opt/backotrs_mysql/ -name "*.sql" -atime +7| xargs rm -rf
a=`mysql -uroot -p1234567 <<EOF
use otrs;
select count(*) from ticket;
quit
EOF`
c=`echo $a|awk '{print $2}' `
r=$(($c-1433));
echo "系统消息:2012年度,完成1153个支持服务事件。截止昨日,今年有:$r个Tickets。"
>/opt/otrs/var/notify_1.txt

~

~

~

~




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2013.02.25 11:09:26 由 服务人员
类型: 外部注解
附件:

升级到 3.2.2




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2013.02.26 11:52:56 由 服务人员
类型: 外部注解
附件:

升级一次 伤不起阿




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2013.03.08 14:48:23 由 服务人员
类型: 外部注解
附件:

数据库越来越大,将附件存储方式变为FS

Ticket::StorageModule ArticleStorageDBArticleStorageFS

默认值: ArticleStorageDB

Saves the attachments of articles. "DB" stores all data in the database (not
recommended for storing big attachments). "FS" stores the data on the
filesystem; this is faster but the webserver should run under the OTRS user.
You can switch between the modules even on a system that is already in
production without any loss of data.




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2013.03.13 13:43:24 由 服务人员
类型: 外部注解
附件:

将定制开发的所有内容放到 /opt/otrs/Custom

以后升级方便




发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2013.03.17 12:26:26 由 服务人员
类型: 外部注解
附件:

修改系统配置 in Ticket -> Frontend::Agent::TicketOverview
用于修改 zoom状态下 显示更多的内容

Ticket::Frontend::Overview###Preview 字段值
删除该条目删除该条目删除该条目删除该条目删除该条目删除该条目删除该条目删除该条目删除该条目删除该条目
新增新条目





发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解
创建: 2013.03.18 14:28:05 由 服务人员
类型: 外部注解
附件:

在nav中添加满调数据

Framework.xml
<ConfigItem Name="Frontend::Module###AgentDashboard_mandiao" Required="0"
Valid="1">
<Description Translatable="1">Frontend module registration for the
agent interface.</Description>
<Group>Framework</Group>
<SubGroup>Frontend::Agent::ModuleRegistration</SubGroup>
<Setting>
<FrontendModuleReg>
<Description>Agent Dashboard</Description>
<Title></Title>
<NavBarName>mandiao</NavBarName>
<NavBar>
<Description Translatable="1"></Description>
<Name Translatable="1">mandiao</Name>
<Link>Action=AgentDashboard</Link>

<LinkOption>AgentTicketSearch;Subaction=Search;TakeLastSearch=1;SaveProfile=1;Profile=mandiao</LinkO
ption>
<NavBar>mandiao</NavBar>
<Type>Menu</Type>
<Description Translatable="1"></Description>
<Block>ItemArea</Block>
<AccessKey>z</AccessKey>
<Prio>9500</Prio>
</NavBar>
</FrontendModuleReg>
</Setting>
</ConfigItem>
~

数据库 插入 search_profile

#!/bin/bash
mysql -uroot -p1234567 <<EOF
use otrs
select login from users into outfile "/tmp/a.txt";
EOF
for file in `cat /tmp/a.txt`
do
mysql -uroot -p1234567 <<EOF
use otrs
insert into search_profile
values('TicketSearch::$file','mandiao','ARRAY','TypeIDs','5');
EOF
done





发件人:
cs2c_BJ <serviceadmin@cs2c.com.cn>
标题:
注解-OTRS配置文件
创建: 2013.03.25 16:39:17 由 服务人员
类型: 外部注解
附件:

一、OTRS包含哪些配置文件?

Kernel/Config.pm

Config.pm可以包含任何Defaults.pm文件所包含的内容

- 数据库连接
- 用户验证

Kernel/Config/Defaults.pm
- 字符集
- 默认语言
- 邮件
- LogModule
- 数据库连接
- 验证

Kernel/Config/Files/*.xml

利用xml标记语言,定义OTRS参数及其默认值。

- Kernel/Config/Files/Framwork.xml
- Kernel/Config/Files/Ticket.xml
- Kernel/Config/Files/FAQ.xml

Kernel/Config/Files/*.pm

Perl模块,执行OTRS参数赋值操作。

- Kernel/Config/Files/ZZZAAuto.pm
- Kernel/Config/Files/ZZZAuto.pm
- Kernel/Config/Files/ZZZProcessManagement.pm

二、配置文件之间的关系 Config.pm与Defaults.pm的区别
- Config.pm可以包含任何Defaults.pm文件所包含的内容;
- Defaults.pm中包含

BOoRFGOnZ
OTRS newbie
Posts: 8
Joined: 09 Aug 2013, 03:19
OTRS Version?: 3.2.9

Re: 大家好,我也共享一下改过的一些地方,供大家参考

Postby BOoRFGOnZ » 19 Aug 2013, 04:24

我自己站个沙发


Return to “综合”

Who is online

Users browsing this forum: No registered users and 2 guests