Asp.Net MVC 3 + ExtJs 4.01做一个Quartz.Net管理平台

在原来的公司曾经用asp.net + extjs 2做过一个Quartz.Net简单管理平台(后来申请了著作权,尽然也可以),随着Asp.Net MVC 3和ExtJs 4的发布,突然有了重新用Asp.Net MVC 3 + ExtJs 4重新做一下的冲动(冲动是魔鬼呀。。。)。本次只实现了显示触发器Trigger的信息。

效果图:

 

1.定义TriggerInfo,这里为了方便起见只列出了TriggerInfo的定义

ExpandedBlockStart.gif View Code
 1       using  System;
 2       using  System.Runtime.Serialization;
 3 
 4      [DataContract]
 5       public   class  TriggerInfo
 6      {
 7          [DataMember]
 8           public   string  CalendarName {  get set ; }
 9 
10          [DataMember]
11           public   string  Description {  get set ; }
12 
13          [DataMember]
14           public  DateTime ?  EndTimeUtc {  get set ; }
15 
16          [DataMember]
17           public  DateTime ?  FinalFireTimeUtc {  get set ; }
18 
19          [DataMember]
20           public   string  FireInstanceId {  set get ; }
21 
22          [DataMember]
23           public   string  FullJobName {  get set ; }
24 
25          [DataMember]
26           public   string  FullName {  get set ; }
27 
28          [DataMember]
29           public   string  Group {  get set ; }
30 
31          [DataMember]
32           public   bool  HasAdditionalProperties {  get set ; }
33 
34          [DataMember]
35           public   bool  HasMillisecondPrecision {  get set ; }
36 
37          [DataMember]
38           public   string  JobGroup {  get set ; }
39 
40          [DataMember]
41           public   string  JobName {  get set ; }
42 
43          [DataMember]
44           public   string  Key {  get set ; }
45 
46          [DataMember]
47           public   bool  MayFireAgain {  get set ; }
48 
49          [DataMember]
50           public   int  MisfireInstruction {  get set ; }
51 
52          [DataMember]
53           public   string  Name {  get set ; }
54 
55          [DataMember]
56           public  DateTime ?  NextFireTimeUtc {  get set ; }
57 
58          [DataMember]
59           public  DateTime ?  PreviousFireTimeUtc {  get set ; }
60 
61          [DataMember]
62           public   int  Priority {  get set ; }
63 
64          [DataMember]
65           public  DateTime StartTimeUtc {  get set ; }
66 
67          [DataMember]
68           public   string [] TriggerListenerNames {  get set ; }
69 
70          [DataMember]
71           public  TriggerType TriggerType {  get set ; }
72 
73          [DataMember]
74           public  TriggerStateInfo TriggerState {  get set ; }
75 
76          [DataMember]
77           public   bool  Volatile {  get set ; }
78 
79          [DataMember]
80           public   int  RepeatCount {  get set ; }
81 
82          [DataMember]
83           public  TimeSpan RepeatInterval {  get set ; }
84 
85          [DataMember]
86           public   int  TimesTriggered {  get set ; }
87 
88          [DataMember]
89           public   int  RepeatIndefinitely {  get set ; }
90 
91          [DataMember]
92           public   string  CronExpressionString {  get set ; }
93 
94          [DataMember]
95           public  TimeZoneInfo TimeZone {  get set ; }
96      }

2.定义服务契约IScheduleService

ExpandedBlockStart.gif View Code
  1       using  System;
  2       using  System.ServiceModel;
  3 
  4       using  DataContract;
  5 
  6      [ServiceContract]
  7       public   interface  IScheduleService
  8      {
  9          [OperationContract]
 10           void  AddJob(JobInfo jobInfo,  bool  replace);
 11 
 12          [OperationContract]
 13           bool  DeleteJob( string  jobName,  string  groupName);
 14 
 15          [OperationContract]
 16           string [] GetJobGroupNames();
 17 
 18          [OperationContract]
 19          JobInfo GetJobDetail( string  jobName,  string  groupName);
 20 
 21          [OperationContract]
 22           string [] GetJobNames( string  groupName);
 23 
 24          [OperationContract]
 25          TriggerInfo GetTrigger( string  triggerName,  string  groupName);
 26 
 27          [OperationContract]
 28           string [] GetTriggerGroupNames();
 29 
 30          [OperationContract]
 31           string [] GetTriggerNames( string  groupName);
 32 
 33          [OperationContract]
 34          TriggerStateInfo GetTriggerState( string  triggerName,  string  triggerGroup);
 35 
 36          [OperationContract]
 37           bool  IsJobGroupPaused( string  groupName);
 38 
 39          [OperationContract]
 40           bool  IsTriggerGroupPaused( string  groupName);
 41 
 42          [OperationContract]
 43           void  PauseAll();
 44 
 45          [OperationContract]
 46           void  PauseJob( string  jobName,  string  groupName);
 47 
 48          [OperationContract]
 49           void  PauseJobGroup( string  groupName);
 50 
 51          [OperationContract]
 52           void  PauseTrigger( string  triggerName,  string  triggerGroup);
 53 
 54          [OperationContract]
 55           void  PauseTriggerGroup( string  triggerGroup);
 56 
 57          [OperationContract]
 58          DateTime ?  RescheduleJob( string  triggerName,  string  triggerGroup, TriggerInfo newTrigger);
 59 
 60          [OperationContract]
 61           void  ResumeAll();
 62 
 63          [OperationContract]
 64           void  ResumeJob( string  jobName,  string  groupName);
 65 
 66          [OperationContract]
 67           void  ResumeJobGroup( string  groupName);
 68 
 69          [OperationContract]
 70           void  ResumeTrigger( string  triggerName,  string  groupName);
 71 
 72          [OperationContract]
 73           void  ResumeTriggerGroup( string  groupName);
 74 
 75          [OperationContract]
 76          DateTime ScheduleJob(TriggerInfo trigger);
 77 
 78          [OperationContract]
 79          DateTime ScheduleJobByTrigger(JobInfo jobInfo, TriggerInfo trigger);
 80 
 81          [OperationContract]
 82           void  Shutdown( bool  waitForJobsToComplete);
 83 
 84          [OperationContract]
 85           void  Standby();
 86 
 87          [OperationContract]
 88           void  Start();
 89 
 90          [OperationContract]
 91           void  StartDelayed(TimeSpan delay);
 92 
 93          [OperationContract]
 94           void  TriggerJob( string  jobName,  string  groupName);
 95 
 96          [OperationContract]
 97           void  TriggerJobWithVolatileTrigger( string  jobName,  string  groupName);
 98 
 99          [OperationContract]
100           void  UnscheduleJob( string  triggerName,  string  groupName);
101      }

3.实现服务契约IScheduleService的ScheduleService ,由于服务提交代码,只能描述一下了,这个类就是把Quartz.Net的Schedule封装了一下。

4.定义SchduleController,来输出Job和Trigger的信息

ExpandedBlockStart.gif View Code
 1       using  System.Collections.Generic;
 2       using  System.Web.Mvc;
 3 
 4       using  Vancl.Schedule.DataContract;
 5       using  Vancl.Schedule.ServiceContract;
 6       using  Vancl.Schedule.ServiceImpl;
 7 
 8       public   class  ScheduleController : Controller
 9      {
10           private   readonly  IScheduleService scheduleService  =  ScheduleService.Instance;
11 
12           ///   <summary>
13           ///  获取所有任务
14           ///   </summary>
15           ///   <returns></returns>
16           public  ActionResult GetJobs()
17          {
18              IList < JobInfo >  jobInfoes  =   new  List < JobInfo > ();
19 
20               string [] groupNames  =  scheduleService.GetJobGroupNames();
21 
22               if  (groupNames  !=   null )
23              {
24                   foreach  ( string  groupName  in  groupNames)
25                  {
26                       string [] jobNames  =  scheduleService.GetJobNames(groupName);
27 
28                       if  (jobNames  !=   null )
29                      {
30                           foreach  ( string  jobName  in  jobNames)
31                          {
32                              jobInfoes.Add(scheduleService.GetJobDetail(jobName, groupName));
33                          }
34                      }
35                  }
36              }
37 
38               return   new  JsonResult() { Data  =  jobInfoes, JsonRequestBehavior  =  JsonRequestBehavior.AllowGet };
39          }
40 
41           ///   <summary>
42           ///  获取所有触发器
43           ///   </summary>
44           ///   <returns></returns>
45           public  ActionResult GetTriggers()
46          {
47              IList < TriggerInfo >  triggerInfoes  =   new  List < TriggerInfo > ();
48 
49               string [] groupNames  =  scheduleService.GetTriggerGroupNames();
50 
51               if  (groupNames  !=   null )
52              {
53                   foreach  ( string  groupName  in  groupNames)
54                  {
55                       string [] triggerNames  =  scheduleService.GetTriggerNames(groupName);
56 
57                       if  (triggerNames  !=   null )
58                      {
59                           foreach  ( string  triggerName  in  triggerNames)
60                          {
61                              TriggerInfo triggerInfo  =  scheduleService.GetTrigger(triggerName, groupName);
62                              triggerInfo.TriggerState  =  scheduleService.GetTriggerState(triggerName, groupName);
63                              triggerInfoes.Add(triggerInfo);
64                          }
65                      }
66                  }
67              }
68 
69               return   new  JsonResult() { Data  =  triggerInfoes, JsonRequestBehavior  =  JsonRequestBehavior.AllowGet };
70          }
71      }

5.定义TriggerInfo,扩展于Ext.data.Model

1  Ext.define( " Vancl.Cxcp.TriggerInfo " , {
2      extend:  ' Ext.data.Model ' ,
3      fields: [ ' Name ' ' Group ' ' JobName ' ' JobGroup ' ' TriggerType ' ' StartTimeUtc ' ' PreviousFireTimeUtc ' ' NextFireTimeUtc ' ' MisfireInstruction ' ' TriggerState ' ]
4  });

 6.出于方便,我直接利用了Ext的desktop,下面是用于显示所有Trigger信息的Grid

 

  1  Ext.define( ' MyDesktop.GridWindow ' , {
  2      extend:  ' Ext.ux.desktop.Module ' ,
  3 
  4      requires: [
  5           ' Ext.data.* ' ,
  6           ' Ext.util.Format ' ,
  7           ' Ext.grid.Panel ' ,
  8           ' Ext.grid.RowNumberer '
  9      ],
 10 
 11      id:  ' grid-win ' ,
 12 
 13      init:  function  () {
 14           this .launcher  =  {
 15              text:  ' Grid Window ' ,
 16              iconCls:  ' icon-grid ' ,
 17              handler:  this .createWindow,
 18              scope:  this
 19          };
 20      },
 21 
 22      createWindow:  function  () {
 23           var  desktop  =   this .app.getDesktop();
 24           var  win  =  desktop.getWindow( ' grid-win ' );
 25           var  store  =   new  Ext.data.Store({
 26              model:  ' Vancl.Cxcp.TriggerInfo ' ,
 27              proxy: {
 28                  type:  ' ajax ' ,
 29                  url:  ' schedule/gettriggers ' ,
 30                  reader: {
 31                      type:  ' json ' ,
 32                      root:  ''
 33                  }
 34              }
 35          });
 36           if  ( ! win) {
 37              win  =  desktop.createWindow({
 38                  id:  ' grid-win ' ,
 39                  title:  ' 触发器信息 ' ,
 40                  width:  740 ,
 41                  height:  480 ,
 42                  iconCls:  ' icon-grid ' ,
 43                  animCollapse:  false ,
 44                  constrainHeader:  true ,
 45                  layout:  ' fit ' ,
 46                  items: [
 47                      {
 48                          border:  false ,
 49                          xtype:  ' grid ' ,
 50                          store: store,
 51                          columns: [{
 52                              text:  ' Name ' ,
 53                              dataIndex:  ' Name '
 54                          }, {
 55                              text:  ' Group ' ,
 56                              dataIndex:  ' Group '
 57                          }, {
 58                              text:  ' JobName ' ,
 59                              dataIndex:  ' JobName '
 60                          }, {
 61                              text:  ' JobGroup ' ,
 62                              dataIndex:  ' JobGroup '
 63                          }, {
 64                              text:  ' TriggerType ' ,
 65                              dataIndex:  ' TriggerType '
 66                          }, {
 67                              text:  ' StartTimeUtc ' ,
 68                              dataIndex:  ' StartTimeUtc '
 69                          }, {
 70                              text:  ' PreviousFireTimeUtc ' ,
 71                              dataIndex:  ' PreviousFireTimeUtc '
 72                          }, {
 73                              text:  ' NextFireTimeUtc ' ,
 74                              dataIndex:  ' NextFireTimeUtc '
 75                          }, {
 76                              text:  ' MisfireInstruction ' ,
 77                              dataIndex:  ' MisfireInstruction '
 78                          }, {
 79                              text:  ' TriggerState ' ,
 80                              dataIndex:  ' TriggerState '
 81                          }]
 82                      }
 83                  ],
 84                  tbar: [{
 85                      text:  ' Add ' ,
 86                      tooltip:  ' Add a new trigger ' ,
 87                      iconCls:  ' add '
 88                  },  ' - ' , {
 89                      text:  ' Remove Trigger ' ,
 90                      tooltip:  ' Remove the selected trigger ' ,
 91                      iconCls:  ' remove '
 92                  }]
 93              });
 94          }
 95          win.show();
 96          store.load();
 97 
 98           return  win;
 99      }
100  });

 从以上示例可以看出,ExtJs 4相对于ExtJs 2/3已经有了很大的变化。比如 data model,对于对象的定义更加简单明了。

转载于:https://www.cnblogs.com/TerryLiang/archive/2011/05/25/2056704.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值