zoukankan      html  css  js  c++  java
  • 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的定义

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

    2.定义服务契约IScheduleService

    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的信息

    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                  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,对于对象的定义更加简单明了。

  • 相关阅读:
    SVN服务器搭建和使用(二)
    Unity5自动命名Assetbundle并打包
    Unity学习(六)5.x依赖打包
    Dota2技能系统设计分析
    android调用其他apk的activity
    Android 跨应用调用Activity
    Unity5的AssetBundle的一点使用心得
    Myeclipse快捷键集合
    我的CSS命名规则
    常用的 Windows 键
  • 原文地址:https://www.cnblogs.com/TerryLiang/p/2056704.html
Copyright © 2011-2022 走看看