1.VSS和EIS,pl/sql Developer的使用学习

2.呼叫中心基本业务的学习(1个图)

3.Eclipse环境搭建与tomcat部署

4.自己开发的一个测试模块(熟悉二次开发接口,配置beanRefFactory.xml(把写好的spring配置文件配在这里),applicationContext-tomcat.xml(把写好的hibernate映射文件配在这里hbm.xml),
struts-cc-operation.xml(业务受理接口)),记住把写好的struts配置文件配在web.xml里

5.项目:北京电视台工单提醒(默林小老头的学习)
  dwr(ajax)的使用和配置.
 
6.项目:联想移动项目页面修改:validate()与reset()方法
    下拉框,单选框是否为空的判断.
    Eclipse中svn的使用
    
7.Oracle数据库的安装与配置,远程vnc的使用
    
8.项目:北京电视台工单业务数据查询的开发.
 碰到四个问题:1.如果从查询出的结果中复制到查询条件的输入框,则查不出来.原因复制可能会出错.
 2.hql语句出现错误,本应该查对象.(当时通过看jsp日志查到是class转型错误)
 3.受理内容可以查出来,可是没法翻页.
 4.一开始出现了操作异常没查出来,发现是判断逻辑由于不认真漏写了符号没看出来,不够认真细致
 5.一开始查业务数据时我用了判断逻辑来传参数,结果查出来后第二页可以翻页,第二页以后就不能翻页,
 然后我找了一个翻页查询的页面看了一下发现,翻页是已经用一个类封装好了不用我们自己传参数.
 学到两个方法:判断为空的:trimToNull()和trimToEmpty()
 
9.培训系统:问题:无法编译的原因是没有清空缓存.删除tomcat/temp/catalina/hollycrm的目录,没有自动编译

10.BTV补充需求实现:(见相关文档)

11.(btv目标栏目)输入框与下拉列表联动,(javascript)看:btv_select_department.jsp解决方案.(重要技巧)

12.目标栏目列表的排序:方法1:自己在字典里配置。步骤:1.修改btv_querylist.xml:
添加: <bean id="sheet.query.dic" class="com.hollycrm.service.dictionary.extraction.impl.DicImpl" lazy-init="true" >
  <description>dept order by deptName</description>
  <property name="ql">
   <value>SELECT DEPT_ID code,DEPT_NAME name FROM TBL_SYS_DEPARTMENTS ORDER BY DEPT_NAME</value>
  </property>
  <property name="dao">
   <ref bean="dic.dicDao"/>
  </property>
         <property name="dicName">
   <value>deptOrderByName</value>
  </property>
 </bean>
 步骤2.配置字典文件:applicateionContext-dic.xml: <ref bean="sheet.query.dic"/>
 步骤3.btv_select_department.jsp页面直接调用接口:<%=HtmlGenerator.getSelecteFromMap(DictionaryUtil.getMap("deptOrderByName"),"",false)%>
方法2:自己写一个类,参照HtmlGenerator的getSelecteFromMap方法:实现一个字符串按大小比较string.size()

13.工单查询修改后采用了sql语句:(看相关mananger,action)注意方法别写死,可以把值设进request,
注意:技巧:SheetQueryListManagerImpl.java:querySheetDataBySql()方法返回VOResult,注意,把
sheetProgram,sheetStep,meta放到对象数组里再添加到arrayList中,这样在页面上就可以用
Object[] obj=(Object[])iter.next();
        SheetProgram sheetProgram=(SheetProgram)obj[1];
        SheetMetaData meta = (SheetMetaData)obj[0];
        SheetStep sheetStep = (SheetStep)obj[2];
来获取对象了,如果不这样做(managerimpl中3个对象放到object[]),则在ManagerImpl中返回的是result对象,到页面上如果用SheetProgram sheetProgram = (SheetProgram)iter.next()会出现对象转型错误,有碰到类似的问题以后小心!


14.F4可以转到方法的实现类,今天总结中务必要包服务请求主动服务串起来,让eclipse可以单步运行
的环境配置(is a Tomcat project 打勾).

15.视图相关表:queryviewUserAction:tbl_sys_functions的view_id与tbl_dataobject的func_id关联

16.tbl_general_codes配置常用编码比如:性别(男,女),而tbl_sys_code_type是动态配置下拉列表:配置方法:1.在表里先配置, 2。
   在页面业务编码中配置下拉列表相关的内容 

17.金山项目工单轻量级工作流的开发.

18.批量外呼计划开发

19. function submitToTicket(){
   //if(Validator.Validate(document.form1,2) && validateForm()){
//form1.action="<%=request.getContextPath()%>/service/lightworkflow/ticket_deal/ticket_accept_f.jsp?workflowId=kingsoftWorkflow&arg1="+form1.serviceId.value+"&arg2="+form1.extend10.value+"&arg3="+form1.extend11.value;
   //formUtil.submit(form1);
//&arg1=' + form1.serviceId.value+'&arg2='+form1.extend10.value+'&arg3='+form1.extend11.value
   context.tm.popupTask({url: '/service/lightworkflow/ticket_deal/ticket_accept_f.jsp?workflowId=kingsoftWorkflow',
          imageName: 'hollycc.call.out.callout_booking',
          desktop: context.desktop,
          arg1:form1.serviceId.value,
          arg2:form1.extend10.value,
          arg3:form1.extend11.value},
          {label: '创建工单', alt: '创建工单', icon: 'ui/images/menu_icon.gif'},
          false,
          true);
  //}
  //另一个页面的取法:context.task.task.arg1
 }

20. 使用jdbcTemplate.

public class AgentPhoneCount implements Serializable {
 private String beginTime = DateUtil.getCurrentDate();
 private String endTime = beginTime.substring(0,10)+" 23:59:59";
 
 public String getAgentPhoneCount(String userId) {
  StringBuffer sqlAgentPhoneCount = new StringBuffer(100);
  StringBuffer sqlMaxCount = new StringBuffer(100);
  
  sqlAgentPhoneCount.append("select count(t.service_id) from cc_core_service t ")
                    .append(" where t.service_type='I' and  t.Task_type='callin' and t.CALL_ON_FLAG='1' and t.SERVICE_AGENT='")
                    .append(userId)
                    .append("' and t.call_on_time between '")
                    .append(beginTime)
                    .append("' and '")
                    .append(endTime)
                    .append("'");
  
  sqlMaxCount.append("select max(count(t.service_id)) from cc_core_service t ")
             .append(" where t.service_type='I' and  t.Task_type='callin' and  t.CALL_ON_FLAG='1' and t.call_on_time between '")
                   .append(beginTime)
                   .append("' and '")
                   .append(endTime)
                   .append("'  group by t.service_agent");
  
  DataSource ds = (DataSource)DefaultBeanFactory.getBean("dataSource");
  JdbcTemplate jt = new JdbcTemplate(ds);
  int agentPhoneCount = jt.queryForInt(sqlAgentPhoneCount.toString());
  int maxCount = jt.queryForInt(sqlMaxCount.toString());
  return agentPhoneCount +","+maxCount;
 }
}

这个是工作中显示座席话务量的实际例子当时考虑获取从SQL中查出的count个数,采用了jdbcTemplate,这种方

式效率不高但是不会影响系统总体性能.

 21.利用公司框架HibernateBaseDAOImpl创建对象:create(vo);例如金山项目:关键字的保存

public String saveKeyWord(String keyWord) {
  KeyWord vo = new KeyWord();
  vo.setCreater(LoginUtil.getLoginName());
  vo.setCreateTime(DateUtil.getCurrentTime());
  vo.setId(IDGenerator.getNext("PK_KEYWORD"));
  vo.setIsValid("1");
  vo.setKeyWord(keyWord);
  try {
   create(vo);
  } catch (Exception e) {
   e.printStackTrace();
   return "-1";
  }

22.关键字的开发

这个客户提的需求要求我们把它做活了,在点服务请求上的完成服务时才把关键字保存到关键字历史表里,

23.客户模块:在customer_detail4Tabs.jsp:中的客户扩展字段是通过后台配置出来的:(容易忘):

配置步骤:后台管理->增加客户模板的时候来添加扩展字段,页面通过:out.print(customerExtendHTML);调用.

对应的action:CustomerAction.java

24.配置的字典在页面的调用方式:

<%=HtmlGenerator.getSelecteFromMap(DictionaryUtil.getMap("CC.KINGSOFT_MAP"),"",false) %>

25.在系统中使用用户参数:

调用com.hollycrm.ecallcenter.hollycc.util.UserParamUtil的静态方法static public String getSingleUserParam(String SysParaID)获得参数值

输入参数:String SysParaID:参数类型ID,配置在TBL_GENERAL_CODES中的CODE_ID

例子:String  value = UserParamUtil.getSingleUserParam("AgentId")